【问题标题】:JPA EntityListener and persistence archiveJPA EntityListener 和持久性存档
【发布时间】:2015-04-29 06:44:03
【问题描述】:

我们有一个仅包含实体和persistence.xml 的持久性存档。我们有一个包含 ejb 内容的 ejb 模块。

现在对于一个特定的用例,我们需要添加一个 EntityListener,它可以访问服务层中的一些 EJB。

ejb 模块依赖于持久性模块。但是,要在实体中声明侦听器,持久性模块需要了解 ejb 模块中的类。循环依赖是不可能的,第三个模块只包含 JPA 侦听器也会导致循环依赖。

所以我看到的唯一选择是将 ejb 模块和持久性存档合并到一个模块中。然而,这样我们就失去了在另一个应用程序中使用持久性存档连接到远程接口而不携带整个 ejb jar 内容的灵活性。

关于如何解决这个问题并保持模块化(单独的 ejb 和持久性模块?)的任何想法。

我们谈论的是 JEE7 应用程序。

【问题讨论】:

    标签: java hibernate maven jakarta-ee jpa


    【解决方案1】:

    您可以将persistence.xml 从您的JPA 项目移动到您的EJB 项目,然后使用<jar-file>packedEntity.jar</jar-file> XML 元素。检查这个answer

    【讨论】:

      【解决方案2】:

      一个想法是使用您的源代码控制管理 (git/svn/cvs) 在您的 EJB 项目中导入实体包(+persistence.xml 文件)。这样,您可以更灵活地定义它们的内容/方式。 在 SVN 中你有svn:externals。对于 git,请查看 this answer

      【讨论】:

      • 不确定您的问题是否正确。我基本上有四个 maven 模块:持久性(包含实体)、接口、web(战争)和 ejb。问题是要通过注释使用实体侦听器,这种分离不起作用,因为实体需要了解侦听器。并且侦听器需要 ejb 包中的一些 bean。
      • 我不确定是否可以在您的实体项目之外定义实体侦听器。鉴于此,我的想法是摆脱带有实体的 maven 项目,而是在您的 EJB 项目中仅集成每个 svn:externals 所需的源代码(Java 实体)。
      猜你喜欢
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      相关资源
      最近更新 更多