1:应用使用的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
解决:通过分析和代码跟踪后发现jar的加载顺序出现问题,冲突的jar包为
geronimo-jpa_2.0_spec-1.1.jar或者hibernate-jpa-2.0-api.jar
这个根据应用使用的具体jpa jar为例。
只需要让weblogic在运行加载jar的时候优先加载web程序使用的jar包即可。
上传web程序冲突的jarr包到指定目录下,然后进入webLogic的安装目录如下:
/home/emic/weblogic103/wlserver_10.3/common/bin
找到commEnv.sh,然后找到weblogic_classpath的地方将你冲突jar的路径添加上重启weblogic即可。如果是weblogic集群环境如下图:
需要在节点的“服务器启动”项里“类路径”里添加上冲突web应用的jar包的地址重启集群即可。
注意!!!!!!!!!
这种方式有时候在单机环境下是没法解决掉jar包冲突的,此时可以找到weblogic的安装目录,比如
/home/wls1036/modules 下面的 javax.persistence_1.0.0.0_1-0-2.jar 将此jar包删除或者重命名,然后重新启动weblogic。
至此web应用和weblogic本身的jar包冲突问题解决。