從J2EE推出以來,已經逐漸為企業所熟知,投入J2EE相關技術的資訊從業人員也不斷增加。在J2EE的各項技術中,EJB 是十分值得投資的新技術。
你可能已經知道EJB是Enterprise Java Bean的縮寫,但是可能還不知道EJB的用處和架構。本文的主要目的就是讓讀者先有初步的認識,之後在接下來的各期爪哇藍報中再分別介紹更為入的應用介紹。
EJB從意義上來說,是一種「技術規範」,而不是一種產品,
‧Bean Instance :表示在記憶體中實際產生的物件。一個 Bean Class 可以產生多個 Bean Instance 。Bean Instance 才是真正執行 EJB method 的物件。
‧Container:容器是可提供特定元件(Components)服務的標準執行環境。例如,Web Container必須提供必要的程序(呼叫特定頁面、處理程式等),回應Client端的需求,並將處理結果傳回Client端。
‧EJB Container: 是EJB 標準執行環境,所有 EJB 的產生,或是消滅,或是執行等等,均透過 EJB Container 來處理。當使用者呼叫某個EJB 的時候,實際上也是透過 EJB Container 來執行。
‧Deploy:一個寫好的 EJB 並不能單獨執行,他必須被「放」到EJB Container 之後才能夠執行,而這個動作就是Deploy。Deploy通常只是執行某個動作、按鈕,之後的動作就交由Application Server自行處理。
‧EJB Client:負責使用者介面呈現的元件,可能是JSP/Servlet,或者是一個Standalone Java Application。
‧Message Queue:在程式中要傳達的資料片斷稱為Message,存在於記憶體中,而Message都可經由Message Queue提供給不同的Process進行處理。Message Queue儲存了每個的Message的位址(Address)、型態(Type)、大小(size)、指到下一個Message的指標(pointer)等,它的資料結構基本上是一個Linked List。
EJB 依照特性的不同,區分為幾種。
‧Session Bean:主要的目的是讓程式開發者將邏輯層抽離,這些「邏輯」通常就是一個應用程式中的Business Logic,在整個系統開發中佔有相當重要的一部份。系統開發者可以多加利用Session Bean,將複雜的邏輯放在 Session Bean 的Method中。
|
‧ Stateful Session Bean:可以記錄呼叫者的狀態,因此通常來說,一個使用者會有一個相對應的 Stateful Session Bean 的實體(Instance)。
‧Stateless Session Bean:也是邏輯元件,但是他卻不負責記錄使用者狀態,也就是說當使用者呼叫 Stateless Session Bean 的時候,EJB Container 並不會找尋特定的 Stateless Session Bean 的實體來執行這個 method。 |
‧Entity Bean:它的角色是主要是資料元件,主要目的在於提供資料,讓系統開發人員直接將Entity Bean 當作程式中所要用到的資料;至於 Entity Bean如何存取一個Relational Databse或LDAP,就可以作為另外一項獨立的事情。
|
‧Bean-Managed Persistence(BMP):由名稱上就可以直接了解到BMP是由Bean自行維護資料的一致。`而Bean從資料庫取得資料後,BMP 中需要自行宣告欄位來存放這些資料,相關的 JDBC 語法等程式,也都須要自行撰寫。適用於開發人員想要完全控制 BMP 的資料存取行為時。
‧ Container-Managed Persistence(CMP):相對於BMP,CMP是由 EJB Container 負責維護資料。撰寫 CMP 的程式設計師並不需要撰寫大多數的 JDBC 語法,通常只需要撰寫Deployment Description,就可以產生 CMP ;實際上的程式碼是 EJB Container在Deploy EJB 的時候所產生。CMP似乎有助於快速開發系統(大部份的工作都交給EJB Container了嘛),但是須要配合使用支援 CMP 的Application Server,而截至目前為止,每一家不同Application Server對CMP 的支援程度也不大相同。 |
‧ Message Driven Bean:主要的目的在於反應 Message Queue 中的事件,當 Message Queue 中有訊息傳入時,Message Driven Bean 可以被觸發,做出對應的反應;所以Message Driven Bean可以說是主動反應,而不是「呼叫某個Method」這樣的方式被動觸發。
其中 Session Bean 與Entity Bean在 EJB 規格 1.x 的時候就已經存在了,而 Message Driven Bean 則出現在 EJB 2.0 的規格中。