Hemos visto en el anterior post cual es la estructura de un fichero WAR. En este veremos la estructura de un fichero EAR o Enterprise Archive. Este tipo de ficheros son desplegables en servidores de aplicaciones que soporten el stack completo de JEE .Es decir contengan tanto un servlet container como un EJB Container . Los ficheros EAR que tienen la siguiente estructura:
Como podemos ver un EAR es capaz de albergar varios ficheros WAR cada uno de los cuales contiene una aplicación web completa.
Aparte de albergar varias aplicaciones web también tiene la capacidad de contener EJBs que son empaquetados en archivos JAR para su utilización en las distintas aplicaciones web.
Aparte de estos ficheros disponemos de la carpeta lib para almacenar JARs que contenga clases que sean utilizadas o por los EJBS o por las aplicaciones web que tenemos empaquetadas.
Los EAR disponen del fichero application.xml (directorio META-INF) que define la estructura de modulos incluidos en este tipo de empaquetamiento .Vamos a ver un ejemplo sencillo.
<?xml version=<em>"1.0"</em> encoding=<em>"UTF-8"</em>?> <application xmlns:xsi=<em>"http://www.w3.org/2001/XMLSchema-instance"</em> xmlns=<em>"http://java.sun.com/xml/ns/javaee"</em> xmlns:application=<em>"http://java.sun.com/xml/ns/javaee/application_5.xsd"</em> xsi:schemaLocation=<em>"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd"</em> version=<em>"6"</em>> <display-name>MiEAR</display-name> <module> <web> <web-uri>Web01.war</web-uri> <context-root>Web01</context-root> </web> </module> <module> <ejb>EJB.jar</ejb> </module> </application>
Como podemos ver nuestro Enterprise Archive esta compuesto de un módulo de EJB (EJB.jar) y un módulo Web (Web01.war). Una vez revisados cada uno de los empaquetamientos pasaremos en los próximos post a hablar de Maven.
Hola dentro de mi proyecto cree una carpeta resources, donde tengos dos archivos que necesito ocupar, como hago para que esos documentos se empaqueten cuando genero el ear?
Buen dia, muy interesante su publicación, gracias por compartir sus conocimientos. Quisiera plantearle mi problema que tengo con una aplicación que estoy migrando de weblogic a wildfly 22, en Java 1.8 y usa EJB y JSF. Esta aplicación tiene dos war y un ejb dentro de un ear. Resulta que un war llama a otro war, pero en el segundo war en un managedBean se hace referencia a un managedBean del primer war mediante JSF. En eclipse puedo ver los códigos sin problema, pero cuando despliego la aplicación y ejecuto la función que llama del primer war al segundo war… Read more »
Es raro que un war llame a un managed bean de otro war ya que ambos se encuentran en diferentes class loaders .Lo que harás es igual referenciar a una pagina jsf de otro war . Pero integrar un ManagedBean que esta en otro .. es mas raro . Probablemente tengas que revisar como estaban los classloaders configurados antiguamente
Emilio, como siempre muy las explicaciones
Una consulta:
Hay una problemática, posiblemente habitual en legados muy antiguos, es cuando por motivos de limpiezas y migraciones de repositorios o bajas de aplicaciones, se pierdan algunos fuentes de los proyectos java y solo estén disponibles los EAR en Producción.
¿Es posible obtener los fuentes de un proyecto java a partir de su respectivo EAR?, es decir, la estructura del proyecto original y no la que tiene EAR en su interior.
De ser así, ¿Cuál es el procedimiento más adecuado para logarlo?. (si conoces alguna publicación descriptiva al respecto mejor aún)
Fe de erratas:
quise decir, muy didácticas las explicaciones
No creo que sea posible , puedes hacer sobre el EAR ingenieria inversa y sacar las clases , pero la estructura Maven original no
Si tengo un proyecto en EAR y estoy trabajando con los archivos fuentes, al salvar el proyecto o publicarlo el EAR se actualiza solo con mis cambios? o debo hacer el empaquetado cada vez que actualice algo en los archivos? Gracias por la ayuda!
hay que empaquetarlo 🙂 ya lo siento
estimado ,
ante todo gracias por todo su conocimiento y dedicación , muy buena la pagina, actualmente tengo un archivo .ear y necesito dentro de este modificar la firma de una reporte generado con Jasper, que me recomienda? ya que intente pisar el .jasper y el jrxml y cuando realizo el deploy deja de funcionarme el ear en el WebPhere ,
desde ya muchas gracias
Saludos
No te se decir en principio si sigue siendo un ear deberia desplegar
Buenos días Cecilio,
Nesecito crear un proyecto spring con un EAR que contenga varios WAR, los war los quiero tener en proyectos separados y un proyecto que junte todos los war y los meta dentro de EAR y asi solo deployar el proyecto EAR, la consulta para administrar los ear y los war que me recomiendas usar: Ant, maven, gradle, es un proyecto de cero y seria modular. y si tienes algun ejemplo de la estructura de la modularizacion,
Gracias
Lo mejor suele ser usar maven en estructura multimódulo 😉
Hola a todos, tengo un inconveniente hace tiempo, y es que tengo el siguiente caso: – WAR App1 – WAR App2 App1 contiene login, y su lógica propia, en tanto App2 no debiera tener login. Entonces, App1 tendría un /login, con el que podría entrar al sistema. Luego, dentro del mismo sistema podría navegar a App2 (que es un diferente war, otro contextPath, /app2). ¿Cómo podría auto-iniciar sesión dependiendo de la sesión de App1? Ambas en un mismo tomcat, misma tecnología (Spring-JSF-Primefaces). ¿CAS sería una de las mejores alternativas? O existe algún truquillo que se pueda hacer con esto de… Read more »
Lo que tienes que hacer es gestionar un single sign on , para que las dos aplicaciones compartan la seguridad
Estimado,
Es posible añadir un proyecto spring cómo módulo a un EAR ?
Desde ya se agradece su buen trabajo.
Saludos,
Si , de hecho es bastante común ya sea como jar o como war 🙂
Hola cecilio. Buen post este, aqui comentas que es común añadir un proyecto de spring como módulo a un ear. Tenes algún tutorial de como hacer.
Saludos
Pues no tengo nada , pero es suficiente con tener un dynamic web proyect de eclipse e integrarle en el EAR como WAR
Hola Cecilio muy bien explicado el post por cierto, tengo una pregunta, actualmente estoy desacoplando un EJB, lo he colocado en un EAR de tipo libreria, al momento de que es consumido por una aplicacion, este solo permite que lo utilice una aplicacion de tipo EAR, si otras aplicaciones intentan consumirlo mediante una referencia sale un error indicando que el EJBSession se encuentra siendo usada por otra aplicacion; alguna vez intentaste tener un EJB como libreria compartida???
Uhmm pues no lo he intentado la verdad, los EJBs van ligados a los EARs , lo que puedes tener es un EAR que compartan varias aplicaciones y que este EAR contenga EJBs y que se compartan de forma remota o local.
Mmm, entonces los EJB no puede estar en librerias compartidas a pesar que estas librerias sean de tipo EAR??. sino que tienen que estar en EARs de tipo aplicacion, es lo que me quieres decir???????
De acuerdo a esta arquitectura deberia separar mi aplicacion en modulos. Es decir debo tener un modulo para contabilidad, otro para facturacion, otro para nomina y cada uno de estos modulos con sus respectivos ejbs, war, jar, y estos deberian compartir la misma base de datos??
Gracias
No necesariamente , si que es cierto que serían mas reutilizables pero también los despliegues más complejos depende mucho de lo que a uno le encaje mejor .
Estimado, tengo una consulta el EAR me puede servir para modularizar mi aplicacion empresarial? , es decir puedo tener varios war dentro sin embargo hay alguna forma de decir cual de estos war es el que inicie por defecto?, por ejemplo tengo un war1 donde esta mi modulo de seguridades y otro war2 donde esta mis pantallas de negocio como puedo hacer para que el despliegue lanze primero el modulo de seguridades es decir el war 1??.
Saludos
Puedes tener varios War sin problemas . Pero no puedes separarlos como tu dices.El war almacena normalmente las pantallas y son los Jars los que suelen almacenar la lógica de negocio. Estos jars pueden ir a nivel de la carpeta lib del web.xml o pueden ir en la carpeta lib del EAR . En este ultimo caso serán compartidos por todos 🙂
Creo que no me explique bien, a lo que me refería es que si bien puedo tener varios war dentro del EAR, como puedo decirle que un war arranque por default, a lo que me referia con un war de logica de negocio es por ejemplo a las pantallas de contabilidad, pero quiero que se arranque desde el war donde esta mi login(seguridades)
Cada war es independiente y todos pueden decidir cual es su pantalla de arranque a traves del web.xml en la opcion de wellcome file list
Muy interesante el blog,
podrías explicarnos cuando generas el EAR y lo quieres ver de nuevo en el Eclipse, con todas tus clases, paginas jsp, etc. como lo importas.
ya que cuando hago ese procedimiento, no veo mi codigo fuente
Saludos
Es normal que no veas el código fuente ya que un ear solo lleva el código compilado el fuente se queda en el propio proyecto del eclipse 🙂
Buenas tardes Cecilio, estuve viendo tu post y me pareció interesante, quería consultarte acerca de cuando se utilizan varios .war en un .ear, para que se utiliza esto?
Espero tu respuesta, saludos.
Para que todos los componentes de los WAR puedan compartir los EJB locales por ejemplo.También para compartir librerias entre todos los war a nivel de EAR
Hola, me resulto muy útil el blog y el libro.
El problema que tengo es que necesito referenciar a los EJB (que están contenidos en un archivo EAR) desde un WAR el cual no esta contenido en el EAR. Tanto el archivo EAR como el WAR se encuentran en la carpeta deploy del JBOSS. ¿Sabes si esto es posible?
Muchas gracias, saludos.
Si que lo es .Para ello los EJB deberían implementar un interface remoto algo que cubriré en próximos POST
Hola,
Muy buena nota.
Duda, tengo una aplicacion que no contiene EJB’s solo clases java y peliculas flash (flex), lo tengo en un ear, pero como bien explicas , dentro del ear esta el war.
Si solo deployo el war, en lugar del ear, todo seguiria normal?, existe alguna ventaja en esto?
Gracias =D
Perdona el retraso en contestarte.. he estado moviendo el blog de servidor . En principio te debiera funcionar igual ya que lo importante es el WAR en tu caso. Un EAR es mas util cuanto tenemos por ejemplo EJBS o varios WARs a desplegar