1

为了针对 JPA 2.1 API 进行编程,我想使用 eclipseLink,而不是默认的 OpenJPA JPA 提供程序。如何在 WAS 8.5 Liberty 配置文件中实现这一点?

我尝试不使用 jpa-2.0 功能并设置我的 webapp 引用的共享库,但没有成功。

这是我的 server.xml:

<server description="new server">

<!-- Enable features -->
<featureManager>
    <feature>jsp-2.2</feature>
    <feature>localConnector-1.0</feature>
</featureManager>

<httpEndpoint host="localhost" httpPort="9080" httpsPort="9443"
    id="defaultHttpEndpoint" />

<applicationMonitor updateTrigger="mbean" />

<webApplication id="System" location="System.war" name="System">
    <classloader commonLibraryRef="mysql" />
    <classloader commonLibraryRef="eclipseLink" />
</webApplication>

<library id="mysql" name="mysql-jdbc-driver">
    <fileset dir="C:\Users\jacomac\.m2\repository\mysql\mysql-connector-java\5.1.26" includes="*.jar"/>
</library>

<library id="eclipseLink" name="eclipse-jpa-impl">
    <fileset dir="C:\Users\jacomac\.m2\repository\org\eclipse\persistence\eclipselink\2.5.2-M1" includes="*.jar"/>
    <fileset dir="C:\Users\jacomac\.m2\repository\org\eclipse\persistence\javax.persistence\2.1.0" includes="*.jar"/>
    <fileset dir="C:\Users\jacomac\.m2\repository\org\eclipse\persistence\commonj.sdo\2.1.1" includes="*.jar"/>
</library>
</server>

这是我得到的错误:

java.lang.NoClassDefFoundError: javax/persistence/Persistence

另外:如果我在我的 webapp 中提供 eclipseLink 库,我知道它可以工作,但我想将它用作跨多个 webapps 的共享资源。

4

2 回答 2

1

即使 EclipseLink 支持 JPA 2.1,Liberty 8.5.5.x 似乎也只支持 JPA 2.0。

要让 Liberty 使用 EclipseLink,您需要在共享库中设置“parentLast”类加载器。我的示例使用耳朵,但您也可以为战争设置类加载器。

您应该只包含 eclipselink.jar 并让 Liberty 使用它自己的 javax.persistence 实现。

服务器.xml:

<fileset dir="${shared.resource.dir}/EclipseLinkLibs" id="EclipseLinkFileset" includes="eclipselink.jar"/>
<library filesetRef="EclipseLinkFileset" id="EclipseLinkLib"/>
<enterpriseApplication id="myEAR" location="myEAR.ear" name="myEAR">
    <classloader delegation="parentLast" commonLibraryRef="EclipseLinkLib"/>
</enterpriseApplication>

您还需要在 persistence.xml 中将 EclipseLink 设置为提供者:

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

根据您的 EclipseLink 版本和 JTA 的使用,您可能还必须考虑此错误并使用建议的解决方法: WebSphereTransactionController does not handle JTA on WebSphere 8.5

于 2014-02-18T12:15:03.727 回答
1

从 WebSphere Liberty 8.5.5.6 开始,引入了 EE7 支持,其中包括 JPA 2.1 支持。使用 JPA 2.1 特性 (jpa-2.1),我们将默认的 JPA Provider 更改为 Eclipselink 2.6。

OpenJPA 仍然可用,并且是默认的 JPA 提供程序,具有 jpa-2.0 特性,它本身与其他 EE7 特性向前兼容,以支持那些不想将其启用 JPA 的应用程序从 OpenJPA 移出并且不需要利用 JPA 2.1 添加的功能。

请记住,一次只能启用一项 JPA 功能,因此将 jpa-2.0 与 EE7 功能一起使用需要启用单独的功能,而不是使用 EE7 便利功能。

于 2015-10-22T17:52:51.240 回答