关于connection holder is null的个人解决方案实践

由于公司需要标准化项目,规范jdk,tomcat等version,

版本规范:6.x --> 7.0.90
版本规范:jdk1.6.x -- >jdk1.8.0_181
版本规范:spring3.x -- >spring-4.3.7

项目中使用了hibernate3.x,和规范后的jdk1.8不兼容,导致需要升级hibernate的版本,目前升级版本至

org.hibernate
    hibernate-core
4.3.11.Final

升级hibernate后导致了一系列的异常,其中connection holder is null这个问题为提交事务的时候抛出来的

从网上得知的解决方案:

https://blog.csdn.net/wo8553456/article/details/40396401
 

插入后跟进源代码发现配置已生效,然而hibernate提交事务的时候一样会报错(项目中使用的是声明式注解事务)

找了好久没搞定求助架构大佬后大佬指出,hibernate3中的配置connection.release_mode在hibernate4中会导致连接直接被关闭
源代码跟进见 https://blog.csdn.net/ayanami001/article/details/48181243

跟进源代码见下:

关于connection holder is null的个人解决方案实践_第1张图片   进入下面这个 this.getLogicalConnection().releaseConnection()后.连接就会被释放掉(提交事务逻辑里面),导致最终提交事务事连接为null抛出 connection holder is null 异常!

   最终在hibernate的配置中去除了after_statement后,事务提交正常!

ps:其他hibernate异常或者tomcat改造异常见下面连接

本次改造升级的问题点

你可能感兴趣的:(java)