【问题标题】:Inject PersistenceContext in JAR lib在 JAR 库中注入 PersistenceContext
【发布时间】:2014-12-17 12:28:04
【问题描述】:

在包含我的 DAO 的第三方 jar 库中注入带有 @PersistenceUnit 的 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 工作正常。

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

当我在 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();
}

【问题讨论】:

  • 请告诉我们注入点。以及您如何引用此类注入的位置。
  • 你的persistence.xml在哪里?
  • @Skizzo - 我的 persistence.xml 在 EJB 项目的 META-INF 文件夹下(但我也尝试将它放在核心项目下)(主帖子已使用此信息更新)
  • @JohnAment 我已经在主帖中添加了注入点。核心项目中的 HibernateSupport 类。此类通过 CDI 注入到 EJB 中(并且有效……但 emf 字段仍然为空)

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


【解决方案1】:

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

  • 使HibernateSupport 成为EJB;

  • 使用@Inject注入EntityManager,阅读here怎么做;

【讨论】:

  • 对于选项 2:这意味着我“生产” entityManager 的 bean 必须是 EJB?对?所以我确实必须把这个生产者放在 EJB 项目中......并且由于类加载,注入点找不到它......
  • 核心(注入点)是EJB项目(生产者)的maven依赖
  • 是的。你应该把它放到 EJB 项目中。依赖的方向无关紧要,注入在部署时解决。 EJB 模块也应该有一个 beans.xml 文件
  • 这将是我的情况的完美解决方案,但我得到一个例外:WELD-001408 Unsatisfied dependencies for type [EntityManagerFactory] ​​with qualifiers [@Default] at injection point [[field] @Inject private be .HibernateSupport.emf]
  • 这是另一个问题。您是否有任何 CDI 可解析的 SessionFactory 实现?
【解决方案2】:

尝试以这种方式更改您的 sn-p 代码:

public class HibernateSupport {

@PersistenceUnit
private EntityManager em;

 ...
}

【讨论】:

  • 效果一样。我也试过@PersistenceContext 但它仍然是空的。
猜你喜欢
  • 2016-01-19
  • 2011-06-10
  • 2017-05-19
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 2016-01-30
  • 1970-01-01
  • 2012-11-21
相关资源
最近更新 更多