微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Eclipselink 2.7.7 作为 OpenLiberty 的外部 JPA

如何解决使用 Eclipselink 2.7.7 作为 OpenLiberty 的外部 JPA

我已经在这方面工作了几天,可以使用一些帮助。我有一个使用 EclipseLink 2.7.7 和 SDO 功能的应用程序。我将它作为一个独立的 Java 应用程序运行,作为测试,使用作为 EclipseLink 产品的一部分下载的以下 jar;

eclipselink.jar
commonj.sdo_2.1.1_v201112051852.jar

我需要使用会话 Bean 和实体在 OpenLiberty 下运行此代码。如果我只依赖 Liberty 中的内置 JPA2.2,则代码在 OpenLiberty 下不起作用。

我尝试按照以下说明替换 JPA:https://www.ibm.com/support/knowledgecenter/en/SS7K4U_liberty/com.ibm.websphere.wlp.zseries.doc/ae/twlp_dep_jpa.html

但是,说明列出了我的 EclipseLink 下载中不存在的一堆 jar 文件。例如;

<file name="${server.config.dir}/jpa/org.eclipse.persistence.asm.jar/>
<file name="${server.config.dir}/jpa/org.eclipse.persistence.core.jar"/>
<file name="${server.config.dir}/jpa/org.eclipse.persistence.jpa.jar"/>
<file name="${server.config.dir}/jpa/org.eclipse.persistence.antlr.jar"/>
<file name="${server.config.dir}/jpa/org.eclipse.persistence.jpa.jpql.jar"/>
<file name="${server.config.dir}/jpa/org.eclipse.persistence.jpa.modelgen.jar"/>

此外,我尝试将 2 个 jar 文件与我的代码捆绑在同一个耳朵中,然后进行部署。但是,无论我做什么,每当我部署到 Liberty 时,“JPA2.2”功能都会添加到服务器中,并且我的代码会失败。

有谁知道如何让 Liberty 在我部署时停止添加“JPA2.2”功能

解决方法

在 Liberty 上将 EclipseLink 部署为第三方

不幸的是,正如您所发现的,Liberty 为支持 JPA 2.2 提供的 EclipseLink 不包含 EclipseLink SDO 功能。我们在 WebSphere 中提供 EclipseLink 作为 Java EE 组件 JPA 的持久性提供者。这意味着我们不会发布(然后支持)Java 持久性规范(DBWS、SDO、MOXY(这是一个 JAXB 实现))未强制要求的 EclipseLink 的其他部分。

如您所见,如果您想在 Liberty 中使用 SDO 功能,您需要将其作为共享库提供。

我想指出 Liberty 的两个特性:

  1. jpa-2.2:此功能为您的应用程序提供两件事:JPA API 包(来自 Java EE 规范的 javax.persistence.* 包)和实现这些 API 包的持久性提供程序(EclipseLink)

  2. jpaContainer-2.2:此功能为您的应用程序提供了一件事:只是 JPA API 包(来自 Java EE 规范的 javax.persistence.* 包)

如果您计划在 Liberty 中配置自己的 JPA 2.2 支持的第三方持久性提供程序,建议您使用 jpaContainer-2.2。这将为您提供您的提供者将实施的 JPA API 包。这也意味着您不应在共享库中提供自己的 javax.persistence.* API 包,否则可能会发生冲突。

我注意到您正试图在共享库中使用 eclipselink.jar。我强烈建议不要使用那个包。这是一个 JSE 引导包,包含所有 EclipseLink 功能和 javax.persistence 包。它是作为 JSE 中开发环境的便利包构建的,不适用于生产。由于它包含 javax.persistence.* 包,因此当它与 WebSphere 提供的 JPA 特性(jpa-2.2jpaContainer-2.2

的 JPA API 包发生冲突时,可能会导致类加载问题

这也是知识中心指令列出单独的包(asm、antlr、core、jpa、jpql、modelgen)的原因。这些是 WebSphere 提供的支持 JPA 的包,您可以在 Maven Central (https://mvnrepository.com/artifact/org.eclipse.persistence) 上找到这些包的版本。如果您想使用 SDO,我建议您下载 https://mvnrepository.com/artifact/org.eclipse.persistence/org.eclipse.persistence.sdo 和它需要的任何其他依赖项(例如 org.eclipse.persistence.coreorg.eclipse.persistence.moxy

Liberty 功能更新问题

如果您在 Eclipse 中部署 Liberty(安装了 IBM Liberty Developer Tools)并且遇到自动功能检测问题,您可以从“首选项”部分将其关闭:

Window > Preferences > Server > Liberty Server
Uncheck `Enable automatic feature detection` 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。