~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

Without seeing the code, it would be difficult to tell but are you updating your `demo` object so that it always fetches a new buffered image?

Also, this approach isn't a good one. You can at a given time write out only a single type of entity (to put it in simple terms); which is the reason why you set the content type of your writer/outputstream before writing out the response. A better solution here would be to have four IMG tags on your web page having different SRC values. For each SRC value, an appropriate byte stream would be retrieved for a given image and displayed to the browser.

Something like:

<html>
<head><title>Hi</title></head>
<body>
  <img src="/yourapp/img/img1" /><br/>
  <img src="/yourapp/img/img2" /><br/>
  <img src="/yourapp/img/img3" /><br/>
  <img src="/yourapp/img/img4" /><br/>
</body>
</html>
~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster
~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

> Link colors have NEVER changed for read/unread threads.

If not the colors then maybe the style (bold and not-bold). I'm pretty sure that in previous versions it was really easy to identify read threads based on the link formatting. Now no matter the state of the thread, the link always maintains the same style/color.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

IMO, the problem really isn't the font size but the spacing used for each and every post. And things look *big* on this site due to the font size used for things like the buttons below the quick reply box, the thread listing of each forum etc.

Though I agree that layout used by sites like PureMVC forums, iroWiki would be easier on the eye...

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster
  • The color scheme used; I really don't have problem with purple but the way a post is represented (white background inside light gray) again ends up putting strain on the eyes.
  • Different colors for read/unread threads. Icons are nice but the link color *needs* to change. This is because it has been always this way. If I have to look at images to see which threads I've read/not read, it ends up being quite a bother.

Any input on the remaining points now that the font size issue has been solved? The threads *really* need to look different based on whether they have been read or not. Just having a small icon doesn't help the cause here. The current thread link highlighting scheme is against what we have been using for years. Given that you always opt for simplicity, why this change?

Edit: In case you didn't know, the reputation comments on these two (first & second) posts are shown in different font sizes...

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

Look into the DatabaseMetaData class of JDBC which can be retrieved using your existing Connection object. This object in turn can be used to retrieve all the tables of the database, their columns, constraints etc.

It might take a bit of digging around to use the API right but once done, you can write code which can manipulate any table irrespective of the number of columns it has.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

> Is this java? It looks like it is some sort of C.

No, it's Scala, an OO-functional language which targets the JVM.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

> I forget specific incidences but Davey or Sanjay would probably know.

Fixing CODE and QUOTE tags after the 30 minute permissible time period would be one of them. If memory serves me right, members have even requested the updation of their submitted code snippets/tutorials via the report bad post button. Though I must admit that the chances of someone reporting their own posts is pretty rare occurrence.

Oh, and not to forget those who probably want their post deleted after getting help here. ;-)

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

I thought you already changed the type of password from character array to string? If `password` is still of type char[], the statement `PASSWORD.equals(password)` would never be true given that PASSWORD is of type String. If you really don't want to change the type of your `password` field, convert it to a String using one of its constructors and you should be good to go with the comparison.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

I guess I'll take this opportunity to tell things which have been bothering me for quite some time after the upgrade:

  • The font family; it's bad IMO, to an extent that the font face ends up giving more importance to the surrounding bell-n-whistles and less importance to the content. Many here would agree with me that we have to *squint* our eyes to read the question. This is amplified by the smaller font used inside quotes having the same font family.
  • The color scheme used; I really don't have problem with purple but the way a post is represented (white background inside light gray) again ends up putting strain on the eyes.
  • Different colors for read/unread threads. Icons are nice but the link color *needs* to change. This is because it has been always this way. If I have to look at images to see which threads I've read/not read, it ends up being quite a bother.

Other than these things, I really don't see anything else which would be a big hindrance when browsing/using the site for a long period of time

jephthah commented: that sums up everything that still bothers me. +0
~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

> I just noticed that daniweb profiles are web searchable. I wasn't expecting this

Really?

Nick Evan commented: Haha :) +0
~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

Why the '+' character in your character set after the '.'? Also, the problem here is that you are clubbing new lines with punctuation characters based on which the string has to be split. The correct logic would be to split on the punctuation characters *followed* by one or more new lines. Assuming that the sentences are grammatically correct, a regex like /[.?!]\s*/ should do the job. The task of stripping excessive newlines would be better handled by a simple replaceAll method call.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

If it was low quality, I talked to the person and helped them straighten it out. If it was spam, it was deleted and the account blocked.

Talking from experience, all things work out well when we talk of a small knit community. But when we talk of a community with around "756,332 members", of which a *majority* create accounts just to do their SEO spam, it's a different ball game altogether. Even with a dozen mods, there are times when we find it difficult to keep spam under control. :-)

Given that there are a *lot* of things pending after this design overhaul, I'm sure that implementing this "trial" period would take it's own sweet time; *if* Dani agrees...

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

Maybe for the next overhaul you could make it a "members" project

Too many cooks spoil "teh" frigging broth. :-)

http://www.rentacoder.com
http://www.odesk.com
http://www.guru.com/pro/index.aspx
https://www.getafreelancer.com/

rentacoder? getafreelancer? LOL!

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

The biggest hurdle is that not everyone would have good thoughts in their mind when using the wiki feature of Daniweb community. It would just end up being *yet* another honeypot for spammers.

Adding some sort of restriction (minimum of X reputation points or minimum of Y solved posts) before editing the community wiki would turn out to be an efficient way to turn off spammers but then again questions the value of "reputation" or "solved posts". Do we know for sure that members who have more than "X" reputation points won't end up contributing crap without actually knowing it?

Too many variants to be considered IMO, but yes, a nice idea. :-)

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

If you need to change the contents of the file in-place, you'd need to:
- Use RandomAccessFile class
- Open the file in read/write mode
- Play around with file pointers (see javadocs for more details) and overwrite the existing content

I personally wouldn't recommend this approach due to the sheer amount of complexity involved in managing file pointers and keeping track of things.

Unless you are running under strict space/time constraints, a simpler approach would be to:
- Open the existing file using some Reader
- Create a new temporary file
- Read the text from the opened file and write the modified text to the newly opened file
- After the reading activity is complete, close the streams, delete the existing file and rename the temporary file so that it now becomes the original file
- Profit?! :)

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

You would need to specify the package qualified class name for both the dates.

java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(2342334);

or something like:

import java.util.Date;

java.sql.Date sqlDate = new java.sql.Date(423423);
Date utilDate = new Date();  // util date
~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

Why is your password field a character array? Assuming that the password field in the database table is of type VARCHAR, you need to pass in a password "string" and not the "string representation" of the password character array.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

Create a separate thread for this particular question since it seems as though this thread is going a bit off-topic here.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

Yes

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

Use one of the setXXX methods of the PreparedStatement to set the value of your place holder.

ps = (PreparedStatement) conn.prepareStatement(
             ModelUtils.getXMLResource("SelectUserGroup"));
ps.setString(1, user.getUserId());
ResultSet rs = ps.executeQuery();
~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

If the query identified by the key 'SelectStudent' has placeholders (? characters), you need to set them before executing the prepared statement.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

When using an application server like Websphere, Weblogic etc. I normally go with the default connection pooling implementation which comes bundled with the server. When using a web container like Tomcat, Jetty etc., Commons DBCP is a pretty decent production grade connection pooling implementation.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

Apologies, it's a typo there. I meant:
"Dani, please make it so that quotes are *NOT* hidden by default and clicking on the quote header hides the quote".

:)

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

In simple terms, Connection pooling is an optimization technique which initializes the connection objects in advance so that a request for database connection can be fulfilled as soon as possible without going through the expensive and time consuming activity of initializing a connection.

This job is typically done by a Connection pooling library like DBCP, Commons Pooling etc. The concept here is pretty simple; instead of giving the requesting object (for e.g. a DAO) a handle/reference to an actual database Connection object, the pooling library hands out a wrapper Connection object. The basic difference between this wrapped connection and the actual connection object is that a Connection.close() operation in the case of the former sends the actual connection back to the pool and doesn't actually close it but in case of the latter, the actual database connection is closed. For more information, search around for 'connection pooling' and I'm sure you would get a lot of good material to read.

For production deployments, *always* prefer pooled connections. Consider it as an industry de-facto standard. :)

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

That isn't the responsibility of the toString() method of the Item class. If you need something like this, there are a couple of approaches you can adopt:
- Create a static utility method in a helper class which does the same (i.e. blank line after 10 items)
- Create a new abstraction; Store class which acts as a thin wrapper around the ArrayList and override its toString() method to do the same. The store arraylist in your main class will now be replaced by a variable of the Store class. Something like:

class Store {
  public List<Item> items = new ArrayList<Item>();

  public void addItem(Item item) {}

  public void removeItem(Item item) {}

  public String toString() {
    // loop over the items in the store/cart and add a blank
    // line every ten items
  }
}

I would personally prefer the second approach since it's much cleaner.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

The error says that your Item class doesn't implement the Comparable<Item> interface; see my first post for the same.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

Collections.sort() automatically takes cares of all the details as long as all the objects present in the collection (in your case a list) implement the Comparable interface (which you already have). Try passing your list to the Collections.sort() method and it *should* work out to be fine. If it doesn't, give specific details as to what output you got and what you were expecting.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

You can read more about compareTo here and about the toString method here; ask again if you have any *specific* questions.

Regarding ID's, it's generally a good idea to represent ID's as string since it doesn't restrict the usage of other non-numeric characters when you actually need them. Anyways, if you still plan on using numbers, you can replace to string `id` variable in my post with your integer variable and there shouldn't be any problems as such.

Regarding eclipse; your code which you execute runs/executes in a separate JVM process which is different from the JVM process which runs eclipse. If you are using Eclipse, you need to alter the run configuration of your main class to modify the heap settings for that particular java program execution. Though I think that the problem really isn't the lack of heap memory but a sort implementation gone wrong; more specifically the part where you modify the collection as well as keep looping over it. Try using the standard sort implementation and the problem should most probably go away.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

No, it seems that it isn't safe to make such an assumption. As per this article:

the default implementation of hashCode() provided by Object is derived by mapping the memory address of the object to an integer value. Because on some architectures the address space is larger than the range of values for int, it is possible that two distinct objects could have the same hashCode()

BTW, why are you making these assumptions? Certain context regarding the actual problem might go a long way in arriving at a valid solution...

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

It seems as though a better solution to your problem might be using the Type Object pattern. Creating new classes for new actors created which basically end up doing almost the same thing is pretty bad from a maintenance view point. Not to mention that your previous code snippets abuse the stack trace in the awesomest possible way. :)

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

At least give it a try; what would be the point of *we* giving you *codes* if you don't end up learning anything new?

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

What's the size of your data set? Also, there are two types of OutOfMemoryError: out of heap space and out of perma-gen space. What does the error exactly say? Post the exact stacktrace of your application.

Also, there are better ways of sorting a collection containing your custom class. Make your class implement the Comparable interface and define the natural ordering for your class objects. Something like this:

import java.util.*;

public class Item implements Comparable<Item> {
  // TODO: Use getters and setters instead
  public String id;
  public String name;
  
  public Item(String id, String name) {
      this.id = id;
      this.name = name;
  }
  
  @Override
  public int compareTo(Item item) {
    int val = this.id.compareTo(item.id);
    if(val != 0) {
        return val;
    } else {
        return this.name.compareTo(item.name);
    }
  }
  
  @Override
  public String toString() {
      return "[id: " + this.id + ", name: " + this.name + "]";
  }
}

Item item1 = new Item("c", "comb");
Item item2 = new Item("a", "soap");
Item item3 = new Item("b", "shampoo");
List<Item> items = new ArrayList<Item>();
items.add(item1); items.add(item2); items.add(item3);
Collections.sort(items);
System.out.println(items);

Regarding the settings for adjusting memory usage, look into the JVM flags, specifically -Xmx for setting the maximum heap memory and -XX:MaxPermSize . You can then spawn your JVM process using something like:

java -Xmx256M -XX:MaxPermSize=64M your.pkg.YourMainClass
~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

I guess I do see your viewpoint here. It's all good as long as you don't end up hovering over the quoted piece of text. This *certainly* breaks the train of thoughts which you might be involved in when you are reading a reply.

Dani, please make it so that quotes are hidden by default and clicking on the quote header hides the quote.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

This is what happens when change isn't managed. I took a "break" and did something constructive in the meantime (see http://www.daniweb.com/forums/post12...ml#post1221059). Hope you don't mistake frustration and irritation for petulance.

My replies in this thread weren't aimed at anyone in particular; they are more along the lines of "you know who you are". It's human nature to go in a state of chaos when things around them change unexpectedly and the reaction evoked is different depending on the personality of the individual so the reaction given by Daniweb members is a given. The problem is that some replies made it look as if nothing was being done to remedy the situation.

Regarding the part about "managed change", I've previously mentioned that this is how Daniweb has always rolled out changes. I know how software changes are normally rolled out (me <- software developer) and this might not be the best way of doing things but I'm sure there might be a good reason for *not* using a test server to deploy the new application and allowing users to still access the old design.

And no, it would be bad if I started mistaking frustration and irritation for petulance. :)

In addition - following the mess of this makeover, I think users are justified in having a bit of a whinge

Definitely, after all, it's the users who make/break a community. I've along with other fellow Daniweb members posted my share of whining as soon as …

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

Are you saying that you are not able to output the pipe character (|) using your keyboard? If yes, then try holding down SHIFT key and then press the key which has | and \ shown. If no, then post the code with which you are getting errors. Using the logical OR operator is as simple as:

boolean someStatus = someBoolean || otherBoolean;
~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

Does that even work for you? Which version of JSTL are you using?

Anyways, it seems that JSTL forbids literal comparison. Instead of:

<c:if test="${1 == 0}">SOMETHING HERE</c:if>

try out something like:

<c:set var="x" value="1" />
<c:if test="${x == 0}">SOMETHING HERE</c:if>
~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

I'd have something like this:

class DbUtils {

    public static void cleanupSilently(ResultSet rs, Statement stmt,
            Connection conn) {
        closeResultSetSilently(rs);
        closeStatementSilently(stmt);
        closeConnectionSilently(conn);
    }

    public static void closeResultSetSilently(ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void closeStatementSilently(Statement stmt) {
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void closeConnectionSilently(Connection conn) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static Connection getConnection() {
        // TODO: Get a pooled connection or retrieve it from the DriverManager
        return null;
    }

}

class SomethingGotScrewed extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public SomethingGotScrewed() {
        super();
    }

    public SomethingGotScrewed(String message, Throwable cause) {
        super(message, cause);
    }

    public SomethingGotScrewed(String message) {
        super(message);
    }

    public SomethingGotScrewed(Throwable cause) {
        super(cause);
    }

}

public class DbUtilsTest {

    public static void main(final String[] args) {
        executeSampleQuery();
    }

    private static void executeSampleQuery() {
        final String query = "SELECT * FROM MY_TABLE";
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            try {
                conn = DbUtils.getConnection();
                stmt = conn.prepareStatement(query);
                rs = stmt.executeQuery();
                // Iterate over the result set and get the data
            } catch (Exception e) {
                throw new SomethingGotScrewed(e);
            }
        } finally {
            DbUtils.cleanupSilently(rs, stmt, conn);
        }
    }

}
~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

@~s.o.s~, All those "thousands of suggestions" shouldn't be there if the good things from the old site where not thrown away, made hidden or unreadable.

I would rather call it "trying out something new". Though I agree that this change was a bit too sudden, the missing features were I guess an attempt to try out some new things.

Every member has a different way of interacting with the site. Some can't live without "MFF", some need to know the solved thread count for every member etc. I guess it is the absence of these small things which were observed by regulars made it look like a *lot* was left out when I'm sure there are still use cases out there which haven't been tried out.

But very few people here are treating Dani with this type of attitude

My latter part of the post was specifically aimed at them.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

Instead of getting your hands busy with the libraries/API's provided by Java, you should concentrate on getting the language basics right. The stack trace in the previous post provides the exact reason as to *why* the code fails.

As far as your code is concerned, look into the DAO pattern for acessing databases. Centralize your connection related logic so that changing the database details doesn't involve sifting through thousands of Java files. Have you looked at this tutorial for at least a starting point?

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

It seems that the link has now been rightfully placed at below the last post. Much better.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

Rather than keeping the site viable, it's an all or nothing

It *has* got to be this way otherwise even a slight dissatisfaction with the new site design would make members *not* use the new site and the entire point of rolling out a new version would be moot. It is because there is no old version available that people are testing out the new design changes and pouring in suggestions. Logical, no?

But to be fair, most that say it sucks are explaining why.

IMHO, life is too short to be making people unhappy. I'd rather not post anything in the programming forums than post some real cool answer which starts with "Hey, you know what? Your code *stinks* and so do you. Muahahaha". But that's just me I guess. Respectfully but strongly disagreeing with something is one thing; posting some smartass, witty, sarcastic thing is another.

Peace.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

This design doesn't suck - well not altogether - but it ain't good.

Maybe it isn't and that's why we have suggestions pouring in, trying to help out with the cause here. IMO, if everyone started taking "breaks" and everyone stated that they were "done with the site", there would be nothing left to improve here.

At least one is saying it here: http://www.daniweb.com/forums/post12...ml#post1219253

Yes, he does say that. Reading that post/thread really makes me sad. Not because a "trusty" Daniweb member decides not to post to the site. It's because I'm surprised how demanding/unrealistic people can get. Noticed the number of feedback threads created in the 'Feedback subforum' over the last 24 hours, not to mention the thousands of "suggestions" offered in each of them? Do people really expect all these suggestions be implemented ASAP esp with a single person (a small team?) doing all the changes?

So let me say this again, I'm not a big fan of the new design. Heck, even my posting activity has come down significantly. But I, being a "trusty" (hopefully) member of this forum, decide to wait and watch rather than roll my eyes and walk away...

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

And then called it in finally

Did you read the links I posted in my previous post? Don't use `finalize` for cleaning up connections/resultsets etc. Get in the habit of reading source code of libraries. Reading the source code of DBUtils would give you a fair idea as to how resource cleanup needs to be done when dealing with JDBC.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

Sorry to say, but that is about to change. Some of the trusty posters are leaving already.

Really? That's a pretty bold statement. Confused and irritated maybe. Leaving? Don't think so.

@Everyone
This is normally how new changes are rolled out on Daniweb. The new features which need to be introduced are made live, feedback is collected from regulars, changes are made to the site, rinse and repeat. I'm pretty sure that with the help of suggestions given by the regulars along with Dani working on them, things would be the way everyone likes it in a couple of weeks.

The new changes are a bit irritating but saying things like "this new design sucks" etc. instead of giving suggestions and waiting patiently for them to be resolved isn't fair IMO.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

Though the concept of `finalize` sounds pretty slick, they are rarely used and for a good reason. A better way would be to carefully manage your connection/statement/resultset resource cleanup or use a library which already does that for you.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

OK someone tell me what is the MFF box? I think I know what it was on the old layout but I don't see anything light that on the new layout.

MFF -> My Favorite Forums; something which you see at the bottom of the page next to "Todays Posts".

BTW is it me or has the general post rate taken a hit?

No, it really has. I guess, the regulars here are pretty busy with understanding how things work and the real posting/moderation activities has taken a back seat. Let's hope this issue is resolved soon so that we can get back to our daily routine. :)

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

I've already provided some comments in my previous post.

The padding used by each post is way too much. Even though the content area has been increased, the post content somehow is lost given the font family and size used. Forums which show a lot of content are usually *compact* but here I'm getting the feel of lot of wasted space. I'm no UI expert so I can't specifically point out things which need to be improved but posting a screenshot of Daniweb when compared with Stackoverflow might help clear things out a bit.

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

A few observations:

  • I must say that I'm pretty much confused with the new layout. Especially the treatment which is given to links. It takes trial and error/time to find out which things can be clicked and which can't be.
  • The font used for the entire forum skin is different from the one which is used for showing post content.
  • The actual content looks small when compared to the padding surrounding each post. The good thing is that we now have an increased content area.
  • The button text for some buttons is *really* large (use advanced editor button)
  • The main forum page text is *really* big. I can barely see the thread titles of 6 threads on my 1024 x 768 screen.
  • The font size used on the 'User infraction' screen is *really* small
  • No way to go to the first unread post for subscribed threads in the CP
  • The first post of a thread gets very little post area; how about placing the 'similar threads' part somewhere else or at least make it hide behind a vertical accordion effect?
  • All the threads use the same font and color, so it becomes difficult to differentiate between read/unread threads.

Good job BTW. I'm pretty sure that the current forum look offered by Daniweb is pretty unique. :)

~s.o.s~ 2,560 Failure as a human Team Colleague Featured Poster

You can search around for SVN tutorial which gives results like this and this. Gaining a full understanding of things would be difficult at this point in time, concentrate of getting things up and running and learn as your move on.

Also would you expound a little on Unit test/Junit

Again, explaining the concept of unit testing and the usage of JUnit in a single post would be pretty much impractical. My recommendation would be to search around for JUnit 4.X tutorials (there are a *lot* of them) and ask specific questions as and when you come across them.