To desenvolvendo um aplicação web, com Struts e EJB, empacotada em um EAR, rodando em um JBoss 3.0.3.
A aplicação funcional bem, mas com um porém. Uma classe minha de Action tenta executar um método de uma classe que está em um jar dentro de WEB-INF/lib, porém eu tenho o seguinte erro: NoClassDefFoundError: meu/pacote/ClasseASerUsada.
O estranho é que o jar com a classe está de fato no meu WAR, porém o meu action não acha a classe para usá-la.
Isso tem a ver com o fato de ser uma app empacotada em um EAR? Pois eu tenho uma outra aplicação, com a mesma estrutura e roda como um WAR, numa boa.
Ja li num livro do Rod Johnson em que ele fala da hierarquia de class loaders em aplication servers. Que teria a seguinte ordem na árvore:
– class loader do AS
– class loader do EJB Container
– class loader do WEB Container
E que um class loader filho pode enxergar as classes carregadas pelo pai, porém o pai não pode ver as classes carregadas pelo filho.
Comenta tb do conflito de de carregar a mesma classe em dois class loaders diferentes, ou seja,o do EJB e o de WEB.
Se vc estivesse usando a mesma classe em algum modulo EJB…talvez fosse o caso comentado acima…
Outra alternativa … pensando nesta hierarquia de class loaders … foi colocar o JAR com a classe como módulo no application.xml
A implementação de colocar o Hibernate como MBean Service no JBoss usa esta alternativa.
Eu tentei essa alternativa de jogar o JAR no EAR direto, mas não rolou.
Olha que mais estranho ainda. No meu action struts eu chamava uma classe que eu criei, chamada Util. Essa classe Util fazia a chamada à classe “desaparecida”.
Acabei tirando o código da Util e jogando no action. FUNCIONOU!
Que grande bizarrice.
C
chicoria
Beleza… bizarrices mesmo!!
É o tipo de coisa que desgasta… o AS te oferece um monte de serviços porém ficar adivinhando o comportamento e sucks…
:lol:
falow
danieldestro
Acho que o problem deve ser devido a duplicação de classes.
Mas não vou perder meu tempo agora que tá funcionando. Depois eu vejo isso!