Spring JTA事务管理器问题

use*_*755 5 jboss spring jta jpa-2.0

我们使用jboss管理的EntityMangerFactory使用以下spring bean

<jee:jndi-lookup id="entityManagerFactory" jndi-name="persistence-units/myPU"/>
Run Code Online (Sandbox Code Playgroud)

现在在我们的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> 
Run Code Online (Sandbox Code Playgroud)

如果是这样,那么当spring将提交事务并回滚它时?

谢谢

ska*_*man 17

差不多 - 你应该叫它transactionManager而不是txManager.您可以覆盖它查找的名称,但更容易遵守约定.

此外,JtaTransactionManager通常会自动检测各种JNDI名称,您不需要手动指定它们.

更好的是,不要声明JtaTransactionManager,只是使用<tx:jta-transaction-manager/>,而Spring应该做正确的事情.

所以,你应该需要的是:

<context:annotation-driven/>
<tx:jta-transaction-manager/> 
Run Code Online (Sandbox Code Playgroud)

一旦到位,任何带有注释的bean @Transactional将具有由Spring管理的事务边界,例如,当注释方法退出时提交或回滚事务(参见docs).

  • @ user509755:通过在已知的可能位置列表中查找它. (2认同)