2010-10-12 27 views
4

问题如何启用一个JTA事务管理隔离级别的定制春季

如何通过Spring配置的JtaTransactionManager对象与allowCustomIsolationLevels设置为真正使得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> 

这个工作,因为JBossAS有它的JNDI位置定义java的JTA事务管理器:/事务管理。但是,WebSphere没有相同的JNDI位置。

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

<tx:jta-transaction-manager /> 

这得到了的JtaTransactionManager对象,并将其定义为与ID transactionManager的的bean。

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

+0

我想我可能已经找到了一个可能的解决方案,但还是想看看是否有与<办法TX:JTA事务管理器>。 解决方法似乎是从第一个代码块中简单地删除属性“transactionManagerName”,Spring将尝试通过JNDI自动检测事务管理器。 – plusjeff 2010-10-12 19:04:03

回答

2

事务管理器和Websphere:提供的事务管理器时

的Websphere不使用JNDI的典型标准。 Spring通过提供可用于查找websphere事务管理器的org.springframework.transaction.jta.WebSphereUowTransactionManager来解决此问题。

数据源和隔离级别

你一般不能更改数据源的隔离级别,我知道从WebSphere连接到DB2数据库(它被设置为在数据源配置参数),当你不能改变它。该allowCustomIsolationLevels标志,您可以选择不同的被请求的隔离级别不同的数据源..

herehere