首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Liberty:如何更改默认的JPA提供程序?

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

Stack Overflow用户
提问于 2014-01-29 18:11:48
回答 2查看 3.4K关注 0票数 1

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

我试着不使用jpa-2.0特性,并设置一个被我的webapp引用的共享库,但没有成功。

这是我的server.xml:

代码语言:javascript
复制
<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>

这是我得到的错误:

代码语言:javascript
复制
java.lang.NoClassDefFoundError: javax/persistence/Persistence

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

EN

回答 2

Stack Overflow用户

发布于 2014-02-18 20:15:04

Liberty 8.5.5.x似乎只支持JPA2.0,即使EclipseLink支持JPA2.1。

要让Liberty在共享库中使用EclipseLink,您需要设置一个"parentLast“类加载器。我的例子使用了一个ear,但是您也可以为war设置一个类加载器。

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

server.xml:

代码语言:javascript
复制
<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设置为提供程序:

代码语言:javascript
复制
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

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

票数 1
EN

Stack Overflow用户

发布于 2015-10-23 01:52:51

从JPA 8.5.5.6开始,引入了EE7支持,其中包括JPA2.1支持。使用JPA 2.1特性( JPA -2.1),我们将默认的JPA提供程序更改为Eclipselink 2.6。

OpenJPA仍然可用,并且是默认的JPA提供者,具有JPA2.0特性,该特性本身与其他EE7特性向前兼容,以支持那些不想将其支持JPA2.0的应用程序移出OpenJPA的人,并且不需要利用JPA2.1添加的功能。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21427879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档