2015-04-20 167 views
2

我是EJB項目的新手。我試圖瞭解在我的EJB方法頂部使用@Transactional註釋。我已經搜索了內容,對此沒有明確的解釋。任何人都可以解釋清楚這一點。@Transactional註釋的用途

回答

2

@Transactional來自Spring世界,但Oracle最終將它包含在Java EE 7規範(docs)中。以前,您只能使用@TransactionAttribute註釋註釋EJB,現在類似的功能也可以用於CDI,其中@Transactional。這些註釋的目的是什麼?這是應用服務器的一個信號,即某些類或方法是事務性的,也表明它在某些條件下會如何表現,例如,如果它叫什麼交易等

一個例子裏面:

@Transactional(Transactional.TxType.MANDATORY) 
public void methodThatRequiresTransaction() 
{ 
.. 
} 

上述方法,將拋出一個異常,如果它是不是一個事務中調用。

@Transactional(Transactional.TxType.REQUIRES_NEW) 
public void methodThatWillStartNewTransaction() 
{ 
.. 
} 

攔截器將開始一個新的JTA事務此方法的執行,它不管被稱作運行的事務裏面與否。但是,如果在事務內部調用它,則在執行此方法期間該事務將被暫停。

參見:

+0

是的,我明白了。那麼在這裏調用事務上下文和上下文之間有什麼區別? – Arun

+1

@Arun在編寫方法時,通常無法預測在業務場景中如何使用它。一個客戶可能會開始自己的交易,然後調用您的方法,其他客戶可能根本不使用交易。通過指定適當的Transactional.TxType,您可以根據事務上下文來控制方法的執行。例如,如果您在方法中執行的所有操作都需要在一個事務中,並且您不關心它是否從事務上下文中調用,那麼請使用'@Transactional(Transactional.TxType.REQUIRED)' –

+0

這就是信息。我在這裏理解了Transactional屬性的用法。當我運行拋出我的代碼時,我發現@Transactional註釋在我的EJB類的幾個方法中,它使用來自'weblogic.jws.Transactional'包的類。我的EJB類作爲Webservice公開。我只是混淆了兩者。 – Arun

相關問題