最近在部署Spring MVC 类型的应用程序到WebSphere7服务器+DB2 V9 的过程中,遇到了XA数据源报错如下:

com.ibm.db2.jcc.am.SqlException: [jcc][t4][10120][10898][3.57.82] 操作无效:已关闭 result set。 ERRORCODE=-4470, SQLSTATE=nullat com.ibm.db2.jcc.am.bd.a(bd.java:660)at com.ibm.db2.jcc.am.bd.a(bd.java:60)at com.ibm.db2.jcc.am.bd.a(bd.java:103)at com.ibm.db2.jcc.am.zl.Db(zl.java:4219)at com.ibm.db2.jcc.am.zl.c(zl.java:314)at com.ibm.db2.jcc.am.zl.next(zl.java:293)at com.ibm.ws.rsadapter.jdbc.WSJdbcResultSet.next(WSJdbcResultSet.java:3120)

经过查看代码,发现代码中没有出现resultset关闭后再引用的现象,同样的代码,部署在tomcat+DB2环境就是好的,代码应该是没有问题的。

于是开始了在度娘上进行搜索,发现竟然几乎搜不到相关案例可以参考,只是有一篇文章提示将 数据源 中的定制属性 resultSetHoldability 的值改为2。可是我看了我配置的 resultSetHoldability 属性值的确为2,但是一点用都没有。

针对 resultSetHoldability  取值有两个:ResultSet.HOLD_CURSORS_OVER_COMMIT:表示修改提交时,不关闭数据库。ResultSet.CLOSE_CURSORS_AT_COMMIT:表示修改提交时ResultSet关闭。我对比了一下我的 WebSphere ,结合错误提示,觉得我的 resultSetHoldability 值应该设置为1才对。

好,那么我们把这个值的属性设置为1,再重新启动系统,等待结果。等了半天,结果却是这样的:

com.ibm.db2.jcc.am.SqlException: [jcc][t4][10434][12579][3.57.82] 操作无效:不允许在 XA 连接上使用 ResultSet 可持有性 HOLD_CURSORS_OVER_COMMIT。 ERRORCODE=-4476, SQLSTATE=nullat com.ibm.db2.jcc.am.bd.a(bd.java:660)at com.ibm.db2.jcc.am.bd.a(bd.java:60)at com.ibm.db2.jcc.am.bd.a(bd.java:120)at com.ibm.db2.jcc.am.jb.c(jb.java:1735)at com.ibm.db2.jcc.am.jb.a(jb.java:2116)at com.ibm.db2.jcc.am.jb.a(jb.java:2097)at com.ibm.db2.jcc.am.jb.prepareStatement(jb.java:1654)at com.ibm.db2.jcc.am.ve.prepareStatement(ve.java:243)at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.pmiPrepareStatement(WSJdbcConnection.java:2503)at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:2746)at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:2696)
......

或是这样的:

com.ibm.db2.jcc.c.SqlException: [ibm][db2][jcc][10341][11670] An SQL OPEN for a held cursor was issued on a XA connectionat com.ibm.db2.jcc.c.fg.x(fg.java:1961)at com.ibm.db2.jcc.c.gg.d(gg.java:2447)at com.ibm.db2.jcc.c.gg.V(gg.java:424)at com.ibm.db2.jcc.c.gg.executeQuery(gg.java:407)at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.pmiExecuteQuery(WSJdbcPreparedStatement.java:1102)at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeQuery(WSJdbcPreparedStatement.java:723)
......

这下傻了眼了,还是不行,于是继续度娘,但是这次什么信息都找不到了。

内事问度娘,外事问谷歌,于是我又投入了谷歌的怀抱。

在谷歌上搜寻了许久,发现类似的问题很多,经过一天的筛选,终于找到了我想要的东西。下面是在IBM的官网上发现的:

http://www-01.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/tejb_jpatroubleshoot.html?lang=zh

对关闭游标问题进行故障诊断。
以下是日志 org.apache.openjpa.persistence.PersistenceException 中的 DB2® 异常:
[ibm][db2][jcc][10120][10898] Invalid operation: result set is closed can be a WebSphere Application Server configuration problem.
缺省情况下,应用程序服务器将 resultSetHoldability 定制属性值配置为 2 (CLOSE_CURSORS_AT_COMMIT)。此属性将导致 DB2 在事务边界关闭其结果集/游标。尽管 DB2 的缺省 resultSetHoldability 值为 1 (HOLD_CURSORS_OVER_COMMIT),但应用程序服务器将缺省值保留为 2 以避免中断与前发行版应用程序服务器的兼容性。可更改缺省值。
Attention: 如果此数据源是 XA 数据源,请对此数据源定义新定制属性,其中 property_name = downgradeHoldCursorsUnderXa,boolean value = true。
避免故障 避免故障: 在 V8.0 中,如果使用 DB2 XA 数据源,那么需要进行下列配置以解决结果集已关闭问题:
使用 DB2 V9.1 FP4(对于 APAR IZ18072)或更高版本。
添加定制属性 name="downgradeHoldCursorsUnderXa"、value="true" 和 type="java.lang.Boolean"
添加定制属性 name="resultSetHoldability"、value="1" 和 type="java.lang.Integer"

原来,要是用 XA事务数据源,还需要再配置一个 downgradeHoldCursorsUnderXa 的定制属性。

果不其然,在数据源中增加了这个属性后,一切都OK了。

WebSphere7 XA 数据源配置问题相关推荐

  1. Weblogic Xa数据源和非Xa数据源的选择

    背景: 在项目上,不管是ADF应用,BPM应用,或者是OSB.SOA接口,数据源和出站连接池的建立必然少不了,而数据源的类型就有Xa数据源和非Xa数据源,那我们如何选择呢,选择不当会造成什么后果呢,下 ...

  2. Guns5.1版本多数据源配置问题

    Guns5.1与Guns4.2之间多数据源这块儿有一些差别,详情见下图: 1.application.yml中开启设置的多数据源配置 2.GunsApplication.java启动类中添加排除Myb ...

  3. WIN7 数据源配置问题(32位64位)

    WIN7-32位 配置数据源地址: C:\Windows\System32\odbcad32.exe WIN7-64位 配置数据源地址: C:\Windows\SysWOW64\ odbcad32.e ...

  4. 【SpringBoot2.0】基于Atomikos的多数据源分布式事务(XA)解决方案

    最近工作中在同一项目中用到了多数据源,虽然项目本身对多数据源的事务没有要求,甚至可以不使用事务.但是本着精益求精的原则,加上各种资料的查阅,终于实现了多数据源的XA(分布式事务) 项目框架 sprin ...

  5. xa 全局锁_分布式事务如何实现?深入解读 Seata 的 XA 模式

    原标题:分布式事务如何实现?深入解读 Seata 的 XA 模式 作者简介:煊檍,GitHub ID:sharajava,阿里巴巴中件间 GTS 研发团队负责人,SEATA 开源项目发起人,曾在 Or ...

  6. 6 张图带你彻底搞懂分布式事务 XA 模式

    作者 | 朱晋君 来源 | 阿里巴巴云原生公众号 XA 协议是由 X/Open 组织提出的分布式事务处理规范,主要定义了事务管理器 TM 和局部资源管理器 RM 之间的接口.目前主流的数据库,比如 o ...

  7. springboot中配置文件application.properties的配置详情,数据源配置

    pring Boot使用了一个全局的配置文件application.properties,放在src/main/resources目录下或者类路径的/config下.Sping Boot的全局配置文件 ...

  8. websphereJDBC提供驱动程序配置问题,导致报错:Illegal attempt to enlist multiple 1PC XAResources

    业务系统界面报错: Illegal attempt to enlist multiple 1PC XAResources 解决: websphereJDBC提供驱动程序,配置有问题. webspher ...

  9. MySQL中基于XA实现的分布式事务

    文章目录 一.前言 二.XA基础 2.1 XA基础知识 2.1.1 DTP是什么? 2.1.2 DTP的结构:AP TM RM(重点001) 2.1.3 DTP的重要概念 2.2 XA事务:基于两阶段 ...

最新文章

  1. InnoDB体系结构
  2. cmake的使用--目标的编译附源码
  3. g menu i meun_长沙话读“这里”,到底是阁(gó)里还是该(gái)里
  4. pymc3使用_使用PyMC3了解飞机事故趋势
  5. android studio真机调试失败,【Android】Android Studio真机调试的问题统整
  6. 国产达梦数据库的结合Enterprise Library的应用开发
  7. PDF文件保密和去除密码
  8. 阿拉伯数字转换成汉语数字
  9. 构造非支配解集(Python)
  10. ssm启动不报错_ssm整合 启动表现层报错。。。
  11. 多边形裁剪图片与自定义 Gizmo !Cocos Creator Gizmo!
  12. IOS下载旧版本应用
  13. 安徽大学计算机学院张兴义教授,CCF YOCSEF合肥与CCF合肥分部联合成功举办 “2018CCF合肥为新研究生导航”活动...
  14. WDM和WDF usb驱动不同点
  15. 从零开始学习STM32(一)—— 新建工程模板
  16. 英国认定人脸识别公司Clearview AI侵犯隐私:罚款750万英镑,删除英国居民信息...
  17. 基于阿里云的超级性能测试 亿级企业压力测试神器JMeter4.X实战 抗压神器JMeter课程
  18. phpStorm MarkDown插件下载
  19. 单片机和plc的区别
  20. 一文彻底掌握用户态协议栈,一看就懂的

热门文章

  1. php图形验证码验证,php图片验证码代码
  2. 建模新手入门,来看安装ZBrush对电脑有什么特别的要求?
  3. mybatis与spring整合详解
  4. 【懒人福利】自动记录操作步骤
  5. tp3.2.3 图片打水印
  6. python绘制笛卡尔心形线方程_canvas绘制爱心的几种方法
  7. SMMS:一个不错的免费图床
  8. BuuCTF_crypto(2021.10.8新-->旧)
  9. 51单片机8*8点阵,按键控制数字加拼音上下左右移动
  10. 飞机气动导数的插值计算_Matlab