Instanciar EJB em um Servlet

Alguém poderia me dar um exemplo de como instanciar um Stateless Session Bean através de um Servlet? Eu estou seguindo o tutorial da Sun mas não está funcionando.

Obrigado

Olá, qual versão do EJB vc está usando ? Acredito eu que o erro deve ser no lookup. Coloque aqui o código, e servidor de aplicação que está utilizando, que o pessoal poderá lhe ajudar melhor.

Olá, qual versão do EJB vc está usando ? Acredito eu que o erro deve ser no lookup. Coloque aqui o código, e servidor de aplicação que está utilizando, que o pessoal poderá lhe ajudar melhor.

Estou usando EJB 3.0. Na verdade estou meio perdido. No tutorial diz o seguinte:

  • Criar uma interface com a diretiva @Remote e colocar os métodos que serão usados pelo Bean;

@Remote
public interface Mensagem {
public String getMensagem();
}

  • Criar o Bean implementanto a interface acima

@Stateful()
public class MensagemBean implements Mensagem {
public String getMensagem() {
return “Teste”;
}
}

  • Para instanciar o Bean basta

public class Cliente {

@EJB
private static Mensagem mensagem;

public String getMensagem() {  
    return mensagem.getMensagem();  
}  

}

Esta estrutura está no tutorial Java EE que baixei no site da Sun. Porém, não funciona, fica dizendo que precisa implementar EJBObject, SessionBean, etc. Aí procurei na internet e a coisa é bem mais complexa:

  • Precisa criar uma interface herdeira de EJBObject, outra de EJBHome;
  • O Bean precisa implementar um SessionBean;

O cliente precisa fazer tudo isso:

InitialContext ctx = new InitialContext();
Object obj = ctx.lookup(“MensagemBean”);
MensagemHome home = (MensagemHome)PortableRemoteObject.narrow(obj, MensagemHome.class);
Mensagem remote = home.create();

Qual é a maneira correta de usar Bean? Porque no tutorial é muito mais simples, porém não compila no Eclipse?

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

Tente o tutorial do JBoss… vc precisa herdar de EJBLocalObject e etc, só com EJB 2, com EJB 3 é esse o caminho mesmo !

Good Luck ! :slight_smile:

Quer dizer que com EJB 3.0 é só usar @Remote, @Stateless, @EJB, etc?

sim…

e no caso do servlet, vc precisa dar um lookup… os @EJB só funciona dentro de outros EJBs

Consegui, só que precisei colocar o mappedName na diretiva Stateless, sendo que uso GlassFish e não JBoss:

@Stateless(mappedName = “Login”)

Muito obrigado.