【问题标题】:JOTM getTransactionManager().getTransaction() return nullJOTM getTransactionManager().getTransaction() 返回 null
【发布时间】:2012-05-14 08:20:55
【问题描述】:

我正在使用 spring、oracle 和 jotm(在 tomcat 中)来使用 2PC 提交。 下面是spring的配置。

<aop:config>
    <aop:pointcut id="defaultOperation"
        expression="execution(* jatis.avantrade.foundation.model.engine.*.*(..))" />
    <aop:advisor advice-ref="defaultTrxAdvice" pointcut-ref="defaultOperation" />
</aop:config>

<tx:advice id="defaultTrxAdvice" transaction-manager="trxManager">
    <tx:attributes>
        <tx:method name="check*" read-only="true" />
        <tx:method name="get*" read-only="true" />
        <tx:method name="is*" read-only="true" />
        <tx:method name="load*" read-only="true" />
        <tx:method name="select*" read-only="true" />
        <tx:method name="count*" read-only="true" />
        <tx:method name="search*" read-only="true" />
        <tx:method name="list*" read-only="true" />
        <tx:method name="*" rollback-for="Throwable" />
    </tx:attributes>
</tx:advice>

<bean id="txImpl" class="org.springframework.transaction.jta.JotmFactoryBean" />




<bean id="trxManager"
    class="org.springframework.transaction.jta.JtaTransactionManager">
    <property name="transactionManager" ref="txImpl" />
    <property name="userTransaction" ref="txImpl" />
</bean>

问题是当我使用 JOTM 对象调用 getTransactionManager().getTransaction() 时,它返回 null。

Current cur = (Current) ContextHelper.getApplicationContext()
                    .getBean("txImpl");
            try {
                log.error("cur : " cur.getTransactionManager().getTransaction());
        } catch (SystemException e) {
            log.error(e.getMessage(), e);
        }

我该如何解决这个问题?

【问题讨论】:

    标签: java spring jta xa jotm


    【解决方案1】:

    一种方法可能是使用Apache TomEE,它是已集成 TransactionManager 的 Tomcat。编写一个简单的 Spring factory bean 将 TransactionManager 和 UserTransaction 交给 Spring。

    两者都可以从JNDI中查到:

    • java:comp/TransactionManager
    • java:comp/UserTransaction

    那个工厂只会替换上面配置中的那个:

    <bean id="txImpl" class="org.foo.MyTransactionFactoryBean" />
    

    不过,Spring 很可能已经有一个工厂 bean,用于通过这些名称查找 TransactionManager。

    【讨论】:

      猜你喜欢
      • 2019-06-26
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      相关资源
      最近更新 更多