Enterprise JavaBeans 介紹(一):EJB 種類介紹 (轉)
(艾群科技 蕭松瀛) :namespace prefix = o ns = "urn:schemas--com::office" />
在今日已經逐漸的成為企業中標準的應用平臺,同時也
有許多的師,甚至網頁設計人員,利用 / 的便
利性,在 J2EE Server 上開發相關的應用,或是與公司內部的資源
相連線。
最近也有許多人慢慢的投入 J2EE 中的其它技術,其中 就是
一個很值得投資的技術。
這篇並不是要教您如何撰寫 EJB ,但是希望讓對 EJB 有興
趣的使用者,能夠大致瞭解 EJB 能讓您作哪些事情。
EJB 依照特性的不同,目前區分為三種,分別是 Session Bean ,
Entity Bean ,以及 Message Driven Bean 。其中 Session Bean 與
Entity Bean 算是 EJB 的始祖,這兩種 EJB 在 EJB 規格 1.x 的時候
就已經存在了,而 Message Driven Bean 則出現在 EJB 2.0 的規格中
。目前也有少數幾家廠商的 J2EE Server 支援 EJB 2.0 的規格。
Session Bean
Session Bean 主要的目的是讓程式開發者將邏輯層抽離,特別是復
雜的邏輯可以放在 Session Bean 中。Session Bean 還可以再細分為
Stateful Session Bean 與 Stateless Session Bean ,這兩種的 Session Bean
都可以將邏輯放在 method之中,不同的是 Stateful Session
Bean 可以記錄呼叫者的狀態,因此通常來說,一個使用者會有一
個相對應的 Stateful Session Bean 的實體 (Instance 注一) ,換言之,
當使用者呼叫某個 Stateful Session Bean 的兩個 methods 的時候,
EJB Container(注一) 會清楚的知道某個 EJB 的實體屬於某一個使用
者的。因此一般的設計上,不會讓兩個使用者同時使用某個 Stateful
Session Bean (這並不是表示兩個使用者不能使用同一個 Stateful Session
Bean)。
Stateless Session Bean 雖然也是邏輯,但是他卻不負責記錄使
用者狀態,也就是說當使用者呼叫 Stateless Session Bean 的時候,
EJB Container 並不會找尋特定的 Stateless Session Bean 的實體
來執行這個 method ,換言之,很可能數個使用者在執行某個 Stateless
Session Bean 的 methods 時,會是同一個 Bean 的 Instance 在執行。
從方面來看, Stateful Session Bean 與 Stateless Session
Bean 比較, Stateful Session Bean 會消耗 J2EE Server 較多的記憶體,
然而 Stateful Session Bean 的優勢卻在於他可以維持使用者的狀態。
Entity Bean
Entity Bean 主要是資料元件, Entity Bean 主要的目的,在於提供資
料,也就是說程式設計師可以將 Entity Bean 當程式資料,至於 Entity
Bean 實際上怎麼存取實際上的,那個則是另外一件事情。
Entity Bean 實際上是針對 RMS 而設計,也就是說當其它的程式使
用Entity Bean 的時候, Entity Bean 的資料主要是從 而來,當
然,如果程式設計師熟悉 Entity Bean 的運作,那麼也可以很輕易的把
RDBMS 用其它的資料庫取代,像是 。
Entity Bean 主要區分為 Bean-Managed Persistence 以及 Container-
Managed Persistence (簡稱 BMP 及 CMP) ,這兩種 Entity Bean 的型
態不同,但是目的相同,都在於提供資料!這兩種 Entity Bean 主要的
差別在於維護資料的角色, BMP 是由 Bean 自行維護資料的一致性,
而CMP 則是由 EJB Container 來維護。一個 Entity Bean 往往代表一張
RDBMS 的表格,這個表格內的一筆一筆的資料,則是透過另外一個
叫做 Primary Key(注三) 的 Class 來加以區分。
Bean-Managed Persistence
當我們說 BMP 是由 Bean 自行維護資料的一致時,有些人會覺得太過
於抽象,簡單一點來說,原來的資料均由資料庫而來,而當資料從資
料庫中取出之後,在 BMP 中需要自行宣告欄位來存放這些資料,同
時也要自行撰寫相關的程式程式碼,包括相關的 語法等等。
Container-Managed Persistence
CMP 是比較高階的 Entity Bean ,比較高階的意思是說,撰寫 CMP 的
程式設計師並不需要撰寫大多數的 JDBC 語法,只需要透過一些定義
,即可產生 CMP ,實際上的 EJB 的程式程式碼則是 EJB Container 依據相
關的 Deployment Description (注四) 在部署(注五) EJB 的時候產生。
BMP 與 CMP 的型態不同,適用的場合也不同,主要的差異在於如果
我們想要自行控制所有的動作,那麼應該使用 BMP , BMP 允許程式
設計師完全的控制 BMP 的資料存取行為,而 CMP 很適合開發,
但是由於要支援 CMP 的 J2EE Server 需要較高的技術,因此每一家對於
CMP 的支援程度也不大相同。
此外,資料庫中有一個很重要的關係是 OR Map ,也就是常聽到的
一對一,一對多,多對多這種關係,在 EJB 1.x 的規格中,這種一對多
的對應關係只有兩種方式可以做出,一種是透過 Session Bean 來存取
多個 Entity Bean ,另外一種則是透過 BMP 來控制另外數個 BMP 或是
CMP ,但是在 EJB 2.0 的規格中,已經可以透過純粹的 CMP 配合
EJB-QL(注六) 語法來做出這種對應關係,這也是 EJB 2.0 的一大特色。
Message Driven Bean
Message Driven Bean 與 Session Bean 或是 Entity Bean 均不相同,
一般 Session Bean 或是 Entity Bean 都可以讓使用者主動觸發(可以
在需要的時候,呼叫他們的 method 來觸發他們),但是 Message Driven
Bean 主要的目的在於反應 Message Queue 中的事件。
也就是當 Message Queue 中有訊息傳入時, Message Driven Bean 可
以主動被觸發,做出相對應的反應。因此如果說 Session Bean 與 Entity
Bean 是同步的 EJB (使用者呼叫某個 Method ,就只能等 EJB 響應
之後才能進行下一步),那麼 Message Driven Bean 就可以當成是專門處
理非同步資料格式的 EJB ,也就是說程式設計師將某個訊息丟入 Message
Queue 之後,就繼續執行下去,另外一方面, Message Driven Bean 會
受到通知,知道有某個訊息需要處理,這時候他會自行運作。
因此 Message Driven Bean 並不是直接給使用者呼叫的,而是透過 Message
Queue 來觸發。
如果您對 EJB 有興趣,可以參考 Sun 的教育訓練課程 SL-351 。
注一:
Bean Instance 表示在記憶體中實際上產生的,一個 Bean Class
可以產生多個 Bean Instance 。Bean Instance 才是真正執行 EJB
method 的物件,可想而知的是, Instance 的數量越多,耗去的記憶體
越多。
注二:
EJB Container 是負責執行 EJB 的地方,所有 EJB 的產生,或是消滅
,或是執行等等,均透過 EJB Container 來處理。當使用者呼叫某個
EJB 的時候,實際上也是透過 EJB Container 來執行。
注三:
在 RDBMS 中,一張 Table 可能會有相關的 Primary Key 的欄位,而
Entity Bean 中也有相對應的 Class 來表示這個 Primary Key ,譬如
如果資料庫中,某個 VARCHAR 欄位是它的 Primary Key ,那麼
Entity Bean 中則可以用 String 來表示這個 VARCHAR 欄位。
注四:
Deployment Description 是一種 XML 格式的檔案(簡稱 DD),這個檔案
用來描述 EJB 的種類,型態,以及相關的資料。 EJB 的運作中,也
以 DD 內的描述為主。
注五:
部署是一個動作,一個寫好的 EJB 並不能單獨執行,他必須被"置放"
到EJB Container 之後才能夠運作,這個置放的動作,我們叫做部署。
部署的動作相當複雜,但是對使用者來說很可能是按個按鈕即可以完
成。
注六:
EJB-QL 是一種查詢 EJB Instance 的特殊語法,語法格式與 ANSI
很像,很容易上手。這個語法會被放置在 DD 之中,而 EJB Container
可以依照從 DD 取得的 EJB-QL 語法,自行產生與其它 CMP 的關聯。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992200/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 各種語言的介紹(轉)
- 介紹巢狀類和內部類(轉)巢狀
- java集合類介紹Java
- TypeScript class 類介紹TypeScript
- QTime類介紹QT
- PHP中 ADOdb 類庫介紹(轉)PHP
- [轉]介紹了Oracle資料庫鎖的種類及研究Oracle資料庫
- Oracle Secure Enterprise Search 爬蟲介紹Oracle爬蟲
- python類的介紹Python
- java之Object類介紹JavaObject
- Docker 介紹 一Docker
- 一、 Fastdfs介紹AST
- 瀏覽器核心的種類簡單介紹瀏覽器
- 一種蜜網技術的介紹
- 【轉】Oracle ASM介紹OracleASM
- 轉gcc cflags介紹GC
- Apache 版本介紹(轉)Apache
- C#各類集合介紹C#
- http代理使用分類介紹HTTP
- C#容器類,效能介紹C#
- Regex 類介紹 (C#)C#
- Windows Forms 的AxHost 類介紹WindowsORM
- Windows Forms 的CacheVirtualItemsEventArgs 類介紹WindowsORM
- 各種智慧指標的介紹指標
- 介紹
- 關於各類防火牆的介紹(2)(轉)防火牆
- 關於各類防火牆的介紹(1)(轉)防火牆
- Redis元件介紹(一)Redis元件
- JAVA SSH 框架介紹(轉)Java框架
- 【轉載】weblgic jms介紹Web
- java基礎介紹(轉)Java
- 轉:oracle官方文件介紹Oracle
- Oracle介紹SVRMGRL命令(轉)OracleVR
- 防火牆介紹(1)(轉)防火牆
- 防火牆介紹(2)(轉)防火牆
- IPTABLES 配置方法介紹(轉)
- 程式碼大全介紹 (轉)
- 工作流介紹 (轉)