CDI从lib jar中注入EJB(无状态)

时间:2013-11-04 15:28:33

标签: java jpa ejb javabeans cdi

我在注入lib jar上声明的dao bean时遇到了麻烦。 所以我有一个jar(我的)有持久化上下文,实体和daos。这是一个例子:

@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 / for 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。

1 个答案:

答案 0 :(得分:0)

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

如果它是第三方jar,那么您最好的想法是创建一个可移植的扩展程序,并在CDI 1.1中收听BeforeBeanDiscovery或在CDI 1.1中收听AfterTypeDiscovery并调用addAnnotatedType从jar中添加所需类的方法。您可以在war / ear类路径中创建此扩展。