2011-08-06 32 views
21

¿Cuál es la diferencia en la implementación de la aplicación 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?EAR vs EJB + WAR separado

Respuesta

32

parece que hay cierta confusión entre 3 variantes de despliegue:

  1. una oreja que incluye un módulo EJB y WEB
  2. Implementación de un módulo EJB independiente y un módulo WEB independiente
  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 hay 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 lookup que especifica el nombre JNDI global.

Finalmente, la tercera situación (que no parece mencionar, pero 'casa' 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.

+0

Gracias, esto me aclara mucho.Así que debería buscar el perfil completo, ya que habrá 3 módulos de guerra que se comunicarán con 1 ejb en mi proyecto. – mm1

+0

En la primera situación, ¿podría el módulo EJB acceder al módulo WEB utilizando el atributo de búsqueda, como en el segundo? – lpd

+0

¿Podría echar un vistazo a esta pregunta? Https://stackoverflow.com/questions/49125538/is-it-possible-to-have-ejbs-in-domain1-lib-using-glassfish –

3

¿Cuál es la diferencia en la implementación de 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 JAR de utilidades, se encuentran en, por ejemplo, EAR/lib y puede ser reutilizado por WAR y EJB JARs. A menudo, los archivos EAR proporcionan características de implementación prorietary, p. 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í, el perfil SPEC web permite explícitamente que le permite desplegar una ligera versión EJB como parte de la GUERRA . Simplemente coloque EJB JAR dentro de WARWEB-INF/lib. Este enlace proporciona una comparación de características (perfil Web vs completo soplado-): http://glassfish.java.net/downloads/v3-final.html

Cuestiones relacionadas