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

↘锁芯ラ 提交于 2019-12-02 04:05:11

问题


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?


回答1:


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.




回答2:


@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..



来源:https://stackoverflow.com/questions/6488270/java-ee-how-to-access-local-ejb-from-web-module

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!