Java EE:如何从Web模块访问本地EJB?

时间:2011-06-27 03:14:40

标签: java java-ee glassfish javabeans code-injection

我创建了一个本地EJB,我想从同一个VM中的Web模块访问它。我的代码如下所示:

@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;
}

这很好用。但是,有人告诉我,如果我正在使用本地bean,我不需要进行查找,我只需要像这样进行注入:

@EJB
private UserBeanLocal userBean;

public UsuarioManagedBean() {

}

public List<User> getUsers() {
    users = this.userBean.listUsers();
    return users;
}

但是如果我尝试这个,我会在this.userBean上得到一个null异常。 建议我的人与JBoss一起工作,我正在使用glassfish。我做错了吗?

2 个答案:

答案 0 :(得分:1)

@EJB注释仅适用于应用程序服务器控制的类,如servlet,mdbs和其他ejbs。 我猜测UsuarioManagedBean是一个pojo,因此是NPE,因为资源永远不会被注入。

答案 1 :(得分:1)

@Lucia看起来像UsuarioManagedBean是一个POJO。 @Kal是对的。你不能将ejb注入pojo。 如果你真的想注入pojo考虑使用CDI。

使用CDI,您的代码如下所示 @Inject private UserBeanLocal userBean;

请发布更多详细信息,如jvm版本,Glassfish版本等。