EJB事務管理服務

2021-08-26 01:18:39 字數 1830 閱讀 1101

最有用的容器服務可能就是事務管理服務,當應用出現失敗或異常時,它保證了資料庫的完整性。你可以簡單地將為乙個pojo 方法申明它的事務屬性。這樣容器就可以在合適的上下文中執行這個方法。最常見的事務是定義在session bean 的方法上,方法中所有的資料庫操作只有在方法正常退出時才會提交,如果方法丟擲未捕獲的異常,事務管理將回滾所有的變更。

乙個事務的屬性控制了事務的使用範圍。比如method-a開始乙個事務然後呼叫bean-2中的method-b。它執行在method-a開始的事務中還是重新執行乙個新的事務?結果要看method-b中的事務屬性。

經過驗證表明當丟擲乙個繼承自rutimeexception的自定義異常時ejb容器會自動回滾該事務。丟擲普通的繼承自exception的應用程式異常容器不回自動回滾該事務。

可以看出transactionattribute既可以為類做注釋,又可以為方法做注釋。@transactionattribute 注釋用作定義乙個需要事務的方法。它可以有以下引數:

1.required:如果客戶端正執行在某個ejb事務中執行,且呼叫了ejb中的方法,則該方法在客戶端的ejb事務中執行。如果客戶端沒有與某個ejb事務相關聯,則容器在執行方法前先啟動乙個新ejb事務。required屬性適合絕大多數ejb事務,建議把它設定成預設的,至少在開發階段。ejb事務屬性是宣告式的,後期也可以很容易的修改。如果沒有指定引數,@transactionattribute 注釋使用required 作為預設引數。

2.requiresnew:方法將在乙個新的事務中執行,如果呼叫的方法已經在乙個事務中,則暫停舊的事務。在呼叫結束後恢復舊的事務。如果客戶端沒有與某個ejb事務相關聯,則容器在執行方法前先啟動乙個新ejb事務。如果確保方法始終在乙個新ejb事務中執行,應該使用ejb事物屬性中的requiresnew屬性。

3.mandatory:如果執行於事務中的客戶呼叫了該方法,方法在客戶的事務中執行。如果客戶沒有關聯到事務中,容器就會丟擲transactionrequiredexception。如果ejb中的方法必須使用客戶端的ejb事務,則應該使用ejb事物屬性中的 mandatory屬性。

4.not_supported:如果方法在乙個事務中被呼叫,容器會在呼叫之前中止該事務。在呼叫結束後,容器會恢復客戶事務。如果客戶沒有關聯到乙個事務中,容器不會在執行入該方法前啟動乙個新的事務。用notsupported 屬性標識不需要事務的方法。因為事務會帶來更高的效能支出,所以這個屬性可以提高效能。

5.supports:如果客戶端執行在某個ejb事務中且呼叫了ejb中的方法,則該方法執行在客戶端的ejb事務中。如果客戶端沒有與某個ejb事務關聯,則容器執行方法前不啟動新的ejb事務。

6.never:如果客戶端執行在某個ejb事務中且呼叫了ejb中的方法,則容器丟擲remoteexception異常。如果客戶端沒有與某個ejb事務關聯,則容器執行方法之前不啟動新的ejb事務。

事務屬性          客戶端事務  容器事務 

required             有         加入 

無         有  

requires_new   有          新建 

無          新建  

supports            有          加入

無         無   

mandatory         有          加入

無          異常   

not_supported 有          無 

無          無   

never                  有          異常 

無          無   

**:

關於EJB事務管理之惑

目前有乙個北美外包專案即將啟動,關於金融行業。採用ejb2開發,各技術環節也都基本確認,唯獨在事務管理方面產生了一些分歧和疑惑,查閱了很多資料不得其解。思來想去還是來發個帖子尋求一下達人的幫助。注 資料庫操作直接採用jdbc程式設計,沒有用到具體的框架。問題有二 一 ejb事務配置是由contain...

Spring事務管理

spring是ssh中的管理員,負責管理其它框架,協調各個部分的工作。今天一起學習一下spring的事務管理。spring的事務管理分為宣告式跟程式設計式。宣告式就是在spring的配置檔案中進行相關配置 程式設計式就是用註解的方式寫到 裡。下面先說宣告式 spring配置檔案中關於事務配置總是由三...

spring事務管理

一 xml配置事務 二 註解的方式配置事務 bean id txmanaager class org.springframework.orm.hibernate3.hibernatetransactionmanager property name sessionfactory ref session...