在JAR lib中注入PersistenceContext

时间:2014-12-17 12:28:05

标签: maven persistence cdi java-ee-6 weblogic12c

我在使用@PersistenceUnit注入包含我的DAO的第三方jar库中的EntityManagerFactory时出现问题。

这是我的多模块maven项目结构。

-EAR
 \-WAR ==> the webapp (maven type war)
  \-EJB ==> the service facade (maven type EJB (provided to War)
   \CORE ==> the legacy DAO's library (maven type JAR)

我使用CDI连接在一起==>所有maven项目中都有一个beans.xml文件...... CDI工作正常。

但是当我把它放在CORE项目中时,@ PersistenceUnit注释不起作用。 (该字段为空)

当我在EJB项目中使用@PersistenceUnit时,一切正常。

我的persistence.xml文件位于EJB项目的META-INF文件夹下(但我试图把它放在核心项目中......没有成功)。

这是注入点:

public class HibernateSupport {

@PersistenceUnit
private EntityManagerFactory emf;

...
}

这个类在带有CDI的EJB项目中注入(它可以工作......但emf字段为空...)

有人可以帮助我吗?

编辑:

如果我将我的核心项目变成EJB项目(maven类型ejb)。然后它工作......但我希望我的核心项目保持POJO项目......

编辑2

生产者代码:

@PersistenceUnit
private EntityManagerFactory emf;

@Produces 
public SessionFactory getSessionFactory() {
    return ((HibernateEntityManagerFactory)emf).getSessionFactory();
}

2 个答案:

答案 0 :(得分:1)

使用注释@PersistenceUnit,您只能注入EJB。您的HibernateSupport不是EJB。 因此,为了解决问题,您需要:

  • 使HibernateSupport成为EJB;

  • 使用EntityManager注入@Inject,阅读here如何操作;

答案 1 :(得分:0)

尝试以这种方式更改代码段:

public class HibernateSupport {

@PersistenceUnit
private EntityManager em;

 ...
}