2014-01-29 43 views
1

爲了針對JPA 2.1 API進行編程,我想使用eclipseLink,而不是默認的OpenJPA JPA提供程序。在WAS 8.5 Liberty配置文件中如何實現這一點?Liberty:如何更改默認JPA提供程序?

我試着不使用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 

加法:我知道,如果我在我的web應用程序提供的EclipseLink庫它的工作原理,但我希望將其用作跨多個webapps的共享資源。

回答

1

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

要使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

自從引入了WebSphere Liberty 8.5.5.6 EE7支持後,其中包括JPA 2.1支持。使用JPA 2.1功能(jpa-2.1),我們將默認JPA提供程序更改爲Eclipselink 2.6。

OpenJPA仍然可用,並且是具有jpa-2.0功能的默認JPA提供程序,該功能本身與其他EE7功能向前兼容,以支持那些不想將其支持JPA的應用程序從OpenJPA移出的人並且不需要利用JPA 2.1添加的功能。

請記住,一次只能啓用一個JPA功能,因此將jpa-2.0與EE7功能結合使用需要啓用各個功能,而不是使用EE7便捷功能。

相關問題