Libs da Aplicação no JBOSS 7  XML
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Autor Mensagem
danilo.akamine
JavaBaby
[Avatar]

Membro desde: 08/10/2009 17:12:03
Mensagens: 75
Offline

Estou tentando migrar uma aplicação que utiliza JBoss 4 para o JBoss 7.
A aplicação utiliza diversas bibliotecas, .jar pro Jasper, Lucene, etc.

Andei lendo sobre os módulos do novo JBoss e vi que algumas bibliotecas já estão integradas como "módulo", por exemplo API do Apache Commons.
E no caso, bastaria setar no MANIFEST como depedência e pronto.

Até ai deu certo, mas e as Libs que não estão como módulo?
Achei que fosse simplesmente colocar na pasta standalone/deployment/lib mas não deu certo.
Quando subo o server aparece logo um ClassNotFoundException.

Alguém sabe o que precisa fazer para minhas libs que já funcionavam no JBoss anterior funcionar no novo também?

Valeu
danilo.akamine
JavaBaby
[Avatar]

Membro desde: 08/10/2009 17:12:03
Mensagens: 75
Offline

Resolvi o problema criando meu próprio módulo, com todas as libs que a minha aplicação utiliza.
thiago-dev
Entusiasta Java

Membro desde: 25/07/2008 14:27:02
Mensagens: 15
Offline

danilowz wrote:Resolvi o problema criando meu próprio módulo, com todas as libs que a minha aplicação utiliza.


Tenho exatamente o mesmo problema que foi descrito no início deste post, porém eu tenho a limitação de não poder cadastrar meus módulos no diretório modules, pois só tenho permissão de leitura.

Alguém conhece alguma forma de carregar os módulos direto do WEB-INF/lib da aplicação?


Obrigado.
danilo.akamine
JavaBaby
[Avatar]

Membro desde: 08/10/2009 17:12:03
Mensagens: 75
Offline

cara, se você não pode trabalhar como módulo,
acho que só resta pra você colocar as libs no WEB-INF/lib no caso de .war e ear/lib no caso do .EAR
funciona normalmente.
o chato é ficar "replicando" biblioteca se você tiver várias app.
thiago-dev
Entusiasta Java

Membro desde: 25/07/2008 14:27:02
Mensagens: 15
Offline

danilowz wrote:cara, se você não pode trabalhar como módulo,
acho que só resta pra você colocar as libs no WEB-INF/lib no caso de .war e ear/lib no caso do .EAR
funciona normalmente.
o chato é ficar "replicando" biblioteca se você tiver várias app.


Danilowz, obrigado por responder.

É um projeto war e deixei todos os jars dentro do WEB-INF/lib, como faria com o Tomcat, só que o JBoss AS 7.1, não acha nenhuma classe e não deixa nem fazer o deploy...


Não sei se está faltando algum arquivo de configuração ou coisa do tipo, no Glassfish 3.1.1 o problema é o mesmo.

No link abaixo tem mais detalhes do problema.
http://www.guj.com.br/java/267293-webapp-deploy-jboss-as-71glassfish-311
danilo.akamine
JavaBaby
[Avatar]

Membro desde: 08/10/2009 17:12:03
Mensagens: 75
Offline

Que erro você está tendo ao deployar?

Bem cara, eu não cheguei a subir um .war, eu subi um .EAR que tinha um .war dentro
No caso eu tinha algumas bibliotecas de core do EAR, e algumas libs de view no .war
rolou sem problemas.

Creio que não deveria ter problemas rodando um .war sozinho, ainda mais que na nova especificação você não precisa mais empacotar um .war pra rodar EJB (por exemplo).
Eu tentaria:

- Subir o .war sozinho, setando no MANIFEST o Class-Path para toda as /libs

se não der, tente empacotar seu .war em um .ear (é estranho funfar assim e não sozinho, mas vale a pena tentar)
thiago-dev
Entusiasta Java

Membro desde: 25/07/2008 14:27:02
Mensagens: 15
Offline

Esse é o erro na hora do deploy:


JEE/WebContent/META-INF/MANIFEST.MF está assim:


Classe que está dentro do h3.jar, que o Weld deveria ter enxergado para ser injetada:


A interface que está no projeto Web:


A classe que deveria ter recebido injeção:
danilo.akamine
JavaBaby
[Avatar]

Membro desde: 08/10/2009 17:12:03
Mensagens: 75
Offline

cara, existe algum motivo especial para vc instanciar manualmente seu EntityManagerFactory ?

você podia aproveitar que está usando um servidor de aplicação e utilizar o @PersistenceContext ou até mesmo usar o Seam Persistence pra container Web.
danilo.akamine
JavaBaby
[Avatar]

Membro desde: 08/10/2009 17:12:03
Mensagens: 75
Offline

bem, quanto ao erro.
isso não está parecendo falta de biblioteca do CDI.
se não teria dado pau nos outros dois @Inject também, mas aí diz que só foi no atributo "observer".

o que tá estranho, é esse construtor padrão protected da classe HibernateSessionFactory.
deixa ele público que talvez o CDI não consiga instanciar assim.

This message was edited 2 times. Last update was at 09/03/2012 13:55:17

thiago-dev
Entusiasta Java

Membro desde: 25/07/2008 14:27:02
Mensagens: 15
Offline

danilowz wrote:cara, existe algum motivo especial para vc instanciar manualmente seu EntityManagerFactory ?

você podia aproveitar que está usando um servidor de aplicação e utilizar o @PersistenceContext ou até mesmo usar o Seam Persistence pra container Web.



Danilowz, concordo com tudo o que você disse, as implementações não estão como deveriam. Tanto que assim que conseguir superar o problema atual de deploy, a maior parte desse código vai ser refatorado.

Alterei o Manifest para adicionar os outros jars que talvez estejam fazendo falta na implementação concreta do Observador:


Também aumentei o nível de log do JBoss para o máximo:


Mas mesmo com esse nível de log, ainda não tenho pistas de onde está o problema. Talvez seja a falta de algum arquivo xml de configuração exclusivo do JBoss no diretório WEB-INF, pois tenho apenas: beans.xml (vázio), faces-config.xml e o web.xml.
thiago-dev
Entusiasta Java

Membro desde: 25/07/2008 14:27:02
Mensagens: 15
Offline

danilowz wrote:bem, quanto ao erro.
isso não está parecendo falta de biblioteca do CDI.
se não teria dado pau nos outros dois @Inject também, mas aí diz que só foi no atributo "observer".

o que tá estranho, é esse construtor padrão protected da classe HibernateSessionFactory.
deixa ele público que talvez o CDI não consiga instanciar assim.


Eu também desconfiei disso, e utilizei o JBoss Aquillian Junit (http://www.jboss.org/arquillian) para testar se ele poderia ser injetado desta forma. O teste passa sem nenhum erro:


Se eu copiar o package com a classe HibernateSessionFactory, dentro da aplicação web, o deploy é feito com sucesso.
digaoneves
GUJ Ranger
[Avatar]

Membro desde: 14/05/2011 14:24:45
Mensagens: 950
Localização: São Paulo - Butantã
Offline

danilowz, você pode mostrar a estrutura de como fez seu module?

as pastas e o xml.. só um exemplo.. porque acho que isso pode resolver um problema que estou tendo.

Obrigado

- Rodrigo Sasaki
danilo.akamine
JavaBaby
[Avatar]

Membro desde: 08/10/2009 17:12:03
Mensagens: 75
Offline

thiago-dev

aquelas classes "Bean" e "Annoted" estão no mesmo projeto dessa classe que está dando pau? todas estão no h3.jar?

digaoneves

cria uma estrutura de pastas, ex: /jboss7/modules/br/com/teste/main
dentro da pasta main/, cria um arquivo module.xml com a estrutura:

<?xml version="1.0" encoding="UTF-8"?>

<module xmlns="urn:jboss:module:1.0" name="br.com.teste">
<resources>
<resource-root path="biblioteca1.jar"/>
<resource-root path="biblioteca2.jar"/>
</resources>
</module>

e ai coloca a biblioteca1.jar e biblioteca2.jar dentro da mesma main/ também junto com o module.xml

para criar o módulo é só isso,
depois quando for utilizar o módulo em algum app.
no META-INF/MANIFEST dessa aplicação deve conter uma linha: "Dependencies: br.com.teste" que é o nome do módulo criado.

thiago-dev
Entusiasta Java

Membro desde: 25/07/2008 14:27:02
Mensagens: 15
Offline

danilowz wrote:thiago-dev

aquelas classes "Bean" e "Annoted" estão no mesmo projeto dessa classe que está dando pau? todas estão no h3.jar?

digaoneves

cria uma estrutura de pastas, ex: /jboss7/modules/br/com/teste/main
dentro da pasta main/, cria um arquivo module.xml com a estrutura:

<?xml version="1.0" encoding="UTF-8"?>

<module xmlns="urn:jboss:module:1.0" name="br.com.teste">
<resources>
<resource-root path="biblioteca1.jar"/>
<resource-root path="biblioteca2.jar"/>
</resources>
</module>

e ai coloca a biblioteca1.jar e biblioteca2.jar dentro da mesma main/ também junto com o module.xml

para criar o módulo é só isso,
depois quando for utilizar o módulo em algum app.
no META-INF/MANIFEST dessa aplicação deve conter uma linha: "Dependencies: br.com.teste" que é o nome do módulo criado.


Não, elas pertencem ao container JEE dentro do package javax.enterprise.inject.spi.

É uma pena eu não ter permissão de escrita nessa pasta modules, ai o problema já estaria resolvido...
danilo.akamine
JavaBaby
[Avatar]

Membro desde: 08/10/2009 17:12:03
Mensagens: 75
Offline

thiago-dev

engraçado, a classe injetada no mesmo projeto rola?

cara, não quer tentar empacotar seu .war num .EAR ?
pega esse projeto h3.jar e transforma em módulo tbm.

eles estando no mesmo .EAR funciona perfeitamente, pq isso já cheguei a fazer, tudo bem que era um módulo EJB, mas pelo menos pra tentar descobrir o erro você podia ver se funciona ai também.

outra coisa que tive que fazer, é criar um META-INF/beans.xml dentro do módulo EJB tbm.
não sei o porquê mas não tava rolando se não tivesse o beans.xml nos dois módulos.



 
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Ir para:   
Powered by JForum 2.1.8 © JForum Team