I have created a local EJB that I want to access from a web module in the same VM. My code looks like this:
@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;
}
And this works fine. However, somebody told me that I don't need to do a lookup if I'm working with a local bean, I only need to make an injection like this:
@EJB
private UserBeanLocal userBean;
public UsuarioManagedBean() {
}
public List getUsers() {
users = this.userBean.listUsers();
return users;
}
But if I try this I get a null exception on this.userBean.
The person who advised me works with JBoss and I'm using glassfish. Am I doing something wrong?
解决方案
The @EJB annotation only works with application-server controlled classes like servlets, mdbs, other ejbs.
I'm guessing that UsuarioManagedBean is a pojo and hence the NPE because the resource never gets injected.