I read a lot about GlassFish application server that it supports the whole Java EE 6 specification. But which does Tomcat support?
Tomcat (which is not the RI of the Servlet spec anymore since Java EE 5) doesn't support any of the Java EE 6 APIs out of the box. In its latest version, Tomcat 6 ships with:
- Servlet 2.5
- JSP 2.1/EL 2.1
While the "web" part of GlassFish implements:
- Java Servlet 3.0
- JavaServer Faces 2.0
- JavaServer Pages 2.2/Expression Language 2.2
- Standard Tag Library for JavaServer Pages (JSTL) 1.2
Can tomcat play with these technologies: EJB, JSF, JPA, Hibernate, Spring, etc..?
You can use some of them by packaging them inside your application (this article has a nice summary):
- EJB 3.1: no, there is no standalone EJB 3.1 container at the time of writing this (and if you consider using EJB, use a real Java EE server, Tomcat with a standalone EJB container is not an equivalent, especially from a Transaction Manager point of view).
- JSF 2.0 and EL 2.2: yes, possible with some pain
- CDI 1.0: yes, possible
- Bean validation 1.0: yes possible with JSF 2.0 and JPA
- JPA 2.0: yes, possible but you'll have to obtain the EntityManager yourself and to manage transaction yourself (or to use a third party container like Spring).
But let me insist: whatever you'll add to Tomcat, you won't get an equivalent of a Java EE 6 container, even if we just compare with a Web Profile implementation (like GlassFish v3 Web Profile): no EJB 3.1 Lite, no JTA 1.1, no descriptor-less applications, etc.
If you have the choice, my suggestion would to use GlassFish v3 Web Profile and to embrace Java EE 6.