EJB3实体类的独立jar

时间:2013-05-15 10:57:18

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

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

我正在使用Glassfish,我所做的是,将entities.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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

看起来应该有效。

我会说:

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