Pregunta

Soy un recién llegado a Java EE, así que quizás esta sea una pregunta tonta.Pero estoy implementando un WAR y un JAR que contiene EJB en Glassfish 3.1.servidor.WAR tiene una referencia a uno de los EJB en el archivo JAR.¿Es obligatorio incluir el EJB JAR en el archivo WAR? lib directorio para que esto funcione?Dado que tanto WAR como JAR se ejecutarán en el mismo servidor de aplicaciones, esperaba no tener que ocuparme de estas dependencias.Sin embargo, estoy obteniendo un java.lang.NoClassDefFoundError cuando implemento WAR si no incluye el EJB JAR (aunque el EJB JAR ya está implementado en el servidor de aplicaciones).

¿Fue útil?

Solución

Una de las piedras angulares de Java EE es la noción de que se pueden ejecutar diferentes componentes en contenedores que no comparten un espacio de nombres, aunque los componentes se estén ejecutando en la misma JVM.Si tiene módulos que necesitan compartir un espacio de nombres, deben agruparse en un EAR (antes de Java EE 6) o combinarse en un único WAR (un caso especial establecido por Java EE 6 para aplicaciones web que necesitan aprovechar los EJB). .

Este es un cambio significativo de lo que "saben" las personas familiarizadas con el desarrollo de Java SE.Para la mayoría de los programas Java SE, el contenedor es el proceso JVM.

Entonces la respuesta a tu pregunta es no.No es necesario colocar el archivo jar EJB en el directorio lib del archivo WAR.Podrías crear un archivo EAR que contendría AMBOS archivos".

Esto puede aclararle la situación...

 myEar.ear
   + myEJBs.jar
   + myWAR.war
   + lib
       + a-jar-that-has-classes-used-in-both-archives-above.jar

Otros consejos

¿Has intentado empaquetar el archivo WAR y JAR juntos en un archivo EAR?El archivo EAR puede tener un directorio lib donde puede colocar archivos JAR para cargarlos en el classpath FBO de la aplicación empresarial.

Esto debería resolver el problema del cargador de clases.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top