应用使用的jpa jar包和webLogic自身使用的jar包冲突。
分析:在应用本身使用jar包和weblogic自身使用jar部署冲突后会报一下错误:
java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode
或者
javax.validation.ValidationException: HV000041: Call to TraversableResolver.isReachable() threw an exception
解决办法如下:
由于wls /Oracle/Middleware/modules 目录下存在两个版本的 javax.persistence 包:
----------------------------------------------
javax.persistence_1.0.0.0_1-0-2.jar
javax.persistence_1.1.0.0_2-0.jar
----------------------------------------------
经检测 10.3.6 版本的wlc默认配置加载的 javax.persistence_1.0.0.0_1-0-2.jar, 此jar包版本跟项目中用到的 hibernate-jpa-2.0-api-1.0.0.Final.jar 版本不兼容 ,
而 javax.persistence_1.1.0.0_2-0.jar 与 项目中的hibernate-jpa-2.0-api-1.0.0.Final.jar 版本是兼容的, 因此只需要将 javax.persistence_1.0.0.0_1-0-2.jar 替换成 javax.persistence_1.1.0.0_2-0.jar 即可.
三、具体操作:
1.停止wls
2.备份原来的jar包: mv javax.persistence_1.0.0.0_1-0-2.jar javax.persistence_1.0.0.0_1-0-2.jar.bak20120925
3.拷贝兼容的jar包: cp javax.persistence_1.1.0.0_2-0.jar javax.persistence_1.0.0.0_1-0-2.jar
4.启动wls即可!