Entity Beans (EJB 3) no JBOSS  XML
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Autor Mensagem
Machado107
Thread.start()
[Avatar]

Membro desde: 01/04/2006 19:27:50
Mensagens: 46
Localização: Rio de Janeiro
Offline

Olá pessoal,

Estou tentando fazer uma aplicação que use entity beans especificação do EJB 3 pra rodar no JBOSS. Mas estou encontrando dificuldades, tanto para fazê-la funcionar quanto para encontrar informações a respeito. Já garimpei na internet mas não encontro nada direto sobre o assunto, e quando encontro é cheio de links quebrados ou/e classes faltando.

Alguêm conhece algum bom tutorial, onde eu possa estudar e botar pra funcionar entity beans no JBOSS?

Abraços,
Machado

"A mente é seu próprio lugar, e em si é capaz de do Inferno um Paraíso, do Paraíso um Inferno"
[Email] [MSN]
fmeyer
Moderador
[Avatar]
Membro desde: 22/02/2005 17:26:29
Mensagens: 1583
Localização: Sao Paulo
Offline

http://docs.jboss.org/ejb3/app-server/tutorial/

Fernando Meyer http://fernandomeyer.com
[Email] [WWW]
Machado107
Thread.start()
[Avatar]

Membro desde: 01/04/2006 19:27:50
Mensagens: 46
Localização: Rio de Janeiro
Offline

Opa! Valeu pela dica. Algumas coisas ficaram mais claras agora, mas outras ainda continuam meio obscuras pra mim.

Eu posso ou não posso usar injeção de entity beans no JBOSS?

O código abaixo, deveria funcionar ou eu tenho que fazer um ContextLookup?



Quando eu rodo ela recebo um NullPointerException no finally. Testando esse EntityManager realmente está null, mas não faço nem idéia do porque. Talvez porque algum arquivo de configuração esteja errado ou simplismente o JBOSS não suporta alguma coisa que estou tentando fazer.

Segue meu persistence.xml:


E o meu *-ds:


Pelo menos checando no console JMX do JBOSS aparentemente esse JNDI esta correto.

Quem puder/tiver paciência de me dar uma força fico devendo uma.

Abçs,
Machado

"A mente é seu próprio lugar, e em si é capaz de do Inferno um Paraíso, do Paraíso um Inferno"
[Email] [MSN]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

Pela especificacao, deveria funcionar!

mas voce vai ter um problema de ter uma variavel de instancia em uma Servlet como um EntityManager por causa do acesso concorrente. prefira inserir um EntityManagerFactory ou entao anotar com PersisnteceContext a classe, para puxar o EntityManager por jndi

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
Machado107
Thread.start()
[Avatar]

Membro desde: 01/04/2006 19:27:50
Mensagens: 46
Localização: Rio de Janeiro
Offline


Acho que já está anotado com o PersistenceContext, mas eu li em algum lugar que é melhor usar um EntityManagerFactory mesmo.
O detalhe é que coloquei o Factory e continuo recebendo um NullPointerException.

Bom, vou dar uma revisada total no cótigo, e então partir pro desespero e baixar o JBoss 4.05, talvez seja alguma coisa relacionada a minha instalação do JBoss (4.04).

E valeu pela ajuda, agora sei que não estou fazendo nada absurdo, deve ser alguma bobeira.

"A mente é seu próprio lugar, e em si é capaz de do Inferno um Paraíso, do Paraíso um Inferno"
[Email] [MSN]
Machado107
Thread.start()
[Avatar]

Membro desde: 01/04/2006 19:27:50
Mensagens: 46
Localização: Rio de Janeiro
Offline

Pessoal,

Quero deixar uma solução que encontrei caso alguém tenha o mesmo problema, e uma pergunta.

Primeiro a sulução. Tirei os annotations.

O código da classe onde estava acontecendo a exceção ficou assim:



Acho que ficou melhor do que antes por causa da inclusão do Factory...

A pergunta é... Alguém sabe se JBOSS aceita ou não annotations??

Falou.
Machado


"A mente é seu próprio lugar, e em si é capaz de do Inferno um Paraíso, do Paraíso um Inferno"
[Email] [MSN]
hyourinmaru
What is classpath?
[Avatar]
Membro desde: 05/07/2006 22:22:23
Mensagens: 5
Localização: Florianópolis - SC
Offline

O JBoss aceita annotations, o problema é o container servlet (Tomcat) que não suporta injeção de dependência na atual versão (5.x), que ja vem encorporado ao JBoss.

Há rumores de que na próxima versão (6) é que o tomcat vai suportar annotations. Por enquanto a solução que vc encontrou é a única possível...

Sobre a versão do JBoss, existe um projeto no JBoss, JEMS Installer, que é um pacotão contendo a versão mais atual dom JBoss e do EJB3, mais uns bagulhos. A vantagem é que não precisa ficar 'remendando' a instalação do JBoss instalando separado o EJB3 e configurando. segue o link caso açguém queira dá uma olhada: http://labs.jboss.com/portal/jemsinstaller/?prjlist=false

Obs: Na instalação do JBoss tem que escolhar a opção 'EJB-3' pra funcionar. Se escolher 'All' ele não instala o EJB3...

[]'s

"Não tenha forma definida, seja como a água. Se verte água numa xícara, ela se torna xícara; se a verte numa garrafa, ela se torna garrafa; se a verte num bule de chá, ela se torna um bule de chá. A água pode fluir ou pode quebrar. Seja água meu amigo, seja água..."

[Bruce Lee]
Machado107
Thread.start()
[Avatar]

Membro desde: 01/04/2006 19:27:50
Mensagens: 46
Localização: Rio de Janeiro
Offline

Hummm...

O que confunde é que ele usa como container de servlet o Tomcat e um módulo de EJB3.
Aí no caso ele aceita annotation pra se fazer as classes de persistência, como @entity, mas não aceita no servlet na hora de fazer a injeção.

Então o lance é ficar ligado quando sair a próxima versão...

Flw

"A mente é seu próprio lugar, e em si é capaz de do Inferno um Paraíso, do Paraíso um Inferno"
[Email] [MSN]
carlos.macleod
Debugger
[Avatar]

Membro desde: 16/08/2007 05:02:02
Mensagens: 56
Offline

Estou com um problema parecido, só que nos meus DAOs. Retirei o @PersistenceContext e o context do sesseion bean e passei para o DAO, que fica em outro pacote ( Tenho de manter os DAOs e os POJOs separados do Session Bean, em um pacote a parte, pois também pretendo usá-los em uma aplicação Stand-Alone )

e o código que antes funcionava deixou de funcionar pq o EntityManager fica null

This message was edited 1 time. Last update was at 28/08/2007 23:12:38

carlos.macleod
Debugger
[Avatar]

Membro desde: 16/08/2007 05:02:02
Mensagens: 56
Offline

Descobri a causa do problema mas não me agradou muito:

"injection only occurs in EJBs, not in plain classes"

http://www.jboss.org/?module=bb&op=viewtopic&t=67611
cetr1n
What is classpath?

Membro desde: 27/08/2007 16:00:17
Mensagens: 7
Localização: Maringá / Curitiba
Offline

Ow Carlos, lá no seu @PersistenceContext tenta deixar implicito o unitname.


This message was edited 1 time. Last update was at 30/08/2007 11:00:44

danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Paulo Silveira wrote:Pela especificacao, deveria funcionar!

mas voce vai ter um problema de ter uma variavel de instancia em uma Servlet como um EntityManager por causa do acesso concorrente. prefira inserir um EntityManagerFactory ou entao anotar com PersisnteceContext a classe, para puxar o EntityManager por jndi


O mesmo se aplica para EJBs que referenciam outros EJBs?

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
Tecnoage
GUJ Master

Membro desde: 13/03/2005 23:18:07
Mensagens: 1723
Localização: SP
Offline

O problema que o Paulo falou se refere ao entityManager não ser threadSafe por natureza... Porém algumas implementações como a da Oracle por exemplo garantem a qualidade ThreadSafe do entityManager, porém vc cai na dependência de toolvendors...

Arquiteto de Software
Sysped Solutions
R3 SAP CAT-83, NF-e, ECD, EFD, CT-e, MANAD, IN86
www.sysped.com.br
[Email] [WWW] [MSN]
Tecnoage
GUJ Master

Membro desde: 13/03/2005 23:18:07
Mensagens: 1723
Localização: SP
Offline

danieldestro wrote:
Paulo Silveira wrote:Pela especificacao, deveria funcionar!

mas voce vai ter um problema de ter uma variavel de instancia em uma Servlet como um EntityManager por causa do acesso concorrente. prefira inserir um EntityManagerFactory ou entao anotar com PersisnteceContext a classe, para puxar o EntityManager por jndi


O mesmo se aplica para EJBs que referenciam outros EJBs?


Se vc está falando de classes como Servelets e MBeans, sim. Não é legal injetar Stateful SessionBeans em classes como servlets e MBeans devido à concorrência, embora o mesmo não se aplica a Stateless SessionBeans. No caso de @EJB em outro EJB não há problemas, daí o caso dos EAOs poderem ser injetados nos session Beans se os mesmo forem EJBs.

Arquiteto de Software
Sysped Solutions
R3 SAP CAT-83, NF-e, ECD, EFD, CT-e, MANAD, IN86
www.sysped.com.br
[Email] [WWW] [MSN]
Tecnoage
GUJ Master

Membro desde: 13/03/2005 23:18:07
Mensagens: 1723
Localização: SP
Offline

carlos.macleod wrote:Descobri a causa do problema mas não me agradou muito:

"injection only occurs in EJBs, not in plain classes"

http://www.jboss.org/?module=bb&op=viewtopic&t=67611


Por isso que ainda se usa EJB3 com Spring2.x...

Arquiteto de Software
Sysped Solutions
R3 SAP CAT-83, NF-e, ECD, EFD, CT-e, MANAD, IN86
www.sysped.com.br
[Email] [WWW] [MSN]
 
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Ir para:   
Powered by JForum 2.1.8 © JForum Team