Salve pessoal.
To com um problema no seguinte ambiente:
- Tenho uma aplicação no Tomcat e preciso migrar pro JBoss 5.1 e a aplicação tem dentro dela todas as libs necessárias pro seu funcionamento.
(A aplicação usa hibernate 3.1, ehcache, flash e algumas libs que os próprios desenvolvedores criaram pra facilitar a aplicação).
Um dos requisitos da mudança é que eu retire todas as libs da aplicação e que o JBoss já fornece, como por exemplo o hibernate (hibernate do JBoss é a versão 3.3.2) e deixe apenas as libs proprietarias dentro do projeto.
Sendo assim, eu fiz um isolamento de classloader do projeto retirando todas as libs que o JBoss já fornece.
A principio funcionou perfeitamente (sem problemas de compatibilidade entre versões). O único problema gerado foi com o EhCahce.
Como o JBoss não tem a lib do ehCache, eu a deixei dentro da aplicação, mas na hora de acessar a aplicação ocorre uma exceção de ClassDefNotFound (net.sf.ehcache).
PS: O cache provider da aplicação é o fornecido pelo Hibernate
– Minha opinião sobre o que está acontecendo:
Quando eu subo o JBoss ele carrega no classloader dele, as libs do hibernate 3.3.2 e as libs do hibernate-cache-provider(que vai chamar o ehCache).
E só depois ele carrega as libs da aplicação, que embora tenha lá dentro a lib do ehcache o JBoss não vai ter a visibilidade já que na árvore do classloader o pai não consegue ver o filho.
E por isso gera o problema.
– Possível solução
Eu posso colocar a lib do ehCache dentro da pasta lib da instancia do JBoss que eu to subindo(dessa forma eu carrego no classloader o ehcache no mesmo nível da árvore que o do provider do hibernate). Isso resolve o problema, mas eu não posso fazer isso porque pode impactar outras aplicações que estão dentro da mesma instancia(sim… infelizmente tem mais de uma aplicação por instancia e não posso mudar isso).
Então pessoal, como vcs sugerem que eu possa resolver esse problema?