【问题标题】:Separate jar for EJB3 Entity classesEJB3 实体类的单独 jar
【发布时间】:2013-05-15 10:57:17
【问题描述】:

当我将我的 EJB3 实体(使用 @Entity 注释)从我的 EJB 模块中分离出来并将它们放在一个单独的 jar 文件中时,我的 Persistence.xml 文件应该放在我的 EJB 模块中还是我的 entity.jar 中?我应该如何部署entities.jar 文件?它不是 EJB 模块,因为它没有任何 EJB,只有 JPA 实体。

我正在使用 Glassfish,我所做的是将 entity.jar 放在 /lib/applibs 目录中,并在部署 EJB 模块时声明它使用该库。

但部署失败:

Internal Exception: java.lang.ClassNotFoundException: com.pedra.Role
javax.persistence.PersistenceException: Exception [TOPLINK-28018] (Oracle TopLink Essentials - 2.1 (Build b31g-fcs (10/19/2009))): oracle.toplink.essentials.exceptions.EntityManagerSetupException
Exception Description: predeploy for PersistenceUnit [SignonPU] failed.
Internal Exception: Exception [TOPLINK-30007] (Oracle TopLink Essentials - 2.1 (Build b31g-fcs (10/19/2009))): oracle.toplink.essentials.exceptions.PersistenceUnitLoadingException
Exception Description: An exception was thrown while loading class: com.pedra.Role to check whether it implements @Entity, @Embeddable, or @MappedSuperclass.
Internal Exception: java.lang.ClassNotFoundException: com.pedra.Role

那么为什么这个类在entities.jar 库中找不到呢?

【问题讨论】:

    标签: jpa deployment ejb-3.0 classnotfoundexception glassfish-2.x


    【解决方案1】:

    看起来应该可以工作。

    我会说:

    • 检查您的 entity.jar 是否确实在 lib/applibs 中;
    • 检查在部署 EJB 模块时是否正确指定了 entity.jar;
    • 重建你的罐子;
    • 听起来很有趣,通过管理控制台取消部署您的 ejb 模块并重新启动 Glassfish,然后再次部署您的模块;

    【讨论】:

      【解决方案2】:

      在 persistence.xml 中,您可以包含包含实体的 jar,如下所示。您可以通过指定相对或绝对路径来包含 jar。您可以将它与其他库一起包含在应用程序 EAR 中并提及相对路径,这是推荐的。

      <jar-file>somejar.jar</jar-file>

      配置文件应该在 EJB 模块的 META-INF 中。

      【讨论】:

      • 我删除了类名列表并按照您的建议包含了 jar 的名称,但我得到了同样的错误。这很有趣,因为它就像 glassfish 找到了 jar,在那个 jar 中找到了带注释的类,然后声称它找不到该类。
      猜你喜欢
      • 2013-09-13
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      相关资源
      最近更新 更多