ejb的事務與實體bean

2021-04-01 15:20:54 字數 2012 閱讀 1583

應該使用宣告方式控制事務還是使用程式設計方式控制事務?

事務與實體bean(事務型別bean、container)bean/container

首先不要誤解事務和實體bean的關係。

ejb元件有兩種劃分事務邊界的方法-------程式設計型和宣告型。

程式設計型事務

大多數現有的系統都是用程式設計型來劃分事務邊界。當使用了這種方法時,您必須將事務的邏輯操作編入您的應

用程式**中。也就是說,您必須負責發布乙個事務開始的宣告和乙個提交或異常結束的宣告。例如:乙個ejb的

銀行應用系統程式必須要有乙個ejb元件來充當銀行出納員,該出納員bean將實現銀行帳號的轉帳過程。按照程式設計

型事務,出納員bean負責發布乙個事務開始的宣告,執行資金的轉帳,然後發布乙個提交或異常結束的宣告。這是

一種傳統的事務執行模式(精通ejb p236)

宣告型事務

宣告型事務允許元件自動的參與到事務中去。總而言之,您的ejb元件不會發布事務開始、提交或異常結束的宣告

而是由ejb容器來為您作這些事情。

讓我們繼續以銀行出納員為例,並假設客戶程式呼叫了出納員bean,將實現銀行帳號的轉帳過程。按照宣告型

事務,ejb容器會擷取該請求並代替您的bean元件來觸發乙個事務,也就是說,是容器向底層事務系統發布了事務

開始的宣告,並觸發事務。然後,容器就執行事務範圍內的操作來處理您的ejb元件的呼叫。您的bean元件可以作

任何想做的事情,例如,執行邏輯操作,寫資料庫。傳送非同步訊息。呼叫其他企業級元件等。如果發生了問題,bean

元件會通知容器:事務必須異常結束。當bean元件完成操作後,會

當您在乙個事務中呼叫實體bean時,首先發生的動作是實體bean需要通過ejbload()方法匯入資料庫資料,這個方

法需要在資料庫上鎖,並且保證實體bean緩衝區是完整的,然後商務方法被呼叫。當事務被提交後,實體bean的

ejbstore()方法被呼叫,這個方法將更新寫入到資料庫,並且執行解鎖。這樣,乙個事務應該包括ejbload()、商

務方法以及ejbstore(),所以其中的任何乙個操作失敗,它們將全部失敗。

如果我們使用bean管理的事務,我們應該在bean中編寫**執行begin()和commit()方法(可能在jdbc**附近)

我們應該在ejbload()方法中開始乙個事務,並且在ejbstore()方法中提交乙個事務。但是,問題在於您並不呼叫

您的ejbcreate()方法和ejbstore()方法,而是由容器來呼叫。bean不能保證這些方法以這個順序執行,所以,

如果您乙個ejbload()開始乙個事務,那麼有可能這個事務永遠乙個不會結束。

正因為如此,bean管理的事務對於實體bean是不合適的。實體bean必須使用宣告方式的事務。因為乙個會話bean

可以匯入資料庫資料,並且對這些資料進行操作,然後將這些資料儲存,這些全部都發生在乙個方法呼叫中,這樣

就可以對事務進行直接控制,所以會話bean和訊息驅動bean可以使用bean管理的事務。

我們把這個討論再延伸一步,即實體bean並不是針對每乙個方法呼叫都採取匯入和儲存操作。相反,它們針對每一

個事務來匯入和儲存資料。如果您的實體bean不能很好地執行,那麼可能就是因為再每乙個get/set方法中都會有

資料庫讀寫操作。解決方法是保證事務按順序開始和結束,這其中可能包括很多實體bean方法呼叫。通過使用事務

的屬性來適當地控制事務的生命週期,您可以控制實體bean的資料庫讀寫時機。

程式設計方式控制的事務好處在於bean可以完全控制事務邊界。例如,您可以在乙個bean方法中使用程式設計方式控制的

事務來執行一系列的小型事務。相比之下,如果以宣告方式或是客戶端初始化方式控制事務的話,您的bean只能

要麼執行在乙個事務中,要麼不執行在乙個事務中。

宣告方式控制的事務好處在於他們比較簡單,您不必在bean中編寫事務控制邏輯,這樣可以節省編碼時間,而且

不必改動原始碼就可以對事務進行優化。由於事務是自動地開始和結束的,這樣也可以防止客戶端程式誤用bean。

如果您是乙個bean提供商,這將完全小區大量的令人頭疼的問題。

超快速編寫ejb3 0的實體bean

相信很多同學 特別是新手朋友 編寫實體bean的時候感到繁瑣 特別是是表的元素比較多的時候,要寫比較多的對映的屬性。雖然在eclipse中有alt s,然後按 generate getters and setters可以快速的寫這些屬性的get和set的方法,但是ejb3.0的各種各樣注釋 特別涉及...

現在EJB3實體Bean是純粹的POJO

現在ejb3實體bean是純粹的pojo.實際上表達了和hibernate持久化實體物件同樣的概念。他們的對映都通過jdk5.0注釋來定義 ejb3規範中的xml描述語法至今還沒有定下來 注釋分為兩個部分,分別是邏輯對映注釋和物理對映注釋,通過邏輯對映注釋可用描述物件模型,類之間的關係等等,而物理對...

EJB3 0裡實體bean的繼承對映策略

在ejb3.0 裡的實體bean繼承體系有三種繼承對映策略,分別是 1,inheritancetype.single table,即整個繼承體系只對映為一張資料表,這個繼承體系的所有類的屬性都對映到將 對映到這張表的某個字段。除了所有類屬性對映的字段外,為了在這乙個張表中區分各個不同的子類資料,因此...