EAR - entendendo o classloader

3 respostas
danieldestro

Caros,

publicando uma aplicação JEE (J2EE) no JBoss estou com um problema que, para mim, não deveria ocorrer.

Minha aplicação, empacotada em um EAR, contém um módulo EJB (ejb-jar) e um módulo Web (war).

Quando tento acessar um EJB de uma classes do WAR (esteja a classe no WEB-INF/classes ou lib/app-web.jar), a classe não “enxerga” a interface do EJB, dando ClassNotFound.

Ao meu entender, as classes do módulo web (war) deveriam “enxergar” as classes dos módulos EJB do mesmo EAR. Correto?

Deployer e Class loader do JBoss 4.2.2: http://www.redhat.com/docs/manuals/jboss/jboss-eap-4.3/doc/Server_Configuration_Guide/html-single/index.html#JBoss_Deployer_Architecture-Deployers_and_ClassLoaders

3 Respostas

danieldestro

Nooooosssaaa!!!
Ontem realmente não foi um bom dia.

Descobri que o build do Ant estava gerando o EJB-JAR com os fontes (.java) e não os binários. Por isso não funcionave em nenhum app server. Corrigi e funcionou.

O fato é que os binários de um WAR contido em um EAR enxergam sim os binários dos EJB-JARs do mesmo EAR. É uma característica geral do classloader dos app servers.

C

Mas, conceitualmente, sendo o war um módulo independente, que poderia estar em outro nó de um cluster, ele deveria conter as interfaces EJB neh!?! O fato de estarem no mesmo EAR não significaria nada para o módulo WAR, correto?
No EJB 2, eu tenho quase certeza que era assim. No 3 eu não sei, pq nunca tive oportunidade de construir algo com ele.

Claro, isso é conceitualmente. Na prática, eu queria matar o AS que fizesse uma coisa desses :lol:

danieldestro

Até onde sei, uma aplicação em um EAR (ejb + war) é disponibilizada (deloy) em uma mesma instância. Mesmo que tenha cluster, o deploy é feito completo nos nós.

Criado 19 de maio de 2009
Ultima resposta 25 de mai. de 2009
Respostas 3
Participantes 2