Pergunta

Sou um novato no Java EE, então talvez esta seja uma pergunta fictícia.Mas estou implantando um WAR e um JAR contendo EJBs em um Glassfish 3.1.servidor.WAR possui uma referência a um dos EJBs no arquivo JAR.É obrigatório incluir o JAR EJB no arquivo WAR? lib diretório para fazer isso funcionar?Como o WAR e o JAR serão executados no mesmo servidor de aplicativos, eu esperava não precisar cuidar dessas dependências.No entanto, estou recebendo um java.lang.NoClassDefFoundError quando eu implantar o WAR se ele não incluir o EJB JAR (mesmo que o EJB JAR já esteja implementado no servidor de aplicativos).

Foi útil?

Solução

Um dos pilares do Java EE é a noção de que diferentes componentes podem ser executados em contêineres que não compartilham um namespace, mesmo que os componentes possam estar sendo executados na mesma JVM.Se você tiver módulos que precisam compartilhar um namespace, eles precisam ser agrupados em um EAR (antes do Java EE 6) ou combinados em um único WAR (um caso especial estabelecido pelo Java EE 6 para aplicações web que precisam aproveitar EJBs) .

Esta é uma mudança significativa em relação ao que as pessoas familiarizadas com o desenvolvimento do Java SE "sabem".Para a maioria dos programas Java SE, o contêiner é o processo JVM.

Então, a resposta à sua pergunta é: “Não.Não é necessário colocar o jar EJB no diretório lib do arquivo WAR.Você poderia criar um arquivo EAR que conteria AMBOS os arquivos."

Isso pode esclarecer a situação para você...

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

Outras dicas

Você já tentou embalar o arquivo War e Jar juntos em um arquivo auditivo?O arquivo EAR pode ter um diretório libo em que você pode colocar arquivos jar a serem carregados no FBO da ClassPath do aplicativo Enterprise.

Isso deve resolver o problema do seu comader.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top