我目前正在考虑在不使用Spring的情况下构建新应用程序,而是尝试使用CDI进行所有注射。
我的DAO如下所示:
@TransactionManagement(TransactionManagementType.CONTAINER)
public class TestDao
{
@PersistenceUnit(unitName="DefaultPersistenceUnit")
private EntityManagerFactory emf;
@PersistenceContext(unitName="DefaultPersistenceUnit")
private EntityManager em;
@TransactionAttribute(TransactionAttributeType.MANDATORY)
public void test ( )
{
System.err.println ("EMF == " + emf);
System.err.println ("EM == " + em);
}
}
当我运行测试方法时,我看到以下内容:
EMF == org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory@1e3b8c4 EM == null
所以很明显我的EntityManager没有被CDI加载。它似乎应该,但没有快乐。
我已尝试在TomEE和WebSphere Liberty配置文件上进行托管,但两种情况下的效果相同。
有人能指出我正确的方向吗?我很难过......
...谢谢
答案 0 :(得分:0)
EJB使用@PersistenceContext
和@TransactionManagement
。要使其工作,您的组件必须是EJB。将@Stateless
添加到您的课程中以使其正常工作。你需要在战争中使用ejb项目或嵌套bean。
答案 1 :(得分:0)
说实话,我不确定你为什么试图注入它们,它应该抛出错误,因为根据我的经验,@PersistenceContext
为EntityManager
注入持久性或者@PersistenceUnit
EntityManagerFactory
,而不是两者。此外,您可以使用EntityManager
方法从EntityManagerFactory
获取createEntityManager()
,因此我不明白这个问题。