Reputation: 4767
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<User> 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<User> 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?
Upvotes: 2
Views: 2727
Reputation: 801
@Lucia looks like UsuarioManagedBean is a POJO. @Kal is right. You cannot inject ejb into a pojo. If you really want to inject into a pojo consider using CDI.
Using CDI your code will look as below
@Inject private UserBeanLocal userBean;
Please publish more details like jvm version, Glassfish version etc..
Upvotes: 1
Reputation: 24910
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.
Upvotes: 1