如何将jar文件中存在的模型加载到ear应用程序中的持久性单元?
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="PersonalizedOfferAssertionPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>java:/DefaultDS</non-jta-data-source>
<jar-file>../../lib/test.jar</jar-file>
<class>com.test.entity.Transaction</class>
</persistence-unit>
</persistence>
事务类在test.jar文件中,但在尝试部署ear应用程序时,我遇到了class not found异常。
答案 0 :(得分:1)
来自Pro JPA:
一书jar文件条目中列出的任何JAR都必须位于部署单元的类路径上.......同样,这可以通过以下任一方式完成 将JAR放在EAR的lib目录中(如果要部署WAR,则放入WAR),将JAR添加到 部署单元的清单类路径或某些其他特定于供应商的方法。 在jar文件元素中列出JAR时,必须相对于JAR文件的父元素列出 META-INF / persistence.xml文件所在的位置。
这与您在类路径中放置的内容相匹配 进入清单。
例如,假设我们称之为emp.ear的企业归档(EAR)是 结构如清单13-5所示。
清单13-5。外部JAR中的实体
emp.ear
emp-ejb.jar
META-INF/persistence.xml
lib/emp-classes.jar
examples/model/Employee.class
persistence.xml文件的内容应该如清单13-6所示,带有jar文件 包含“lib / emp-classes.jar”的元素,用于引用lib目录中的emp-classes.jar EAR文件。这将导致提供程序添加它在emp-classes.jar中找到的带注释的类 (Employee.class)到持久性单元,并且因为jar是在EAR的lib目录中,所以它会 自动在应用程序类路径上。
清单13-6。 persistence.xml的内容
<persistence-unit name="EmployeeService">
<jta-data-source>java:app/jdbc/EmployeeDS</jta-data-source>
<jar-file>lib/emp-classes.jar</jar-file>
</persistence-unit>