如何在Spring中为JTA事务管理器启用自定义隔离级别

jef*_*her 5 java spring jta

如何通过Spring将allowCustomIsolationLevels设置为true来配置JtaTransactionManager对象,以便可以跨多个应用程序服务器使用Spring配置?

背景:

我有一个当前用完JBossAS的应用程序,我试图让它在WebSphere中运行.我目前唯一的问题是使用正确的设置注入正确的JTA事务管理器.

这是旧的设置

<bean id="transactionManager"
    class="org.springframework.transaction.jta.JtaTransactionManager">
    <property name="transactionManagerName">
        <value>java:/TransactionManager</value>
    </property>
    <property name="allowCustomIsolationLevels" value="true" />
</bean>
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为JBossAS在JNDI位置java:/ TransactionManager中定义了JTA事务管理器 .但是,WebSphere没有相同的JNDI位置.

Spring 2.5.x提供了一种以通用方式获取JTA事务管理器的方法.

<tx:jta-transaction-manager />
Run Code Online (Sandbox Code Playgroud)

这将获取JtaTransactionManager对象并将其定义为具有id transactionManager的bean .

我查看了Spring TX模式,但唯一可用的设置是设置特定的隔离级别,但不仅仅是允许使用自定义级别(如其他地方所定义).如何使用tx:jta-transaction-manager标记设置allowCustomIsolationLevels属性?

Mic*_*les 2

事务管理器和 Websphere:

Websphere 在提供事务管理器时不使用典型的 jndi 标准。Spring 通过提供 org.springframework.transaction.jta.WebSphereUowTransactionManager 来解决这个问题,您可以使用它来查找 websphere 事务管理器。

数据源和隔离级别

您通常无法更改数据源的隔离级别,并且我知道从 websphere 连接到 DB2 数据库时您无法更改它(它被设置为数据源配置上的参数)。allowCustomIsolationLevels 标志允许您为不同请求的隔离级别选择不同的数据源。

请参阅此处此处