如何从persistence.xml文件中的jar文件加载类

时间:2014-04-18 14:28:14

标签: hibernate jpa

如何将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异常。

1 个答案:

答案 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>