2

我无法注入在 lib jar 上声明的 dao bean。所以我有一个带有持久性上下文、实体和 daos 的 jar(我的)。这是一个 dao 示例:

@Stateless
public class SomeDao {

  @PersistenceContext
  private EntityManager em;

  ...

}

现在我想在我的主应用程序上使用这个 dao。

一个 jax-rs 用例:

@Path("rs")
public class WebService{

  @Inject
  private SomeDao dao;

  @POST
  public Response doPost(){
    //dao is injected but nullpointer thrown on EntityManager
    dao.doSomething();
  }
  ...
}

两个项目中都有一个 beans.xml(在 META-INF/ 下用于 lib,WEB-INF/ 用于 Web 应用程序)。像这个 :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="
    http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">

</beans>

- - - - - - - 编辑 - - - - - -

我刚刚发现我是否删除了 @Stateless 注释和它的生产者。所以问题实际上是:如何用 CDI 注入在 lib jar 上声明的 EJB。

4

1 回答 1

0

首先,如果这是您创建的 jar 而不是第三方,只需在 jar 的正确位置添加 beans.xml,您就可以将这些对象用于注入。这是最简单的方法。

如果它是第三方 jar,您的下一个最佳想法是创建一个可移植扩展并BeforeBeanDiscovery在 CDI 1.0 或AfterTypeDiscoveryCDI 1.1 中侦听,然后调用该addAnnotatedType方法从 jar 中添加您需要的那些类。您将在您的 war / ear 类路径中创建此扩展。

于 2013-11-04T23:00:44.343 回答