permaculture playing cards*
The moose likes Developer Certification (SCJD/OCMJD) and the fly likes Passed 150/155 Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Developer Certification (SCJD/OCMJD)
Bookmark "Passed 150/155" Watch "Passed 150/155" New topic
Author

Passed 150/155

David Reck
Ranch Hand

Joined: May 25, 2001
Posts: 37
Just wanted to thank everyone at the JavaRanch. Not sure if I could have completed it with out everyones help. I know it would have taken me twice as long. I received the score on the website a week after taking the essay exam. Here is the score breakdown:
This report shows the total points that could have been awarded in each section and the actual number of points you were awarded. This is provided to give you per-section feedback on your strengths. The maximum possible # of points is 155; the minimum to pass is 124.
General Considerations (maximum = 58): 58
Documentation (maximum = 20): 20
GUI (maximum = 24): 23
Server (maximum = 53): 49
Rick Fortier
Ranch Hand

Joined: Jun 04, 2001
Posts: 147
Since you got a perfect in General Considerations, can you tell us what your Design Choices were?
What did you do about locking, Data - modify or extend, RMI or Sockets.
How did you handle: client id tracking, lock timeout, automatic downloading of stub, executable jar or not, user selection of connection method, automation, and gui online help.
David Reck
Ranch Hand

Joined: May 25, 2001
Posts: 37
What did you do about locking, Data - modify or extend, RMI or Sockets
I created a very simple locking method that does not tracking client ids and stores locks in a Vector. I modified the Data class. I choose RMI because it was easier to implement and maintain. I did nothing for timeouts or automatic downloading of stubs. I did create an executible jar file and online help. I handled the database mode selection through an input parameter.
From what I listed above you can probably tell I used a very simplistic design. My goal was to just fullfill the requirements and nothing more. I did spend a lot of time testing. Let me know if you have any more detailed questions.
ShankarS
Greenhorn

Joined: Jul 29, 2001
Posts: 25
Hi,
I am in the final stage of the assignment.
I have a couple of question.
(1) How did u fill the Origin & Destination Combobox.
(2) The Java documemtation in the given class files are not complete. Should we make chnages to them?
And, in some methods, the order of JavaDoc tags are not correct.
For example, the @return is before @param and there is no description for fields.

Thanx. in Advance,
Shankar S
David Reck
Ranch Hand

Joined: May 25, 2001
Posts: 37

(1) How did u fill the Origin & Destination Combobox.

I created a method in the data class that returns an array of strings with all of the unique values from a column specified as a parameter. I called this method from a middle layer I created seperate from the GUI. Then passed the array of strings in as a parameter for the JComboBoxes

(2) The Java documemtation in the given class files are not complete. Should we make chnages to them?

I modified all of the JavaDoc comments supplied in the db package to follow my standard format

[This message has been edited by David Reck (edited August 01, 2001).]
ShankarS
Greenhorn

Joined: Jul 29, 2001
Posts: 25
Hi,
Thanx a lot, I didn't expect such a fast reply to my queries.
So, It tends me to ask you some more questions.
(1) Did you simulate current clients for load testing the RMI Application?
(2) How you implemented the online help?
(3) Will be lock be blocked for new requests, when the client that locked the records crashes without unlocking the record?
(4) And, Can you give us few tips on writing the readme, desing and other documents.
Once Again,
Thanx. in Advance,
Shankar S
David Reck
Ranch Hand

Joined: May 25, 2001
Posts: 37
(1) Did you simulate current clients for load testing the RMI Application?
No, I used some of the people in my office for testing. I also added some sleep commands in the method making the bookings to make sure the would be attempting to access the same database record at the same time.
(2) How you implemented the online help?
I created a html file and included it in my client jar file. I used a JEditorPane to display the html file in. I didn't have to hard code any paths because the file is guaranted to be in the jar file.
(3) Will be lock be blocked for new requests, when the client that locked the records crashes without unlocking the record?
If the client crashes and it holds a lock that record will remained locked until the server is restarted. They didn't say it had to be production level just functional.
(4) And, Can you give us few tips on writing the readme, desing and other documents.
The readme file is pretty simple. It was a bit long just because I gave detailed instructions on running the program and listing each file submitted with a description. I had a total of nine points I disucssed in my design doc including RMI, Locking Scheme, Modyfing Data, Exception Handling, GUI Design, Event Handling and a couple of other small things.
ShankarS
Greenhorn

Joined: Jul 29, 2001
Posts: 25
Hi,
Since, you said that you have the help html file in the jar file itself, Did you place the db.db file too in the jar file.?
And, How abt the jar files. You had any server.jar, client.jar, db.jar, fbn.jar, etc.
Once Again,
Thanx a lot,
Shankar S
David Reck
Ranch Hand

Joined: May 25, 2001
Posts: 37
Did you place the db.db file too in the jar file
No, I only placed class files and that one html file in my client jar. The database location was passed in as an application parameter.
And, How abt the jar files. You had any server.jar, client.jar, db.jar, fbn.jar, etc
I had three jar files
FBN.jar that contained all of my jar files, javadoc files, and java files
Client.jar an executible jar for the client application
Server.jar an executible jar for the server application
Devu Shah
Ranch Hand

Joined: Jun 21, 2001
Posts: 50
Hi,
Cognate for such great score.
Can you guide me in locking.
I have simply used Hashmap as it is threadsafe.
R_Lock = new HashMap(); // THIS IS FROM ANOTHER CLASS
��..
��

synchronized(R_Lock){
while(R_Lock.containsKey(new Integer(recno))){
try {
R_Lock.wait();
BUT to my surprise everyone in this group uses :
private Map lockTable = Collections.synchronizedMap(new HashMap());

Can you guide me where am I wrong? Is not Hashmap threadsafe ?
Or my design is all right.?
Thanks in advance.
Ck
Andras Nemeth
Ranch Hand

Joined: Jul 31, 2001
Posts: 80
Hi David,
It is a great score!
Have a rest!
Bye,
Ban
Hi Devu,
I think you are wrong. My document says:
(The HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized and permits nulls.)
Hope it helped.
Bye,
Ban
Swami nathan
Ranch Hand

Joined: Sep 30, 2000
Posts: 57
Wa great score!
congrats.


SCJP, SCWCD, SCEA
David Reck
Ranch Hand

Joined: May 25, 2001
Posts: 37
Devu Shah
HashMaps are not sycnronized. I would recommend using another object that is or you will have to do something like Collections.synchronizedMap(new HashMap());. I used a Vector but other than that mine was very similar to your current locking scheme.
Andras Nemeth & Swami nathan
Thanks
Tracy Qi
Ranch Hand

Joined: Apr 23, 2001
Posts: 37
Congratualtions!
did u implemented RMI call back for real time update?
Do we need to do that?
Devu Shah
Ranch Hand

Joined: Jun 21, 2001
Posts: 50
Hello David Reck,Andras Nemeth & Swami nathan

Thanks for your reply.
you said"... HashMaps are not sycnronized. I would recommend using another object that is or you will have to do something like Collections.synchronizedMap(new HashMap());."
Can you please tell me which object is Syncronised ?
you said "I used a Vector but other than that mine was very similar to your current locking scheme...."
Do you mean to say vector is Syncronised ?
please clearify.
Also one more point as i have syncronised block, is that 100 % right or better would be collection.syncronised...... ?
or can we use syncronised block as well as 'collection.syncronisedMap......
thanks
Devu
ShankarS
Greenhorn

Joined: Jul 29, 2001
Posts: 25
Hi,
Thanx a lot for your previous replies.
I still have a couple of questions for you.
(1) Did you have the only .class files inside the Server.jar &
Client.jar?
(2) Where did you place the Data.class files (3) Where did you place the source, class & doc files of Data, DataServer Implementation & the Data Client Implementation?
(4) Did you have any nested .jar files ?
(5) This question is not about jar files. The Data class constructor alone throws IOEXception, but all other punlic method throws DatabaseException. Can we make it throw DatabaseException? How did you handled it?
(6) The delete() method does not check for any validation(file exist or not), but some other validation are done in add() & modify() methods. Do we need to check whether the record actually exists before setting it as DELETED_RECORD ?

Thanx. in Advance,
Shankar S
[This message has been edited by ShankarS (edited August 05, 2001).]
[This message has been edited by ShankarS (edited August 05, 2001).]
David Reck
Ranch Hand

Joined: May 25, 2001
Posts: 37
did u implemented RMI call back for real time update?
No, I didn't and there is no requirement that you have to.
you said "I used a Vector but other than that mine was very similar to your current locking scheme...."
Do you mean to say vector is Syncronised ?

A Vector is syncronized and I did my lock and unlock methods in syncronized blocks like you described in your initial message.
David Reck
Ranch Hand

Joined: May 25, 2001
Posts: 37
(1) Did you have the only .class files inside the Server.jar Client.jar?
Yes, I only had class files in the jars. I included the java files outside the two application jar files.
(2) Where did you place the Data.class files
I left the Data.class file in the db package along with all of the other files provided for the exam.
(3) Where did you place the source, class & doc files of Data, DataServer Implementation & the Data Client Implementation?
I put the documentation, javadoc set, and java files in the main jar file that also contained my Server.jar and Client.jar
(4) Did you have any nested .jar files ?
Yes, see answer above.
(5) This question is not about jar files. The Data class constructor alone throws IOEXception, but all other punlic method throws DatabaseException. Can we make it throw DatabaseException? How did you handled it?
I suppose you can make it throw a DatabaseException but I left it as it was.
(6) The delete() method does not check for any validation(file exist or not), but some other validation are done in add() & modify() methods. Do we need to check whether the record actually exists before setting it as DELETED_RECORD ?
I did not make any changes to the methods listed above.
Devu Shah
Ranch Hand

Joined: Jun 21, 2001
Posts: 50
thanks for ur reply David,
I have changed my lock/unlock design by implementing vector.
on ur advice.
except for server part, u got full marks!!
Can u tell us the reason if u can guess it.
Could it because of search criteria design ?
thanks,
Devu
Peter den Haan
author
Ranch Hand

Joined: Apr 20, 2000
Posts: 3252
Originally posted by David Reck:
HashMaps are not sycnronized. I would recommend using another object that is or you will have to do something like Collections.synchronizedMap(new HashMap());.

I strongly disagree with this suggestion. The core of the locking code is an algorithm like:
1. while(record is locked) wait()
2. lock record
As has been pointed out, this block needs to be synchronized in its entirety. A synchronized collection is completely useless in this situation, will only slow things down (marginally), and possibly lure people into feeling "threadsafe" and not synchronizing code that needs to be synchronized.
In my SCJD submission, the locking map was not synchronized (although access to it obviously was).
- Peter
O Muthu
Greenhorn

Joined: Jul 10, 2001
Posts: 10
I agree with Peter completely. I don't see why the container of the lock should be synchronized. If access to the container is synchronized, that will be sufficient.
O Muthu
David Reck
Ranch Hand

Joined: May 25, 2001
Posts: 37
Peter may be correct, I don't know. The only thing I have to go by is the fact that I passed. I did loose 4 points on my server design and maybe that was why.
David
O Muthu
Greenhorn

Joined: Jul 10, 2001
Posts: 10
David,
As Peter points out, synchronizing the lock container won't cause any harm other than slowing down the program a little bit. May be that's why they took off a few points.
Regards,
Muthu
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Passed 150/155
 
Similar Threads
Woohoo =) Passed 142/155
passed 149/155
Passed SCJD with 155/155!
NX SCJD: but passed with 155/155
Passed 150/155