2011-06-21 37 views
6

在我的公司中,不鼓勵使用Spring框架,而是推廣Java EE 6。但最近我讀了Springs @Transactional註釋Using @Transactional,並認爲這可能對我們的代碼非常有用。有沒有類似Java EE 6中可用的Springs @Transactional註解?

據我所知,用@Transactional註解的方法將重用已存在的事務,或者在調用該方法時沒有活動事務存在時打開新的事務。 Java EE 6中是否有類似的東西(例如類似的註釋)?

回答

9

EJB組件在Java EE的這種事務控制。您可以在EJB設置方法的交易是必需的,RequiresNew,支持,等等。你幾乎總是使用無狀態會話Bean(@Stateless)爲您介紹的要求:

> @TransactionAttribute(value=[MANDATORY, 
> REQUIRED, REQUIRES_NEW, SUPPORTS, 
> NOT_SUPPORTED, NEVER] 

要求,默認,如果有一個正在運行,將重新使用現有的txn,否則將創建一個新的txn。 Java EE 6隨EJB 3.1一起提供,因此您甚至不需要業務接口,並且可以根據需要將這些EJB打包在WAR文件中。因此,您正在使用EJB,但對開發人員而言,如果您只需要JTA支持,則他們更容易集成。

這是一個用於EJB註釋的useful cheat sheet,如果你有Google的話,還有很多指南。

0

EJB的(無狀態和有狀態)是默認的事務性組件,默認的事務屬性是必需的,類似於彈簧..

3

在Java EE 6中,可以使用TransactionAttribute批註對EJB bean類本身或EJB中的單個業務方法(包括會話EJB和MDB)進行批註。只有使用容器管理的事務才能應用此功能。用於註解

有效值在TransactionAttributeType註釋中定義:

  • NOT_SUPPORTED
  • SUPPORTS
  • REQUIRED
  • REQUIRES_NEW
  • 強制性
  • NEVER

這些值的語義並沒有從早期版本的EJB規範中改變。這些註釋自Java EE 5起可用,當在EJB 3.0中引入註釋時。請注意,某些值在某些情況下不適用 - 例如,MDB不能用除REQUIRED和NOT_SUPPORTED之外的任何其他註釋;任何其他值對於MDB的容器管理交易都是沒有意義的(畢竟,在這種情況下,容器必須創建一個事務或不可能)。

如果您想快速瀏覽一下EJB 3.0和Spring模型之間的事務屬性比較,我會很樂意地指出你在Java Transaction Design Strategies的方向。免責聲明:我只是本書的滿意讀者。