当我将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库中找到这个类?
答案 0 :(得分:1)
在persistence.xml中,您可以包含jar包含实体,如下所示。您可以通过指定相对路径或绝对路径来包含jar。您可以将它与其他库一起包含在应用程序EAR&提到相对路径,这是推荐的。
<jar-file>somejar.jar</jar-file>
配置文件应该位于EJB模块的META-INF中。
答案 1 :(得分:1)
看起来应该有效。
我会说: