【发布时间】:2019-02-14 14:41:33
【问题描述】:
我正在尝试在带有 WAS9.0 的独立程序中使用 Spring JtaTransactionManager (WebSphereUowTransactionManager)。使用 Jndi 查找检索 JndiTemplate 并将其设置为 spring JtaTransactionManager。 XA 投诉的 dataSource 和 JMS 资源也从 Jndi 查找中检索到服务器。我在这里面临的问题是在事务块中执行的操作会立即提交。看起来资源不是由事务管理器管理的。客户端程序在类路径中包含所有 WAS 运行时库
如果有人可以在这里提供帮助并指导我们如何使 WebSphereUowTransactionManager 在容器外部工作,不胜感激。
applicationContext_Jta.xml:
<bean id="jndiTemplateLookUp" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.provider.url">iiop://ip:port</prop>
<prop key="java.naming.factory.initial">com.ibm.websphere.naming.WsnInitialContextFactory</prop>
</props>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate" ref="jndiTemplateLookUp"/>
<property name="jndiName" value="jdbc/WSDataSource"/>
</bean>
Main Code:
DefaultTransactionDefinition transactionDefinition = new DefaultTransactionDefinition();
ApplicationContext jtaApplicationCtx = new ClassPathXmlApplicationContext("applicationContext_Jta.xml");
JndiTemplate jndiTemplate = (JndiTemplate) jtaApplicationCtx.getBean("jndiTemplateLookUp");
DataSource datasource = (DataSource) jtaApplicationCtx.getBean("dataSource");
JtaTransactionManager transactionManager = new WebSphereUowTransactionManager();
transactionManager.setJndiTemplate(jndiTemplate);
transactionManager.afterPropertiesSet();
((CallbackPreferringPlatformTransactionManager) transactionManager).execute(transactionDefinition,
new TransactionCallback<Integer>() {
@Override
public Integer doInTransaction(TransactionStatus transactionStatus) {
//DB SQL Execute
//JMS Send
return 0;
}
});
【问题讨论】: