In the past couple of months my interaction with recruiters, placement agencies, head hunters and just other IT folks has increased as I have been looking for a new job, new contracts, new potential clients.  Having a relatively strong background in Java ( 10 years of having seen everything from distributed services via RMI, low level threading & sockets, web interfaces, JDBC, EJB, Servlet Containers, Application Servers ) I sometimes get frustrated with the question “Do you have any experience with J2EE?”, because it is such a vague question there is no correct or complete answer.  My typical response is along the lines, of “what do you understand by J2EE, or what aspects of J2EE are you looking for, so that can discuss me relevant experience”.

Lets backtrack a couple moments, and define ( well, if we can ) J2EE.  J2EE ( now known as JEE ) stands for Java 2 Entreprise Edition, in contrast to J2SE ( known as JSE ) which means Java 2 Standard Edition.  They are both centered on the Java language specification (syntax),libraries , and Java virtual machine.  For those of you not concerned with Java ( or even those who don’t care ), there are a lot of things named java, and they can be confusing if you aren’t directly involved.  That doesn’t mean that you can ignore the differences if you are involved, it means you have to pay a little more attention.

The best description of what J2EE is, is that it is a collection of Java technologies and best practices.  The most common consensus seems to mention these top 14 frameworks( JDBC, JNDI, EJBs, RMI, JSP, Java servlets, XML, JMS, Java IDL, JTS, JTA, JavaMail, JTA, and JAF ).  The rest involves knowing when and how to tie the right technology, using the appropriate combination of best practices to gain the maximum of the Java Ecosystem.

Once upon a time, J2EE was synonymous with EJB’s.  Since you were either working on “simple” web or desktop projects, or you were doing “entreprisey” stuff ( EJB’s, Application Servers, etc, on big name hardware and platform combinations ).  Typically only larger companies were using the J2EE stuff due to initial cost investment.  At some point some consultant probably managed to convince them that they couldn’t develop their web application without having the full WebSphere/WebLogic/<other J2EE provider> stack.  Once EJB3 came out, things changed somewhat, as EJB3 was lighter, and easier to use as a specification than the previous incarnation.

For the most part the recruiters I’ve dealt with are more than willing to co-operate and get more information to try and find a best fit for a given position, as they are only doing the best they can with the information that was provided to them from clients/partners/IT departments.  My complaint is to those building the job description, why not specify the skills you are looking for instead of being so vague.  You’ll get a more honest, direct and relevant candidates when you are honest and precise with what you are looking for.

Most java projects today want to know if you understand some combination of the following aspects java, the web interaction model, visual display ( jsp, jsf, html/javascript, Swing, something to display the UI ), data persistence, server/data distribution, transactions.  If you take a look around the web, the most popular java frameworks are things such as Spring, Hibernate, Wicket, yet these are not included in the J2EE classification under most people’s definition.  If you want someone with ORM experience mention that, or a particular framework/library that you want.

I hope this information helps people either understand what is being asked, or those writing up job descriptions identify the skills they are looking for.