As I am trying to prepare for part 2 of my SCEA certification I am trying to get an (practical)understanding of JMS.
As I have a SCBCD certification (and passed first part of SCEA) I have some theoretical knowledge but theoretical knowledge does not always help.
I wrote a simple application to test the concepts of JMS client and Message Driven Bean.
The application consists of a
1) Client - message sender (Java console application)
2)On a Glassfish server I deployed two MDB's one would process the message from the queue and using a stateless session bean get a result to send back to another queue.
3) Also on the Glassfish server I use another MDB to process the response.
This worked out finally (took some 2h to figure out errors) but as I wrote the code I made a stupid copy/paste error : I wrote back a message to the same queue that I read from..
The result of this on a synchronous process would have been a StackOverflow error (no connection to the site) but in this case I just got a huge log file and the messages processed nicely.
Got to love the power of JMS. I discovered even a whole list of patterns (besides the famous GoF and Core J2EE Patterns.) These patterns can be found on Enterprise Integration Patterns and the acompanying book.
Unfortunately in my so far 5 years Java developer career I rarely wrote Message Driven Beans and even more rarely JMS clients so this is definetely an issue if I am trying to say architect a huge B2B JEE application.
How do you get enough experience to say pass a certification or get a job if you don't ever use these technologies ? I have been into plenty of places were Tomcat would be enough and even in a full JEE container people would not play with JMS to interact with external systems so one is forced to get into big companies to get experience with this kind of systems and then become an architect.
My next technology on the list is JCA (never used that either though I do work with JBoss which uses it to connect to the database).
At some point you have to choose between JCA , JMS and webservices to make connection to external systems. I think this article makes a good point about what to choose when.
“Before you speak, listen. Before you write, think. Before you spend, earn. Before you invest, investigate. Before you criticize, wait. Before you pray, forgive. Before you quit, try. Before you retire, save. Before you die, give.”