如果 CICS 区域或事务意外故障,会发生什么情况?
XA 事务协议是一个假定的中止协议。这样,如果在事务处于处理状态时(即,在启动提交进程之前)发生任何故障,那么所有更新将回滚。这包括 CICS 子系统故障或网络中断。不过,对 CICS 异常终止的处理会略有不同。在 JCA 体系结构中,可以将任何故障(包括异常终止)作为 ResourceException 传播回调用 J2EE 组件。如果未捕获此异常,则缺省操作是提交事务(包括 CICS 执行的所有工作),直到异常终止点。如果您希望确保 CICS 事务异常终止触发自动回滚,则可以使用以下两种方法完成此任务:
在 CICS TS V2 和更高版本中,更改了 EXCI 选项表 DFHXCOPT,其中包括新的选项 ABENDBKOUT={NO|YES}。此选项可以指定 CICS 事务异常终止是否应触发恢复的 RRS 单元的自动回滚,并强制执行在 CICS 工作单元中所进行的所有更新的回退。此选项是在 CICS TS V3.1 中作为 APAR PK17426 以及在 CICS TS V2.2 和 V2.3 中作为 APAR PK17427 引入的(此 APAR 只应用于 EXCI,因此仅适用于 z/OS 上的 CICS TG。)
如果 J2EE 应用程序接收 ResourceException,则它可以检测该异常是否表示 CICS 事务异常终止,甚至可以确定特定的 CICS 异常终止代码是什么。检测到这种情况后,它就会在 EJB 会话上下文中将 EJB 的缺省操作标记为 setRollbackOnly,以强制事务管理器自动回滚事务。下面的代码示例说明了该方法:
try {
eciInt.execute(eSpec, jsr, jsr);
} catch (ResourceException re) {
if (re instanceof com.ibm.connector2.cics.CICSTxnAbendException )
{
System.err.println("CICS ABEND detected."+ " Connection Factory="+targetCF.toString());
try {
mySessionCtx.setRollbackOnly();
} catch(IllegalStateException ise) {
ise.printStackTrace();
}
结束语
我们回顾了 webSphere application Server 和 CICS 提供的事务支持,并阐述了如何使用 CICS ECI 资源适配器提供两个环境之间的事务协调。此集成的关键是资源适配器和 J2EE 应用服务器之间的 JCA 事务管理契约。此契约受各种因素的影响,包括 Web 或 EJB 容器的使用、EJB 事务属性、LTC 设置以及带有 WebSphere Application Server 的 XA 或 RRS 的使用。
¥299.00
¥29.00
¥399.00
¥498.00