Liberty:如何更改默认的JPA提供程序?

时间:2014-01-29 10:11:48

标签: websphere-liberty

为了针对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的共享资源使用。

2 个答案:

答案 0 :(得分:1)

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

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

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

server.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>

您还需要将EclipseLink设置为persistence.xml中的提供程序:

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

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

答案 1 :(得分:1)

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

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

请记住,一次只能启用一个JPA功能,因此使用带有EE​​7功能的jpa-2.0需要启用单个功能而不是使用EE7便利功能。

相关问题