【问题标题】:@Inject annotation not working@Inject 注释不起作用
【发布时间】:2015-06-15 21:28:35
【问题描述】:

我是第一次尝试使用 CDI。虽然我已经使用 @EJB 成功地将一个 EJB 注入到另一个 EJB 中,但我无法让 @Inject 注释工作。

@Stateless
public class AccountDaoImpl implements AccountDAO {

    @Inject
    private MultiTenantEntityManagerImpl mtem; //always null

}

多租户实体管理器如下所示:

 @Default
public class MultiTenantEntityManagerImpl {
   .....
} 

我创建了一个 beans.xml 文件(空),但将它硬塞到了构建的 jar 文件中的 META-INF 文件夹中。还是不开心。

我相信这很简单。我在 jboss 5.0.1.GA 中运行。

更新

所以看起来 jboss 5 不支持 @Inject 注解。

另一种方法是使用@EJB 注释,但这也不起作用:

@Stateless
public class AccountDaoImpl implements AccountDAO {

    @EJB
    private MultiTenantEntityManager mtem; //still null!

}

奇怪的是,在另一个 EJB 中,实体管理器的这个确切声明工作正常。

【问题讨论】:

  • 除非我弄错了,CDI 是 Java EE 6 的一部分,jboss 5.0.1.GA 不支持。
  • 你用的是哪个版本的java ee?
  • 啊!所以我一直在用头撞砖墙。我有哪些选择?
  • 您可以使用 Spring 或 Guice 进行注入,而只依赖 EJB 进行服务、远程处理和事务......但是这种情况会变得混乱,所以最好只使用最新版本。

标签: java jboss cdi


【解决方案1】:

在我的情况下,我缺少独立的子系统

【讨论】:

    【解决方案2】:

    看起来,至少在 jboss 5 中,@EJB 注释只有在两个以下条件成立时才会被尊重:

    1. 您使用它的类是 EJB
    2. 类以某种方式从容器中检索(例如 JNDI),而不是简单地通过构造函数进行实例化。

    【讨论】:

      猜你喜欢
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      • 2013-09-20
      • 2020-10-09
      相关资源
      最近更新 更多