我们使用jboss管理的EntityMangerFactory使用以下spring bean
<jee:jndi-lookup id="entityManagerFactory" jndi-name="persistence-units/myPU"/>
现在在我们的spring bean中,我们使用@PersistenceContext来获取实体管理器,它工作正常。我想要的是,我怎么能告诉spring抓住jbos jta服务提供的事务管理器并在我的dao中使用它?
如果我像下面那样定义txmanager那么spring可以控制使用@Transaction注释管理转换吗?
<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName" value="java:/TransactionManager"/>
<property name="userTransactionName" value="UserTransaction"/>
</bean>
如果是,那么当spring将提交事务并回滚它时?
由于
答案 0 :(得分:17)
几乎 - 您应该将其称为transactionManager
而不是txManager
。您可以覆盖它寻找的名称,但更容易遵守约定。
此外,JtaTransactionManager
通常会自动检测各种JNDI名称,您不需要手动指定它们。
更好的是,不要声明JtaTransactionManager
,只需使用<tx:jta-transaction-manager/>
和Spring should do the right thing。
所以,你需要的只是:
<context:annotation-driven/>
<tx:jta-transaction-manager/>
一旦到位,任何使用@Transactional
注释的bean都将具有由Spring管理的事务边界,例如:在带注释的方法退出(see docs)时提交或回滚事务。