Problema com EJB3

3 respostas
ThiagoWorldCoder

Olá!!

Estou fazendo uma aplicação usando EJB 3.

Eu coloco o @EJB em cima do meu serviço que estou usando em um servlet.

O serviço é acessado normalmente e funciona!

meu servlet:

import java.io.IOException;

import javax.ejb.EJB;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import pacote.TesteRemote;
import service.Service;

/**
 * Servlet implementation class TesteServlet
 */
public class TesteServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TesteServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    @EJB
    TesteRemote testeRemote;
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		System.out.println(testeRemote.testando("nome"));
		
	}

}

Porém, quando tento utilizar este serviço em outra classe, e posteriormente chamar esta classe no meu servlet, dá nullPointerException. É como se não conseguisse fazer a ligação com o serviço EJB.

Como faço para resolver isso?

obrigado!

3 Respostas

G

@EJB só injeta um EJB para classes que possuem ciclo de vida controlado pelo container. Qualquer classe que você faz instâncias manuais não possuem injeção do EJB. No servlet funciona porque o ciclo de vida de um servlet é controlado pelo container.

Mas lembre-se… apenas podem ser injetados stateless session beans no servlet.

ThiagoWorldCoder

Em um exemplo no site da sun http://java.sun.com/javaee/5/docs/tutorial/doc/bnbnj.html, tem um exemplo, onde conseguem acessar um serviço EJB em uma aplicação Desktop.

Alguém pode me explicar como se consegue isso?

obrigado!

G

Você consegue isso fazendo um lookup do EJB na árvore JNDI. Aqui tem um link em pt-br explicando a JNDI: http://pt.wikipedia.org/wiki/JNDI

Você deve lembrar que para cada servidor o lookup é de uma forma diferente, pois a especificação não define um padrão para o nome do EJB.

Criado 29 de setembro de 2009
Ultima resposta 29 de set. de 2009
Respostas 3
Participantes 2