【问题标题】:Java EE: how to access local EJB from web module?Java EE:如何从 Web 模块访问本地 EJB?
【发布时间】:2011-06-27 03:14:40
【问题描述】:

我创建了一个本地 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 上得到一个空异常。 建议我的人与 JBoss 合作,我正在使用 glassfish。我做错了吗?

【问题讨论】:

  • 您使用的是什么版本的 JEE 和 Glassfish? JEE5 支持依赖注入(DI),所以如果你使用的是旧版本,它就无法工作。与 Jboss 一样,DI 在 jboss-4.2.3 中不起作用,但在 jboss 5 中会很好。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 感谢 Kiran,事实上 UsuarioManagedBean 是一个 pojo。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    相关资源
    最近更新 更多