我正在将一个旧的IBM Process Server应用程序移植到IBM WebSphere Liberty。它包含大量基于服务数据对象( Service Data Objects,SDO)的代码。我有一些很好的工作代码,使用JDK8作为独立的Java运行。我使用的是eclipselink 2.7.7,特别是2个jar文件;
eclipselink.jar
commonj.sdo_2.1.1v20111051852.jar我已经将这些代码构建到一个Servlet中来处理SOAP请求,并将它和其他代码一起打包到一个EAR文件中,该文件是我在IBMServicyLiberty20下部署的,但它不起作用。似乎与自由版的EclipseLink有冲突。
如果我将代码部署为WAR文件,并添加一个类加载器"PARENT_LAST",代码就可以正常工作。
但是,如果我尝试在EAR文件中部署代码,并为ear文件设置类加载器"PARENT_LAST“,我会得到这个错误;
[ERROR ] CWWKZ0106E: Could not start web application S21.
[ERROR ] CWWKZ0002E: An exception occurred while starting the application S21. The exception message was: com.ibm.ws.container.service.state.StateChangeException: java.lang.LinkageError: loader constraint violation in interface itable initialization: when resolving method "org.eclipse.persistence.jpa.PersistenceProvider.getProviderUtil()Ljavax/persistence/spi/ProviderUtil;" the class loader (instance of com/ibm/ws/classloading/internal/ParentLastClassLoader) of the current class, org/eclipse/persistence/jpa/PersistenceProvider, and the class loader (instance of org/eclipse/osgi/internal/loader/EquinoxClassLoader) for interface javax/persistence/spi/PersistenceProvider have different Class objects for the type javax/persistence/spi/ProviderUtil used in the signature有人知道我是否可以用我的2.7.7版本替换EclipseLink的IBM Liberty实现吗?我的应用程序也使用JPA,它在Liberty下工作得很好,所以我不想破坏它。
感谢任何帮助/指导...这是一个非常漫长的星期六。
PS:我试着仅使用SDO库(commonj.sdo_2.1.1v20111051852.jar)运行java代码,并依赖Eclipselink运行时jars来提供Eclipselink功能,我得到了以下错误,这就是为什么我随后添加了上面提到的Eclipselink/ SDO的“匹配对”;
Caught Exception : org.eclipse.persistence.internal.security.PrivilegedAccessHelper.getSystemPropertyBoolean(Ljava/lang/String;Z)Z
java.lang.NoSuchMethodError: org.eclipse.persistence.internal.security.PrivilegedAccessHelper.getSystemPropertyBoolean(Ljava/lang/String;Z)Z
at org.eclipse.persistence.sdo.helper.SDOHelperContext.<init>(SDOHelperContext.java:93)
at org.eclipse.persistence.sdo.helper.SDOHelperContext$DefaultHelperContextResolver.getHelperContext(SDOHelperContext.java:1432)
at org.eclipse.persistence.sdo.helper.SDOHelperContext.getHelperContext(SDOHelperContext.java:492)
at org.eclipse.persistence.sdo.helper.SDOHelperContext.getHelperContext(SDOHelperContext.java:471)
at org.eclipse.persistence.sdo.helper.SDOHelperContext.getHelperContext(SDOHelperContext.java:456)
at org.eclipse.persistence.sdo.helper.delegates.SDOXMLHelperDelegator.getXMLHelperDelegate(SDOXMLHelperDelegator.java:178)
at org.eclipse.persistence.sdo.helper.delegates.SDOXMLHelperDelegator.load(SDOXMLHelperDelegator.java:78)
at com.ebs.solas2021.port.adapter.ui.SOAPRequestHandler.main(SOAPRequestHandler.java:237)发布于 2021-02-21 21:28:00
当你在新的一天中重新阅读文档时,你会发现令人惊讶的东西。事实证明,可以在Liberty上安装JPA2.2容器,同时提供自己的EclipseLink实现。就像一种护身符。
文档记录在这里:https://openliberty.io/blog/2018/06/29/full_java_ee_8_liberty_18002.html
https://stackoverflow.com/questions/66296562
复制相似问题