was8.5.0.1jar包冲突报错("*** incompatible with ***")及db2数据源问题:“操作无效:已关闭result set,errorcode=-4470

最近开发环境的was集群出现了问题,运维人员粗暴的铲掉了所有的环境,然后新建了集群。。。

接下来的部署过程中遇到了不少问题,记录下来,方便自己,方便有需要的朋友

1,was版本:8.5.0.1,数据库配置为jndi方式

was8.5.0.1jar包冲突报错("*** incompatible with ***")及db2数据源问题:“操作无效:已关闭result set,errorcode=-4470

问题1:

在集群上部署项目war包后启动过程中,服务器、各节点在was前端页面没有任何提示,但浏览器访问项目路径时,提示”网页找不到“,猜测时was启动时遇到了问题。

在查看了was的日志后(路径:/IBM/WebsPhere/AppServer/profiles/Appserv02/logs/节点名称/SystemOut.log、SystemErr.log),在SystemOut.log日志中看到这样一句:

was8.5.0.1jar包冲突报错("*** incompatible with ***")及db2数据源问题:“操作无效:已关闭result set,errorcode=-4470

这句错误的上方有一句:

was8.5.0.1jar包冲突报错("*** incompatible with ***")及db2数据源问题:“操作无效:已关闭result set,errorcode=-4470

按照这句的路径,在/ffdc下找到对应txt文件:14.09.25.4035850266934009384917.txt,可以看到详细错误信息:

was8.5.0.1jar包冲突报错("*** incompatible with ***")及db2数据源问题:“操作无效:已关闭result set,errorcode=-4470

找到这里,原因出来了,war包中的jar包和was中的jar包冲突导致,项目中使用的QuartzInitializerServlet和javax的Servlet相矛盾

网上有几种解决办法,

1,共享库(https://blog.csdn.net/zhengjl369/article/details/78249276)2,类加载顺序配置,3,其他的未详细了解。

因为项目权限控制比较严,我没有新建共享库等敏感操作和修改db2数据库设置并重启数据库的权限。。。

所以采用了2的解决办法(在做另一个项目时当时也遇到jar包冲突):

a,修改war程序的类加载顺序为图中所示:

was8.5.0.1jar包冲突报错("*** incompatible with ***")及db2数据源问题:“操作无效:已关闭result set,errorcode=-4470

b,修改war的”类装入和更新检测“为图中所示:

注意:应先尝试勾选的组合1为:类装入器顺序:勾选第二个;war类装入器策略:勾选第二个;然后启动war程序,测试访问结果(此种组合在另一项目中解决了问题)

若仍失败,日志中仍显示war包冲突,采用下图组合2方式:即:勾选第一个,勾选第二个(本项目解决问题)

was8.5.0.1jar包冲突报错("*** incompatible with ***")及db2数据源问题:“操作无效:已关闭result set,errorcode=-4470

启动war程序,浏览器测试,系统首页访问成功;

小结:

        java应用启动过程中,有一个固定的类加载过程,如先加载jdk中的jar包,后为class文件,然后为webinfo下lib中的jar包(视项目具体情况),was的类加载顺序可在控制台查看:

was8.5.0.1jar包冲突报错("*** incompatible with ***")及db2数据源问题:“操作无效:已关闭result set,errorcode=-4470

对于冲突的jar包,解决原则就是,分开加载,共享库也好,类加载顺序调整也一样,都是避免相冲突的jar包加载过程中冲突,导致加载失败;

问题2:在修复了war启动报错后,登陆时提示登陆失败。。。

在查看了was的SystemErr.log文件后,发现这样一句错误:

was8.5.0.1jar包冲突报错("*** incompatible with ***")及db2数据源问题:“操作无效:已关闭result set,errorcode=-4470

多方搜索,确定问题为数据源配置问题,涉及到db2的边界事务情景:

解决方法:https://jingyan.baidu.com/article/63acb44ac0fb5061fdc17e5c.html

最终,把was和数据源的坑填好了。。。