java java-ee war java-ee-6 ear

java - EAR vs EJB+WAR por separado



java-ee java-ee-6 (2)

Parece haber cierta confusión entre 3 variantes de implementación:

  1. Un EAR que incluye un módulo EJB y WEB
  2. Implementar un módulo EJB separado y un módulo WEB separado
  3. Implementación de un módulo WEB que incluye clases EJB o un jar EJB.

En la primera situación, tiene lógicamente una aplicación, pero una que está dividida en dos niveles. El módulo WEB está aislado del módulo EJB en el sentido de que puede consumir clases del módulo EJB, pero el módulo EJB no puede consumir clases desde el módulo WEB. Como se trata de una única aplicación, se puede utilizar el acceso local a los beans EJB y la inyección de beans EJB funciona como se esperaba.

En la segunda situación (a la que parece referirse en su pregunta) no existe una única aplicación lógica, sino dos módulos separados. Funcionan en la misma JVM, pero oficialmente Java EE no permite el uso de acceso local y debe usarse el acceso remoto (aunque el acceso prácticamente local a menudo funciona de todos modos). Además, la inyección de beans EJB en beans en el módulo web no funciona directamente con una simple anotación @EJB , sino que se debe usar el atributo de lookup que especifica el nombre JNDI global.

Finalmente, la tercera situación (que no pareces mencionar, pero ''home'' menciona) es un poco similar a la primera, pero no hay niveles y aislamiento en este caso. Los beans EJB pueden acceder directamente a todas las clases desde el resto del módulo web.

El perfil web solo es compatible con esta última situación de implementación. Tanto el EAR como las implementaciones de EJB independientes no son compatibles.

¿Cuál es la diferencia en la implementación de aplicaciones como EAR (con 1 EJB y 1 módulo WAR) frente a módulos separados? Quiero usar el perfil web GlassFish 3 pero no es compatible con el archivo EAR. ¿Puedo simplemente usar EJB y WAR como módulos separados? ¿Alguna otra opción?


¿Cuál es la diferencia al implementar la aplicación como ear (con 1 ejb y 1 war module) frente a módulos separados?

No es una lista completa: en un EAR también puede definir los JAR de las utilidades , están ubicados en, por ejemplo, EAR / lib y pueden ser reutilizados por WAR y EJB JAR . A menudo, los archivos EAR proporcionan características de implementación prorietary, por ejemplo, en WebSphere puede especificar detalles de DataSource, para que no tenga que definir un DataSource (y un controlador JDBC) utilizando utilidades de gestión.

Como quiero usar el perfil web Glassfish 3, pero no es compatible con el archivo ear. ¿Puedo simplemente usar ejb y war como módulos separados? ¿Alguna otra opción?

Sí, la especificación de perfil web permite explícitamente implementar una versión ligera de EJB como parte de WAR . Simplemente coloque el EJB JAR dentro de WARs WEB-INF/lib . Este enlace proporciona una comparación de características (perfil web vs completo): http://glassfish.java.net/downloads/v3-final.html