JBOSS NoClassDefFoundError

10 respostas
silver00

Olá,

Quando tento utilzar uma API (com todos os módulos incluidos no classpath) em uma aplicação java normal, todos os métodos funcionam corretamente, fazendo todas as operações normalmente. Porém quando eu tento fazer essa aplicação funcionar em um sistema JSF, tenho esse error:

javax.faces.el.EvaluationException: java.lang.NoClassDefFoundError: org/ejbca/util/InterfaceCache

Acabei vendo que o problema é na utilização do servidor de aplicação JBOSS, onde o deploy das classes é diferente de uma aplicação java normal. A única coisa que sei é que eu preciso colocar alguns .jars nas pastas /lib do Jboss, porém não sei quais classes e nem onde coloca-las exatamente.

Alguma sugestão?

10 Respostas

jmag

Olá silver00,

Qual a versão do JBoss?

jmag

Outra coisa,

JBoss já disponibiliza as libs para o JSF, vc gostaria de utilizar as libs do JBoss ou as da sua aplicação?

silver00

Olá silver00,

Qual a versão do JBoss?

A versão do JBOSS é a 5.1.0.GA, pois a API funciona melhor com esta versão do que com as mais recentes.

Outra coisa,

JBoss já disponibiliza as libs para o JSF, vc gostaria de utilizar as libs do JBoss ou as da sua aplicação?

O que eu farei é subir a API pelo jboss e usar a minha aplicação para utilizar de seus serviços, então acho que será as libs da própia aplicação.

jmag

Esse erro ai é bem “genérico” digamos assim, mas vamos tentar algumas coisas já que citou o JSF.

Se você possui uma aplicação .war, com a implementação do JSF no diretório WEB-INF/lib, deve-se especificar o parâmetro abaixo, para ?dizer? ao JBoss que você quer usar a implementação que está na sua aplicação e não a que é disponibilizada pelo Servidor (JBoss). Esse parâmetro deve ser adicionado ao web.xml, da sua aplicação.

<context-param> <param-name>org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL</param-name> <param-value>true</param-value> </context-param>

Realize o deploy novamente e verifique se funciona.

Mas se não funcionar vamos tentar outras abordagens.

Abs

silver00

Esse erro ai é bem “genérico” digamos assim, mas vamos tentar algumas coisas já que citou o JSF.

Se você possui uma aplicação .war, com a implementação do JSF no diretório WEB-INF/lib, deve-se especificar o parâmetro abaixo, para ?dizer? ao JBoss que você quer usar a implementação que está na sua aplicação e não a que é disponibilizada pelo Servidor (JBoss). Esse parâmetro deve ser adicionado ao web.xml, da sua aplicação.

Tentei fazer mas não deu certo (eu fiz na pasta da minha aplicação que esta no C:\ e não do JBOSS, e é ai que surge outra dúvida minha). Quando fazemos deploy de nossa aplicação, toda ela será disponibilizada no srvidor de aplicação certo? pelo menos foi assim que aprendi). Qual seria a diferença de pedir a aplicação puxar as libs da propria aplicação? Não seriam as mesmas que serão disponibilizadas no deploy?. Quando eu faço a importação pelo classpath, incluindo todas as jars, todas as classes que preciso são reconhecidas, mas pelo que vi, preciso fazer algo mais, segue a estrutura da minha aplicação.

C:\Projeto\MinhaAplicação
C:\Usuários\MyUser\workspace\ejbca(essa é a API)
C:\Usuários\MyUser\workspace\jboss-5.1.0.GA

silver00

Nada?

jmag

Olá silver00,

desculpe a demora em responder estou finalizando um projeto no trampo e tá complicado.

Quando fazemos deploy de nossa aplicação, toda ela será disponibilizada no srvidor de aplicação certo? pelo menos foi assim que aprendi). Qual seria a diferença de pedir a aplicação puxar as libs da propria aplicação? Qual seria a diferença de pedir a aplicação puxar as libs da propria aplicação? Não seriam as mesmas que serão disponibilizadas no deploy?

A diferença está na ordem em que elas serão carregadas. Acho que vc ja deve ter ouvido falar de Hierarquia de classloaders. É um assunto bem extenso e aconselho você a ler fortemente.

Alguns links úteis:

https://community.jboss.org/wiki/UseJBossWebClassLoaderInJBoss5


https://community.jboss.org/wiki/JBossClassLoaderHistory

Esse ejbca é essa API aqui? http://www.ejbca.org/

Quais libs devem ser carregadas no JBoss? Eu nunca havia visto essa API antes. Eu gostaria de fazer uns testes aqui.

silver00

Esse ejbca é essa API aqui? http://www.ejbca.org/

Quais libs devem ser carregadas no JBoss? Eu nunca havia visto essa API antes. Eu gostaria de fazer uns testes aqui.

É essa API mesmo. As libs que serão carreagadas serão todas em dist e em modules\dist. Porém pra subir essa API, é bem dor de cabeça, qualquer dificuldade eu posso dar uma mão pra ti, pois apanhei muitio pra levantar ela.

Eu já tinha ouvido falar de classloaders, mas bem pouco. Vou começar a minha leitura nos links que vc aconselhou.

jmag

Pow legal… eu achei bem interessante essa API rsrs

Blz eu vou testar também na parte da tarde e se precisar de ajuda eu grito rsrs…

Abs

silver00

jmag:
Pow legal… eu achei bem interessante essa API rsrs

Blz eu vou testar também na parte da tarde e se precisar de ajuda eu grito rsrs…

Abs

Cara eu li sobre os classloaders, até que entendi bem, porém quando eu coloco as classes nos lugares indicados para fazer o carregamento junto com o jboss, simplesmente não funciona.

Acabei lendo que preciso fazer algumas configurações nos arquivos jboss-app.xml e jboss-web.xml. O primeiro eu não acho em lugar nenhum do jboss e o segundo existe um monte. Por final acabo estando totalmente perdido nessa parte do JSF.

Criado 26 de novembro de 2012
Ultima resposta 27 de nov. de 2012
Respostas 10
Participantes 2