COMMON STACK básicamente significa tener un ESTÁNDAR. El stack J2EE es un estándar utilizado en tecnologías distribuidas.
Contiene tecnologías tanto de front end como de back end.
Para las tecnologías de front end, inicialmente los desarrolladores tenían que lidiar solo con Servlets y JavaServer Pages (JSP), lo cual no era una idea muy óptima para crear Interfaces de Usuario basadas en la Web. Struts resolvió el problema en cierta medida, pero implicaba una cantidad considerable de trabajo repetitivo.
La introducción de JavaServer Faces (JSF) ha ayudado a resolver aún más el problema, ya que es un lenguaje de marcado y puede ejecutarse en cualquier cliente. El modelo de navegación de JSF es similar a Struts y utiliza beans gestionados para proporcionar lógica empresarial.
La siguiente capa en el stack es el framework del contenedor EJB que se encarga de manejar las llamadas de procedimientos remotos y la semántica transaccional para que el desarrollador pueda concentrarse en la lógica empresarial real.
Aunque hay varias opciones para el back end, las 2 tecnologías de back end dominantes son Hibernate y CMP. También podemos implementar POJO en sistemas distribuidos utilizando contenedores livianos.