为了针对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的共享资源使用。
答案 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功能,因此使用带有EE7功能的jpa-2.0需要启用单个功能而不是使用EE7便利功能。