21.5. 事务

JCA为资源适配器(resource adapters)指定了几个级别的事务支持。 你可以在ra.xml 文件中指定你的资源适配器支持的事务类型。 它本质上有三个选项:none(例如CICS EPI 连接器),本地事务(例如CICS ECI 连接器),全局事务(例如IMS 连接器)。

<connector>
  ...
  <resourceadapter>
    ...
    <!-- transaction-support>NoTransaction</transaction-support -->
    <!-- transaction-support>LocalTransaction</transaction-support -->
    <transaction-support>XATransaction</transaction-support>
    ...
  <resourceadapter>
  ...
<connector>

对于全局事务,你能使用Spring中常见的事务机制来划分事务, 并以 JtaTransactionManager 为后端(委托给后面的J2EE分布式事务协调程序)。

对于单独CCI ConnectionFactory 上的本地事务, Spring为CCI提供了一个专门的事务管理策略, 类似于JDBC中的 DataSourceTransactionManager, CCI API定义了一个本地事务对象和相应的本地事务划分方法。 Spring的 CciLocalTransactionManager 执行这样的本地CCI事务, 完全依照Spring中常见的 PlatformTransactionManager 抽象。

<bean id="eciConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="eis/cicseci"/>
</bean>

<bean id="eciTransactionManager"
    class="org.springframework.jca.cci.connection.CciLocalTransactionManager">
  <property name="connectionFactory" ref="eciConnectionFactory"/>
</bean>

声明式或编程式的事务策略都能被用于任意的Spring事务划分功能。 这是Spring通用的 PlatformTransactionManager 抽象的结果,它解耦了实际运行策略中的事务划分。 你可以保持现在的事务划分,仅仅需要在 JtaTransactionManagerCciLocalTransactionManager 之间转换即可。

有关Spring的事务机制,请参见 第 9 章 事务管理 一章。