I can answer 2 of your questions.
3) why did you choose to have a separate business layer? what functionality did you put in there?
Separate business layer encapsulated operations in my data class.
the data class was never shown to client, all client could see was a business interface.
here is the business interface [or server interface]
i hope things can be clearer by looking at this. do reply in case of doubts.
4) how does your gui look like? Did you implement observer
pattern?
my gui code was mvc.
a table model encaplsulated my data class.
there was a listener for every type of action. ie Search, Update, Add, Delete.
I used a singleton facade class to access all the current variable set in client.
ie
Client.getInstance().getUIManager().get...
and Client.getInstance().getUIManager().set...