JBoss nao sobre dois hibernate.properties?

10 respostas
Victor_Neves

bom dia pessoal do GUJ… alguem já passou por esse problema?
eu tenho dois jars, tenho A.jar e o AB.jar (nomes ficticios rsrs) em ambos eu possuo um arquivo hibernate.properties, os dois arquivos apontam para o MESMO banco porém para databases DIFERENTES! e o log do JBoss mostra que ele está subindo apenas o properties do A.jar, quando uma aplicação X vai usar a api AB.jar ele nao consegue conexao… se eu retirar o A.jar da pasta lib do JBoss dai a api AB.jar sobe normalmente apontando para a outra database… ja viu isso?

vlw, abraços

10 Respostas

rimolive

Isso me cheira a conflito de classloading dos dois jars. Poderia dizer se ambos são módulos EJB ou simples bibliotecas jar?

Verifique também na wiki do JBoss sobre o assunto: https://community.jboss.org/wiki/ClassLoadingConfiguration

Victor_Neves

sao bibliotecas simples

rimolive

Ok Victor. O que acontece é que o modelo de classloading do JBoss leva a isso pois o classloader das aplicações não é isolada (somente aplicações web pela especificação devem ser isoladas), ou seja, eles compartilham o mesmo contexto para carregar classes, configurações, etc. Para entender um pouco mais sobre isso, recomendo um post do blog do Rafael Tuelho, um dos consultores JBoss:

O que você deve fazer é isolar o classloader desses jars de modo que um não influencie no outro. Abaixo um post de outro blog que explica como configurar o classloader das aplicações:

Espero ter ajudado.

Victor_Neves

obrigado, vou pesquisar e testar essa solução

Victor_Neves

rimolive, voce ja fez isso?
nao to conseguindo fazer , a documentação da jboss é ruim quanto a esse assunto! na net tem mais dúvida do que boas respostas!
e quando acho algo é referente a isolar WAR e nao JAR!!
criei um jboss-classloading.xml no META-INF da api mas parece que o jboss nao a enxerga!
tem um pouco de tutorial mostrando como faz isso no jboss4, mas nao funciona no Jboss5 ou 6
tem um pouco de tutorial mostrando como faz isso no jboss5, mas nao funciona no Jboss 4 ou 6
tem um pouco de tutorial mostrando como faz isso no jboss6, mas nao funciona no Jboss4 ou 5
aff a jboss sempre me decepcionando na compatibilidade entre versoes…

rimolive

Olá Victor,

Infelizmente não terá uma configuração que vai funcionar nas três ou quatro últimas versões de JBoss porque algumas coisas mudaram de uma versão para outra. Isso não é algo ruim, eu vejo isso como algo bom pois o projeto está evoluindo.

Pelo tutorial, eue encontrei essa frase: “…JAR, place it in the META-INF of the jar, e.g. mylib.jar/META-INF/jboss-classloading.xml”. Foi exatamente isso que você fez? Além disso, o artigo foi extraído da wiki do jboss.org, onde também tem informações a respeito: https://community.jboss.org/wiki/JBoss5CustomMetadataFiles

Se continuar com dificuldades em resolver o problema, me manda um mp que eu te ajudo no que for possível.

Victor_Neves

colega, fiz da mesma forma como estava ai nesse link e nada de funfar…

eu consegui criar um classloader separado para a aplicação WAR, ms nao conseguia colocar o JAR dentro desse classloader, dai eu eu botei o JAR dentro da pasta lib da aplicação e retirei o JAR da pasta lib do jboss…
quando o jboss subiu o WAR criando um novo classloader pra aplicação ele subiu junto o JAR… dai funcionou…
mas estou testando essa solução, se demonstrar estabilidade vai acabar sendo essa a solução para esse caso…

nao precisei criar jboss-classloading.xml nem no JAR nem no WAR, criei só um jboss-web.xml no WAR, sacou? =]

Metaleiro

Tenho uma aplicação que gera dois .war, dentro dessa tenho alguns .jar em comum com o Jboss, os quais não posso retirar.

Tentei fazer o isolamento do Jboss, das seguintes formas:

Através do jboss-classloading.xml:

Demystifying the JBoss5 jboss-classloading.xml file

Através do jboss-web.xml:

Como fazer o deploy de uma app grails no JBoss

Porém os erros persistem, alguém teria mais alguma idéia ?

Seria possível retirar os .jar do Jboss ? ou colocar ? tentei colocar na pasta “endorsed” e não funcionou.

Se alguém puder ajudar, desde já agradeço !

Victor_Neves

colega, o meu problema era confronto de biblioteca… eu tinha umas libs do hibernate na instancia default do jboss e o jboss tinha umas libs do hibernate de versoes diferente em seu diretorio de libs compartinhada…
dai eu retirei as libs da instancia default e passei a trabalhar somente com as libs nativas do jboss…

eu recomendo NAO colocar libs que possam dar confronto com as que já existem no jboss (óbvio que se voce precisar usar uma lib de algum framework que nao existe no jboss voce quem que colocar ela lá né rsrs), o melhor é apontar o build path da sua aplicação para o jboss, que ai voce usa todas as libs do jboss e nao precisa colocar elas dentro do seu projeto.

antes de resolver o meu problema retirando as libs conflitadas, eu havia conseguido resolver por esse lance do classloader separado, CUIDADO por que na versao 4 do jboss voce configura de um jeito, na versao 5 de outro jeito e na versao 6 de outro jeito… a redhat adooora mudar a maneira de configurar seus produtos a cada nova versão :evil: :evil: :evil: :evil:

entao primeira sugestao, retire as libs do seu projeto que já existam no jboss e aponte o classpath da sua aplicação para usar as libs do jboss, no eclipse voce faz isso com botao direito no projeto > build path > configure build path > add library > server runtime

Metaleiro

Bem, solucionei da seguinte forma:

Dentro do meu projeto em WEB-INF/libs criei um diretório “endorsed”.

O segredo era descobrir os jars em conflito e colocar apenas os jars em conflito no diretório.

Muito obrigado.

Criado 25 de abril de 2012
Ultima resposta 25 de mai. de 2012
Respostas 10
Participantes 3