1

2PC コミットを使用するために、Spring、Oracle、および jotm (Tomcat 内) を使用しています。以下はスプリング構成です。

<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);
        }

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

1 つの方法として、TransactionManager が既に統合された Tomcat であるApache TomEEを使用することが考えられます。Spring に TransactionManager と UserTransaction を渡す単純な Spring ファクトリー Bean を作成します。

どちらも JNDI から検索できます。

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

そのファクトリは、上記の構成のファクトリを置き換えるだけです。

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

ただし、Spring には、これらの名前を介して TransactionManager を検索するためのファクトリ Bean が既にある可能性が非常に高いです。

于 2012-05-14T20:37:40.263 に答える