我在注入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。
答案 0 :(得分:0)
首先,如果这是你创建的jar而不是第三方,只需在jar的正确位置添加beans.xml,你就可以使用这些对象进行注入。这是最简单的方法。
如果它是第三方jar,那么您最好的想法是创建一个可移植的扩展程序,并在CDI 1.1中收听BeforeBeanDiscovery
或在CDI 1.1中收听AfterTypeDiscovery
并调用addAnnotatedType
从jar中添加所需类的方法。您可以在war / ear类路径中创建此扩展。