jakarta ee-Java ee:如何从web模块访问本地EJB



我已经创建了一个本地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工作,我正在使用玻璃鱼。我做错什么了吗?

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

@Lucia看起来像UsuarioManagedBean是一个POJO@卡尔是对的。您不能将ejb注入pojo。如果您真的想注入到pojo中,请考虑使用CDI。

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

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

最新更新