Spring JTA Transaction manager вопрос - PullRequest
5 голосов
/ 20 апреля 2011

Мы используем управляемый jboss EntityMangerFactory, используя следующий Spring Bean

<jee:jndi-lookup id="entityManagerFactory" jndi-name="persistence-units/myPU"/>

Теперь в нашем Spring Bean-компоненте мы используем @PersistenceContext, чтобы получить entitymanager, и он работает нормально.То, что я хочу, это то, как я могу сказать Spring, чтобы захватить менеджер транзакций, предоставляемый службой jbos jta, и использовать его в моем dao?

Если я определю txmanager, как показано ниже, тогда can Spring получит контроль над управлением преобразованиемс аннотацией @Transaction?

<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager">
      <property name="transactionManagerName" value="java:/TransactionManager"/>
    <property name="userTransactionName" value="UserTransaction"/>
</bean> 

Если так, то когда весна совершит транзакцию и откатит ее?

Спасибо

1 Ответ

17 голосов
/ 20 апреля 2011

Почти - вы должны назвать это transactionManager, а не txManager.Вы можете переопределить имя, которое оно ищет, но проще придерживаться соглашения.

Кроме того, JtaTransactionManager обычно автоматически определяет различные имена JNDI, вам не нужно указывать их вручную.

Еще лучше, вообще не объявлять JtaTransactionManager, просто используйте <tx:jta-transaction-manager/>, и Spring должен делать правильные вещи .

Итак, все, что вам нужнонужно:

<context:annotation-driven/>
<tx:jta-transaction-manager/> 

Как только это будет сделано, любые бины, помеченные @Transactional, будут иметь границы своих транзакций, управляемые Spring, например, транзакции будут зафиксированы или откатаны при выходе из аннотированного метода ( см.документы ).

...