Java EE: como acessar o EJB local a partir do módulo da web?

Eu criei um EJB local que desejo acessar de um módulo da Web na mesma VM. Meu código é assim:

@EJB private UserBeanLocal userBean; public UsuarioManagedBean() { InitialContext c = new InitialContext(); userBean = (UserBeanLocal) c.lookup("java:global/UsersApp/Users-ejb/UserBean!biz.users.beans.UserBeanLocal"); } public List getUsers() { users = this.userBean.listUsers(); return users; } 

E isso funciona bem. No entanto, alguém me disse que eu não preciso fazer uma pesquisa se estou trabalhando com um bean local, eu só preciso fazer uma injeção como esta:

 @EJB private UserBeanLocal userBean; public UsuarioManagedBean() { } public List getUsers() { users = this.userBean.listUsers(); return users; } 

Mas se eu tentar isso, recebo uma exceção nula no this.userBean. A pessoa que me aconselhou trabalha com o JBoss e eu estou usando glassfish. Estou fazendo algo errado?

A anotação @EJB só funciona com classs controladas pelo servidor de aplicativos, como servlets, mdbs e outros ejbs. Eu estou supondo que UsuarioManagedBean é um pojo e, portanto, o NPE porque o recurso nunca é injetado.

@Lucia parece que UsuarioManagedBean é um POJO. @Kal está certo. Você não pode injetar ejb em um pojo. Se você realmente quiser injetar em um pojo, considere usar o CDI.

Usando o CDI, seu código ficará como abaixo @Inject private UserBeanLocal userBean;

Por favor, publique mais detalhes como a versão jvm, versão Glassfish etc ..

    Intereting Posts