我有一个遗留代码,它使用TransactionManager来获取对事务的访问权,以便将同步对象与事务后的事务关联起来。
当我迁移到Spring 3时,我的解决方案的推荐事务管理器是WebSphereUowTransactionManager,实际上,我觉得它只是真正的事务管理器的工厂。但是这个事务管理器总是在方法getTransactionManager()中返回null。
我正在使用EJB的2.1(遗产,请记住?)和CMT。
我的配置是Spring 3.1.2.RELEASE,Hibernate 3.6.8.Final,Websphere 6.1.0.43,我的bean是:
<bean
id="transactionManager"
class="org.springframework.transaction.jta.WebSphereUowTransactionManager" />
<bean
name="auditContextManager"
class="... my class ...">
<property name="transactionManager">
<bean factory-bean="transactionManager" factory-method="getTransactionManager" />
</property>
</bean>
我的hibernate配置是:
<hibernate-configuration>
<session-factory>
<property name="hibernate.jdbc.fetch_size">200</property>
<property name="hibernate.jdbc.use_get_generated_keys">true</property>
<property name="hibernate.bytecode.use_reflection_optimizer">true</property>
<property name="hibernate.connection.datasource">java:comp/env/jdbc/ORDS</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</property>
<property name="hibernate.max_fetch_depth">3</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.CMTTransactionFactory</property>
<property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.WebSphereExtendedJTATransactionLookup</property>
<property name="hibernate.show_sql">false</property>
... too much mappings to show here ...
</session-factory>
</hibernate-configuration>
我的bean auditContextManager总是将transactionManager设置为null。
在我看来,WebSphereUowTransactionManager不会故意公开Transaction Manager。这好吗?
有什么方法可以获得事务管理器吗?由于WebSphereUowTransactionManager实际上不是事务管理器,而只是事务管理器工厂。
答案 0 :(得分:0)
它不是TransactionManager
的工厂,但顾名思义,UOWManager
。它使用Websphere本机API来管理事务(它比普通的JTA api具有更广泛的支持)。
所以不会有TransactionManager
它始终是null
。
基本上,如果你想要transactionamanager,你将不得不进行JNDI查找。
答案 1 :(得分:0)
com.ibm.ws.Transaction.TransactionManagerFactory 是您应该用来获取交易管理器的工厂。