Packaging EJB en JavaEE 6 WAR vs EAR


Comenzando un nuevo proyecto y me gustaría conocer los pros y los contras de empaquetar EJB en una GUERRA vs OREJA.

¿Seguirá funcionando JNDI cuando los EJB estén en GUERRA? ¿eficiencia? sucesivamente.?

Gracias.

Author: Tiny, 2010-12-14

5 answers

Una motivación importante para tener EJB beans en un FRASCO separado es la antigua separación de business logic y view logic.

Dado que se supone que los EJB se concentran únicamente en la lógica de negocios, tiene sentido ponerlos en un módulo separado.

Esto es exactamente lo que facilita el archivo Empresarial Java tradicional. Los frijoles EJB entran en un archivo JAR que representa el EJB module, mientras que los artefactos relacionados con la web (Facelets, backing beans, utility código) entra en un archivo Web (WAR) que representa el Web module. Tenga en cuenta que una GUERRA en realidad no tiene que ser un archivo. En el llamado formato exploded son simplemente directorios.

Un aspecto clave de esta separación es que esos dos módulos están aislados a través de una jerarquía de cargador de clases. El Web module tiene acceso a recursos (típicamente beans) desde el EJB module, y el EJB module puede hacer referencia a recursos (típicamente bibliotecas) definidos en el paraguas general del OÍDO. La otra dirección no es posible. Específicamente, el EJB module no puede acceder a ningún recurso definido en el Web module.

Esta aplicación es deliberada.

La lógica de negocio debe ser completamente independiente de cualquier tecnología de vista . Hacer cumplir este aislamiento evita que los desarrolladores accidentalmente o cuando están bajo presión mezclen esas preocupaciones de todos modos. Los beneficios de esta separación es que la lógica de negocios puede ser utilizada trivialmente por, entre otros clientes Java SE, clientes de módulos web, clientes JAX-RS, etc. Si el la lógica de negocios accidentalmente tenía dependencias JSF o Servlet, sería muy difícil usarla desde clientes Java SE.

Compare esto con Facelets que no permiten el uso de scriptlets. Esto mantiene las facetas limpias y les permite centrarse en el diseño de componentes y el marcado exclusivamente. Otra analogía es con la codificación de interfaces, que separa el contrato de la implementación.

Así que tener un módulo EJB separado es en realidad una buena práctica . Obstante...

Para proyectos más pequeños podría ser innecesario tener esta separación y para los programadores principiantes podría ser difícil envolver sus cabezas alrededor de la estructura de lo que necesita ir a dónde. La eliminación de la separación obligatoria hace que sea más fácil para los desarrolladores inexpertos comenzar con Java EE. Se les da una introducción suave en Java EE y más tarde una vez que obtener la idea de capas, entonces pueden optar por introducir un EJB module de todos modos.

 52
Author: Arjan Tijms,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-05 16:00:42

Hasta ahora esto es lo que tengo.

EJB en la GUERRA

Ventajas:

  1. Más fácil de desarrollar y desplegar

  2. Puede exponer los métodos de Session Bean como servicio REST con la anotación @ Path. Ver aquí

Contras:

  1. La búsqueda de JNDI no es compatible, por lo que creo que no puede hacer RMI desde otro cliente de aplicación

  2. Como arjan señaló que carece de modularidad en el diseño.

 6
Author: duvo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:26

Creo que lo que hay que tener en cuenta es que EJB inside a WAR es parte de EJB Lite, que es un buen esfuerzo para hacer una aplicación que se ejecuta con los servicios mínimos proporcionados por un contenedor EJB. Porque no siempre necesita todos los servicios proporcionados por un contenedor EJB.

Por lo tanto, si se pregunta sobre los pros y los contras de empaquetar EJB en una GUERRA o en un OÍDO, entonces debe pensar en la cantidad de servicios que necesita.

HTH.

 5
Author: Celinio Fernandes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-25 11:15:41

Actualmente estoy estudiando alguna guía para la certificación EJB 3.1 y tengo que probar cada característica de la misma. Y todos están disponibles cuando se usa una guerra.

Es muy diferente EJB Lite de embalaje de GUERRA.

Puede tener algo de modularidad lógica usando jars ejb que puede incluir en su proyecto web. Pero todos los módulos comparten el mismo entorno (jndi) por lo que podrían ocurrir algunas colisiones de nombres. En un proyecto EAR cada módulo tiene su propio espacio de nombres.

 4
Author: victor herrera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-07 02:52:23

Hice algún experimento sobre este tema y realmente sorprendido en el resultado. Mi conclusión fue nunca usar EJB en la GUERRA. Dejemos el trabajo para el contenedor EJB, así que si alguien quiere obtener el mejor desarrollo y sin errores, use EAR en su lugar.

Cuando trabajé en EJB en WAR usando NetBeans 7.1.3, Glassfish 3.1.2.2 y JRebel para un desarrollo más rápido me he dado cuenta de que JRebel solo funciona perfectamente con la recarga de los cambios realizados en EJB modul si se implementó en un paquete EAR. Si hiciera la GUERRA simple paquete el classloader se comportó de manera absolutamente extraña durante la fase de desarrollo y causó muchos errores aleatorios.

De todos modos el paquete de guerra en el despliegue normal funcionó perfecto como mentiod por otros.

También en un paquete WAR los cambios en las cadenas NamedQuery no aparecían después de guardar y compilar. Si empaquetaba en el OÍDO el desarrollo era suave y rápido. Por supuesto, esto podría ser un error también en JRebel.

 2
Author: Miklos Krivan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-09 22:30:48