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