2011-04-19 121 views
5

我們正在使用JBoss管理使用EntityMangerFactory春天豆現在春天JTA事務管理問題

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

在我們的Spring bean我們使用@PersistenceContext獲取的EntityManager,它工作正常。我想要的是,我如何告訴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會提交事務並回滾它?

感謝

回答

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)。

+1

謝謝skaffman。這工作正常。順便說一句,我不明白配置。 Spring如何找到服務器提供的交易? – user509755 2011-04-20 00:43:38

+2

@ user509755:通過在可能位置的已知列表中查找它。 – skaffman 2011-04-20 07:35:07