2012-06-13 62 views
2

因爲我們是Java EE商店,所以我沒有Spring的開發經驗。但是,我們正在研究針對我們在Spring上運行的需求的解決方案,並且應該集成我們現有的Java EE解決方案。如何在Spring和EJB中使用相同的事務?

在閱讀Spring 3.0.5文檔後,我仍然不確定事務如何從Spring傳播到EJB。例如,Spring bean會創建一個事務,將一些東西保存到一個數據庫中,然後將事務移交給我們的一個無狀態會話bean,這會話bean(使用JPA)將其他一些內容保存到另一個數據庫中。所有這些都必須在同一個事務下運行,當控制權返回到Spring bean時,這個事務被執行。

此外,我不清楚部署:Spring將作爲Web應用程序在包含會話bean的EAR中運行嗎?

回答

4

如果您將Spring配置爲使用JTATransactionManager,然後在Spring中調用SessionBean,那麼bean實際上應該選取Spring創建的事務。已經看這裏:http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#transaction-application-server-integration和描述<tx:jta-transaction-manager/>

我其實只是做了它周圍的其他方式(加盟春季EJB事務),所以我不能完全肯定,但你可以很容易地通過設置

@TransactionAttribute(TransactionAttributeType.MANDATORY) 
測試您的SessionBean

,並從春季調用它......如果有不存在的交易,你會最終有一個TransactionRequiredException

+0

而且我可以在JEE容器創建的事務,交給了春天,然後把它交給我的會話bean? – eerriicc

+0

是的,有一個JTATransactionManager spring將參與由EJB啓動的事​​務......(如果我沒有記錯,如果你通過jndi指定你的數據源,它應該甚至在沒有transactionmanager的情況下工作) – Korgen