JOTM getTransactionManager(). GetTransaction() возвращает ноль
Я использую spring, oracle и jotm (в tomcat), чтобы использовать коммит 2PC. Ниже представлена конфигурация пружины.
<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>
Вопросы, когда я звоню getTransactionManager().getTransaction()
используя объект JOTM, он возвращает ноль.
Current cur = (Current) ContextHelper.getApplicationContext()
.getBean("txImpl");
try {
log.error("cur : " cur.getTransactionManager().getTransaction());
} catch (SystemException e) {
log.error(e.getMessage(), e);
}
Как я могу исправить эту проблему?
1 ответ
Одним из подходов может быть использование Apache TomEE, который является Tomcat с уже интегрированным TransactionManager. Написать простой фабричный bean-компонент Spring для передачи Spring TransactionManager и UserTransaction.
И то, и другое можно найти в JNDI:
java:comp/TransactionManager
java:comp/UserTransaction
Эта фабрика просто заменит тот из вышеупомянутого конфига:
<bean id="txImpl" class="org.foo.MyTransactionFactoryBean" />
Впрочем, вполне вероятно, что у Spring уже есть фабричный компонент для поиска TransactionManager по этим именам.