Onde ficam as libs no projeto EJB?

8 respostas
F

Pessoal,
Sei que esta pergunta parece básica, mas…
Tenho um projeto Web, um projeto EJB (que eu só criei pq preciso usar MDB) e um projeto EAR.
Nosso DataSource é inicializado por uma Servlet, no projeto Web. Nossas classes de gerenciamento de banco ficam em um jar.
Mas quem vai usar o BD é o meu MDB… então o meu projeto EJB precisa enxergar este jar, e as classes de controle de BD.
Já coloquei este jar em tudo quanto é lugar (no web-ing, no EAR, no JBoss), mas só ocorre NoClassDefFoundError.
Como um projeto EJB encontra as libs? Preciso colocá-las em algum diretório especial ou configurar algum xml?

Muito Obrigada,
Fernanda

8 Respostas

R

ferstring:
Pessoal,
Sei que esta pergunta parece básica, mas…
Tenho um projeto Web, um projeto EJB (que eu só criei pq preciso usar MDB) e um projeto EAR.
Nosso DataSource é inicializado por uma Servlet, no projeto Web. Nossas classes de gerenciamento de banco ficam em um jar.
Mas quem vai usar o BD é o meu MDB… então o meu projeto EJB precisa enxergar este jar, e as classes de controle de BD.
Já coloquei este jar em tudo quanto é lugar (no web-ing, no EAR, no JBoss), mas só ocorre NoClassDefFoundError.
Como um projeto EJB encontra as libs? Preciso colocá-las em algum diretório especial ou configurar algum xml?

Muito Obrigada,
Fernanda

Coloque uma ao jar que vc quer que o EJB no classpath do manifest do jar do EJB.

F

Obrigada! Foi isto mesmo que eu fiz…
Criei um arquivo Manifest.mf no META-INF do Projeto EJB.
Porém, parece-me que este arquivo só está enxergando as libs no jboss/server/default/lib. Se eu tiro elas de lá, o projeto não encontra mais…
Eu não queria deixar algumas libs “minhas” lá no servidor de aplicação.
Tentei usar caminho relativo mas não deu certo. Além disso, quando eu coloco o caminho relativo, o eclipse reclama:
IWAE0016E Line 2 in the MANIFEST.MF file in archive TesteMDB2.jar exceeds the specification limit of 72 bytes.

Alguém tem mais alguma sugestão?

Obrigada novamente,
Fernanda

R

esse é um manifest.mf típico de um EJB:

Manifest-Version: 1.0
Ant-Version: xxxxxxxxxx
Created-By: xxxxxx
Built-By: xxxxxxxx
Package: xxxxxxxxxxxxxxx
Class-Path: llib1.jar lib2.jar hibernate.jar

Bem, eu aconselho o uso de maven cria o manifest automaticamente para vc :slight_smile:

F

Obrigada pelo exemplo, mas se eu tentar usar o maven agora, eu acho que não consigo fazer este EJB esta semana hehe… um dia eu ainda tentarei usar o maven.
Bom, meu Manifest já está assim:

Manifest-Version: 1.0 Class-Path: CocoDeploy.jar log4j-1.2.8.jar commons.jar
Mas somente quando eu coloco estes jar lá no \jboss-4.0.3SP1\server\default\lib é que o EJB encontra as libs e tudo funciona!

Eu queria que minha aplicação utilizasse as libs que estivessem no projeto EJB ou no projeto EAR, e não lá no jboss.

Eu tentei utilizar caminho relativo, colocando as libs em um diretório app/lib, deixando o arquivo assim:

Manifest-Version: 1.0 Class-Path: lib/CocoDeploy.jar lib/log4j-1.2.8.jar lib/commons.jar
Mas assim não funciona…

Também tentei criar o manifest pelo Ant. Ele criou, exatamente da forma como está aí em cima… então não adiantou…
O Eclipse não encapsula os jars utilizados pelo EJB corretamente? Deve ser isso… :roll:

R

Você esta gerando um EAR? Esta colocando as libs dentro do EAR?

F

Sim, eu gerei um EAR e associei meu projeto Web e EJB a ele.
Tentei colocar as libs no EAR e então, no projeto EJB, eu indiquei elas no Build Path. No Eclipse compila… mas depois quando executa ele não encontra as libs (NoClassDefFoundError)… eu só consegui solucionar isso colocando o manifest.mf no EJB e colocando as libs no jboss.
Como eu faço meu manifest enxergar que deve utilizar as libs do EAR?

R

Hum, por isso eu não gosto dos plugins do eclipse para trabalhar com EJB.
Não sei com o Eclipse gera o EAR. Poste exatamente o que esta indo dentro do .EAR.

J

Vc tem o application.xml dentro do EAR no diretorio META-INF?

<!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application 1.2//EN' 'http://java.sun.com/j2ee/dtds/application_1_2.dtd'>
 
<application>
    <display-name>SISTEMA </display-name>
    <module>
        <web>
            <web-uri>aplicacao.war</web-uri>
            <context-root>/aplicacao</context-root>
        </web>
    </module>  
        
    <module>
        <ejb>ejb.jar</ejb>
    </module>
</application>
Criado 12 de setembro de 2006
Ultima resposta 12 de set. de 2006
Respostas 8
Participantes 3