Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaEE:如何从web模块访问本地EJB?_Java_Jakarta Ee_Glassfish_Javabeans_Code Injection - Fatal编程技术网

JavaEE:如何从web模块访问本地EJB?

JavaEE:如何从web模块访问本地EJB?,java,jakarta-ee,glassfish,javabeans,code-injection,Java,Jakarta 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.b

我已经创建了一个本地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;
}
@EJB
private UserBeanLocal userBean;

public UsuarioManagedBean() {

}

public List<User> getUsers() {
    users = this.userBean.listUsers();
    return users;
}
@EJB
私有用户bean本地用户bean;
公共UsarioManagedBean(){
InitialContext c=新的InitialContext();
userBean=(UserBeanLocal)c.lookup(“java:global/UsersApp/usersEJB/userBean!biz.Users.beans.UserBeanLocal”);
}
公共列表getUsers(){
users=this.userBean.listUsers();
返回用户;
}
这个很好用。然而,有人告诉我,如果我使用本地bean,我不需要进行查找,我只需要进行如下注入:

@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;
}
@EJB
private UserBeanLocal userBean;

public UsuarioManagedBean() {

}

public List<User> getUsers() {
    users = this.userBean.listUsers();
    return users;
}
@EJB
私有用户bean本地用户bean;
公共UsarioManagedBean(){
}
公共列表getUsers(){
users=this.userBean.listUsers();
返回用户;
}
但是如果我尝试这个,我会在this.userBean上得到一个null异常。
建议我使用JBoss的人,我正在使用glassfish。我做错了什么吗?

@EJB注释只适用于应用服务器控制的类,如servlet、MDB和其他EJB。
我猜UsuarioManagedBean是一个pojo,因此是NPE,因为资源从未被注入。

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

@注入私有userBean本地userBean;


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

您使用的是什么版本的JEE和Glassfish?JEE5支持依赖注入(DI),所以如果您使用的是旧版本,它将无法工作。与Jboss相同,存在某些限制,其中DI在Jboss-4.2.3中不起作用,但在Jboss 5中也可以。感谢Kiran,事实上UsuarioManagedBean是一个pojo。