EJB3 + JBoss 4.2.2 = NullPointerException (@EJB) :-/

6 respostas
saviobarr

Olá amigos,
Fiz uma pequena aplicação em que um BackingBean JSF chama um EJB. Empacotei tudo num .ear (.war, META-INF e ejb.jar), joguei no JBoss, a aplicação subiu legal. No console do JBoss diz que os EJBs subiram (12:20:07,515 INFO [EJBContainer] STARTED EJB: br.com.dc.business.CalculoDiferencial ejbName: CalculoDiferencial
12:20:07,578 INFO [EJB3Deployer] Deployed: file:/C:/jboss-4.2.2/server/default/
tmp/deploy/tmp29335ControlCenter.ear-contents/ejb-jar.jar)
Porém ao chamar esse EJB a partir do meu backing bean dá NullPointerException. Abaixo trecho do código do backing bean em que chamo o EJB:

1 package br.com.dc.view;

2 import javax.ejb.EJB;

3 import br.com.dc.business.CalculoDiferencialInterface ;

4 public class CalculoDiferencialMB {

5    @EJB

6    private CalculoDiferencialInterface cdi;

7    public String calculo(){

8         System.out.println("—CALCULO EJB: BACKING BEAN");

9         //aqui ocorre o erro

10       cdi.calcular();  //<-- variavel cdi = null

11       return posCalculo;

12    }

13 }

O erro ocorre na linha 10, é como se o contêiner não estivesse injetando o EJB na variável cdi

Agradeço a todos

Sávio Barros

6 Respostas

rsakurai

Oi savio,

dentro do JBoss os backing bean não conseguem fazer o lookup do EJB utilizando o @EJB.

para vc conseguir fazer isso vc vai ter que fazer um lookup utilizando o InitialContext.

Jair_Rillo_Junior

Sávio, o que o Rafael disse está totalmente corrento.

Agora se você quer um exemplo de como fazer o lookup, você pode checar esse post: http://jairrillo.wordpress.com/2008/04/25/example-of-ejb3-session-bean-using-eclipse-europa-and-jboss/

Espero ter ajudado

saviobarr

rsakurai:
Oi savio,

dentro do JBoss os backing bean não conseguem fazer o lookup do EJB utilizando o @EJB.

para vc conseguir fazer isso vc vai ter que fazer um lookup utilizando o InitialContext.


Mas por quê? No item 16.5 da spec EJB 3.0 não identifiquei o lugar onde dissesse isso. Em que casos consigo usar a facilidade do @EJB? No livro do Debu Panda ele usa exemplos de servlets como clientes…
Aguardo retorno.

Sávio Barros

Jair_Rillo_Junior

Pelo que eu sei, o problema é com o Tomcat (que é o webcontainer do JBoss), ele ainda não implementou a anotação @EJB.

Se você por exemplo, testar o @EJB em um Servlet e por para rodar no Glassfish (ou Websphere onde eu uso) vai funcionar de boa.

saviobarr

ManchesteR:
Pelo que eu sei, o problema é com o Tomcat (que é o webcontainer do JBoss), ele ainda não implementou a anotação @EJB.

Se você por exemplo, testar o @EJB em um Servlet e por para rodar no Glassfish (ou Websphere onde eu uso) vai funcionar de boa.


No WAS funcionou de boa… valeu pela força. Há alguma forma de fazer isso funcionar no JBoss?
Grande abraço.

Sávio Barros

A

rsakurai:
Oi savio,

dentro do JBoss os backing bean não conseguem fazer o lookup do EJB utilizando o @EJB.

para vc conseguir fazer isso vc vai ter que fazer um lookup utilizando o InitialContext.

Para usar JSF a la JBoss é melhor usar o JBoss Seam.

Com ele vc nem precisa de @EJB. É só injetar (@In) o EJB no componente (managed bean).

Criado 28 de julho de 2008
Ultima resposta 29 de jul. de 2008
Respostas 6
Participantes 4