Erro com Cliente EJB

2 respostas
R

Pessoal,
sou iniciante em JEE, e tenho problema com o cliente EJB de uma aplicação que estou fazendo. Quando tento executar a classe teste do EJB recebo a mensagem ‘Exception in thread “main” java.lang.NullPointerException’…
estou usando netBeans 5.5 e Sun Java System Application Server edition 9.0.

interface :

package session;

import javax.ejb.Remote;
import java.util.Date;
import session.GerenteUsuarios;

@Remote
public interface GerenteUsuariosRemote {
        
    public void cadastraPaciente(String nome, String telefone, String email);

    public Integer buscarUsuario(String nome);

    public void cadastraMedico(String nome,String email,String crm);

    public void excluirUsuario(Integer id);
        
}

session:

package session;

import javax.ejb.Stateless; 
import org.hibernate.Query;
import org.hibernate.Criteria;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Order;

@Stateless
public class GerenteUsuarios implements GerenteUsuariosRemote {
    
        // ... implementação dos métodos da interface...
}

classe de teste:

package gerenteusuariosteste;

import session.GerenteUsuariosRemote;
import javax.ejb.EJB;
import java.util.Date;

public class Teste {
    
    @EJB
    private static GerenteUsuariosRemote gerente;
    
    
    public Teste(String[] args){
        
    }

 public static void main(String[] args){

    Teste testador = new Teste(args);

    testador.gerente.buscarUsuario("julia");

    }

}

mensagem que recebo:

Exception in thread "main" java.lang.NullPointerException
        at gerenteusuariosteste.Teste.main(Teste.java:49)
Java Result: 1

Se eu fizer um import de session.GerenteUsuarios na classe Teste e modificar o construtor para gerente = new GerenteUsuarios() tudo funciona como esperado… mas eu não deveria precisar fazer esse import, né ?
Enfim, como devo referenciar o EJB na classe teste ?

2 Respostas

nbluis

EJB’s não são executáveis pelo seu main.
Você vai precisar de um container ejb que exponha esses ejbs.

E uma chamada de fora deve ser feita via lookup.

Busque por exemplos de ejbs aqui no guj mesmo.
Até.

R

valeu pelo toque, nbluis.
bastou adicionar o método de lookup e tudo funcionou.

private GerenteUsuariosRemote lookupGerenteUsuarios() {
        try {
            Context c = new InitialContext();
            return (GerenteUsuariosRemote) c.lookup("GerenteUsuarios");
        }
        catch(NamingException ne) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught" ,ne);
            throw new RuntimeException(ne);
        }
    }
Criado 31 de março de 2008
Ultima resposta 2 de abr. de 2008
Respostas 2
Participantes 2