Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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
Java @注入注释无效_Java_Jboss_Cdi - Fatal编程技术网

Java @注入注释无效

Java @注入注释无效,java,jboss,cdi,Java,Jboss,Cdi,我第一次尝试使用CDI。虽然我已经使用@EJB成功地将一个EJB注入到另一个EJB中,但是@Inject注释无法工作 @Stateless public class AccountDaoImpl implements AccountDAO { @Inject private MultiTenantEntityManagerImpl mtem; //always null } 多租户实体管理器如下所示: @Default public class MultiTenantEn

我第一次尝试使用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文件夹中。还是没有快乐

我相信这很简单。我正在运行JBoss5.0.1.GA

更新 因此,JBoss5似乎不支持@Inject注释

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

@Stateless
public class AccountDaoImpl implements AccountDAO {

    @EJB
    private MultiTenantEntityManager mtem; //still null!

}

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

看起来,至少在jboss 5中,@EJB注释只有在以下两个条件都成立的情况下才会得到尊重:

  • 在其中使用它的类是EJB
  • 该类以某种方式从容器中检索(例如JNDI),而不是简单地通过构造函数实例化

  • 在我的例子中,我在单机版中缺少子系统


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