@Resource不从Lib Directory中的Jar类中注入

时间:2014-04-03 03:29:03

标签: cdi

我有一个具有这种结构的项目:

WEB-INF/
WEB-INF/beans.xml
WEB-INF/classes/myclass.class
WEB-INF/lib/mylib.jar
              |
              +-----> com/libclass1.class
              +-----> com/libclass2.class
              +-----> META-INF/beans.xml

CDI在WAR(myclass.class)内的类中工作正常,但@Inject中来自@Resourcemylib.jar的任何声明都返回null。我将beans.xml放在两个文件中,但它继续返回null,我在这个配置上缺少什么?有什么想法吗?

我正在尝试注入此资源:

@javax.annotation.Resource
UserTransaction tx;

但是,如果我使用这段代码:

private UserTransaction tx;

public UserTransaction getTx() {
    if (tx == null) {
        try {
            tx = (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction");
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }

    return tx;
}

然后它从Jar Classes开始工作。此代码有效,因为它正在检索预定义Bean ,但我正在尝试使@Resource/@Inject与任何其他资源/类一起使用。

1 个答案:

答案 0 :(得分:0)

正如评论讨论中所见,您只是在实例化您的课程:

libclass1 lC = new libclass1();

使用这种方法,CDI容器不知道类实例化,也无法为您注入依赖项。 你要做的是:

  • 在调用者中注入实例libclass1,以便CDI容器可以实例化libclass1并在其中注入其依赖项
  • 使用bean管理器手动实例化libclass1。手动实例化的示例显示为here