Instanciar EJB em um Servlet

7 respostas
E

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

7 Respostas

cariocathi

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.

cariocathi

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.

E

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?

cariocathi

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:

E

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

rissato

sim…

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

E

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

@Stateless(mappedName = “Login”)

Muito obrigado.

Criado 11 de novembro de 2008
Ultima resposta 12 de nov. de 2008
Respostas 7
Participantes 3