Voila. My Sun Certification
Java Technologies process is over now !
Let me tell you about this sweet Sun fairy tale journey
This journey started when I got laid-off (I guess like many other people)
last august 2001. It was a sunny day, a tuesday, in the Silicon Valley, and my manager
called and asked me to step by its office to take my departure package....
So, I gave back my badge and quickly decided, on the parking of the compagny with my hands full of boxes
(papers, pen, last paycheck...), to use wisely my spare time and
keep my mind busy by going through those Sun certifications.
My plan was to go on Sun Certification Enterprise Architect.
I had over +6 years experience on OOD development, +1
J2EE...
I realized I needed first to get Sun Certified Programmer(310-025) exam.
So during 3 weeks, I studied this part lay down on the beach
and succeeded last september
SCPJ with a score of 86%.
Then, I started
SCEA part I (310-051), I studied once again 3 weeks
and succeeded last october
SCEA part I with a score of 80%.
Obviouly, as SCEA is only valuable with part 2&3 , I started the SCEA part 2&3 (310-061),
worked on it during 6 weeks and succeeded last december
SCEA part 2&3 with a score of 99%.
I was happy and still without a job !
So, as certification is a good stuff to improve knowledge and fill the gap
in your resume. I decided to go with Sun Certified Web Component Developer(310-080).
With 8 month of experience jsp/servlet...so what a big deal huh ?!
Once again, I studied 3 weeks lay down on the beach with my friends the seagull
learning new features JSP1.2/servlet2.3 and succedeed last january
SCWD with a score of 84%.
So, I was facing a dilemma ...a gap in the Sun Certification java process : Sun Certified Developer (310-027) was missing !!
Once again, I worked on it during 3 weeks :
Some details :
- I mofified Data Class , create an adapter to wrap Data class with a lock manager mechanism implemented
as per of the ReadWriteLock
pattern.
- I used RMI (easier to implement, provide security manager, dynamic class loading...blablabla)
- Built simplistic Swing application (as you can see below 17/24 points
- Wrote nice Html design document with UML class diagram and deployment diagram.
and succedeed today
SCDJ with a score of 144/155.
General Considerations(maximum = 58): 58
Documentation(maximum = 20): 20
GUI(maximum = 24): 17 (I don't care...swing is boring !!)
Server(maximum = 53): 49
I read many people have wait more than 4 weeks. It took me only 2weeks and half of waiting !
So, Does Certification help to find a job ? IMHO, without being pessimistic....I do not believe it is really helpful.
Even if you have J2EE experience, fully certified from Programmer to Architect,
the job market is still tough.
Analysts said it's gonna be better june-july 2002 or maybe by the end of year.
Actually, only 2% of the job seeker find their job through the internet.
...The others are directly hired by relation...
So what I gonna do now ? Well...as I tired with certifications....actually, I'm working on a personal project which involves
SOAP (Axis) Web services.
Again, analysts said 30% IT project this year will concern web-services....so be prepare
Anyway, Thank you Javaranch for all this useful saloons.
=======================================================================
To
test the robutness of your lock mechanism, I wrote this stress test program to
track any deadlock !
The following program runs multiple
thread (Reader and Writer).
Please modify it !! Don't send me an email saying it doesn't compile !! ;-)
===========================================
public class Main {
private DataAccess dc = null;
private FieldInfo [] description = null;
private
String dbname = "db.db";
private int port = 1099;
private String host = "localhost";
private boolean trace = false;
private int mode = DataAccessFactory.LOCAL_MODE;
public Main(String args[]) throws IOException {
try {
for(int i=0;i<args.length;i++) {
if("-port".equalsIgnoreCase(args[i]))
port = Integer.parseInt(args[++i]);
else if("-trace".equalsIgnoreCase(args[i]))
trace = true;
else if("-db".equalsIgnoreCase(args[i]))
dbname = args[++i];
else if("-host".equalsIgnoreCase(args[i]))
host = args[++i];
else if("-remote".equalsIgnoreCase(args[i]))
mode = DataAccessFactory.REMOTE_MODE;
else if("-local".equalsIgnoreCase(args[i]))
mode = DataAccessFactory.LOCAL_MODE;
}
dc = DataAccessFactory.getConnection(mode, dbname, port, host, false);
description = dc.getFieldInfo();
}
catch (NumberFormatException e) {
System.err.println("Invalid port " + e.getMessage());
e.printStackTrace();
System.exit(0);
}
catch (IllegalArgumentException e) {
System.err.println("Exception Invalid command parameter " + e.getMessage());
e.printStackTrace();
}
catch (Exception e) {
System.err.println("rmiclt exception: " + e.getMessage());
e.printStackTrace();
System.exit(0);
}
}
// Writer thread.
private class Writer extends Thread {
/** This thread object id for tracing purposes. */
public final int id;
public final int record;
private Writer (int id, int record) {
this.id = id;
this.record=record;
System.out.println ("Writer Thread record " + record );
}
public void run () {
// higher priority and lower frequency to interleave reading
setPriority (getPriority () + 1);
for (int i = 0;; i++) {
try {
try { sleep (random (125, 400)); }
catch (InterruptedException ie) {}
dc.bookSeats(record, 1);
if (trace) System.out.println ("Write"+id+" record "+record);
} catch(Exception e) {
System.err.println ("Write"+id+" record "+record+ "DatabaseException "+ e.getMessage());
}
}
}
}
// Reader thread.
private class Reader extends Thread {
/** This thread object id for tracing purposes. */
public final int id;
public final int record;
private Reader (int id,int record) {
this.id = id;
this.record=record;
System.out.println ("Reader Thread record " + record );
}
public void run () {
for (;
{
try {
try { sleep (random (25, 50)); }
catch (InterruptedException ie) {}
DataInfo dtinfo = dc.getRecord(record);
int nbSeats = Integer.parseInt(dtinfo.getValues()[description.length-1]);
if (trace) System.out.println ("Read"+id+" record "+record+" Set seat="+nbSeats);
} catch(Exception e) {
System.err.println ("Read"+id+" record "+record+ "DatabaseException "+ e.getMessage());
}
}
}
}
// Construct some writers and some readers and let them loose
private void main () {
for (int i = 1; i <5; i++) (new Writer (i,this.random(1,5))).start ();
for (int i = 5; i < 6; i++) (new Reader (i,this.random(1,5))).start ();
}
private java.util.Random random = new java.util.Random (0);
private int random (int low, int high) {
int tmp = Math.abs (random.nextInt ()) % (high - low) + low;
return tmp;
}
public static void main (String [] args) {
try {
(new Main (args)).main ();
}
catch(Exception e){
System.out.println("Exception : "+e.getMessage());
}
}
}