Lucia
Lucia

Reputation: 4767

Java EE: how to access local EJB from web module?

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

Answers (2)

kiran.kumar M
kiran.kumar M

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

Kal
Kal

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

Related Questions