【问题标题】:Standalone Spring JtaTransactionManager not working with WAS独立 Spring JtaTransactionManager 不与 WAS 一起使用
【发布时间】: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;
 }
 });

【问题讨论】:

    标签: spring jta


    【解决方案1】:

    我在使用 Liberty Websphere 的 TransactionManager 时也遇到了问题。我最终手动强制 DataSourceTransactionManager,如下所示:

    @Bean
    public PlatformTransactionManager platformTransactionManager(final DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
    

    在我看来,这个功能要么与较新版本的 websphere 不兼容,要么就是完全损坏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      相关资源
      最近更新 更多