圖解EJB的體系結構

圖解EJB的體系結構
 
2009-12-01 來源:lifevv.com
 
本文對EJB的體系結構作一個全面介紹:
  • EJB在J2EE體系結構中的位置
  • EJB的環境構成
  • EJB的資源配置
  • EJB的種類
  • EJB組件的構造
  • EJB的調用過程
  • EJB組件的生命週期
EJB是Enterprise JavaBeans的簡稱。本文對EJB技術的體系結構作一個全面深入地介紹。
EJB在J2EE體系結構中的位置
視圖層或表現層:提供用戶界面;接收用戶輸入;數據輸出。WEB應用的情況,JSP以及SERVLET屬於視圖層組件。
業務邏輯層:實際的業務邏輯處理。根據視圖層傳送過來的數據,進行實際的業務邏輯處理(包括數據庫的查詢,更新等),再把處理後的結果返回給視圖層。EJB,以及不使用EJB的情況下擔當業務邏輯處理部分的JavaBean等歸屬於業務邏輯層組件。
數據庫層或數據持久化層:多指用於保存業務數據的數據庫,也可以是文件等等。
EJB屬於J2EE體系結構中的業務邏輯層部分。
EJB的環境構成
1,EJB組件運行在EJB容器之中,EJB容器是一個EJB引擎,它提供了EJB組件運行的環境,並對EJB組件進行管理。EJB容器一般包含在EJB服務器(或應用服務器)中,EJB服務器可以擁有一到多個EJB容器。比較有名的支持EJB的服務器有Sun One,Interstage,Websphere,Weblogic,JBoss,JRun等。
2,調用EJB組件的一方被稱爲EJB客戶端。EJB客戶端可以爲運行在WEB容器中的JSP,SERVLET;或者一般的Java Application,Applet;或者Web Service;也可以是別的EJB組件。
3,EJB客戶端與EJB服務器可處於同一JVM環境中,也可處於不同計算機的不同JVM環境。
EJB的資源配置
當一個EJB組件被開發完成之後,它需要以JAR文件的形式配置到EJB容器中以備其他客戶程序使用;反過來,一個客戶程序需要使用某EJB組件,該客戶程序需要引用該EJB組件的接口,也就是說,EJB的jar文件需要同時配置到EJB容器和使用該EJB組件的客戶端環境中。
如圖:
EJB-JAR文件的構成
sample-ejb.jar
EJB-JAR文件是一個後綴名爲.jar的zip格式文件。它至少需要包含META-INF目錄以及其下的ejb-jar.xml文件以及MANIFEST.MF文件。對於不同類型的EJB組件,還需包含它們的Home接口,組件接口,以及組件的實現類。
EJB組件的種類
EJB組件有SessionBean(會話Bean),EntityBean(實體Bean),MDB(消息驅動Bean)三種。
SessionBean
主要負責業務邏輯的處理。根據處理時的狀態保持與否,SessionBean又被分爲:
Stateful SessionBean(有狀態SessionBean)
Stateless Bean(無狀態SessionBean)
對象的“狀態”是指對象的屬性值,也就是對象所攜帶的數據。Stateful SessionBean能維持會話的狀態,就是說能爲同一客戶端保持上一回被調用時的狀態,類似於HttpSession;而Stateless SessionBean則不能維持會話狀態,也就是說,對Stateless SessionBean來說,每個方法都是獨立的,因爲對特定客戶端不保持會話狀態,所以一般也不在Stateless SessionBean裏定義成員變量。
EntityBean
負責數據庫的訪問。通常由SessionBean調用。EntityBean的一個實例所表示的數據通常代表了關係數據庫中特定表的特定的一行數據。EJB3開始,EntityBean部分的功能可以通過JPA來實現。
EntityBean的作用:
1,對數據庫的操作:查詢,數據的更新,刪除等
2,數據庫表數據的攜帶
根據對數據庫操作(持久化)的不同,EntityBean分爲以下2種類型:
1,BMP (Bean-managed persistence:bean管理持久化):持久化操作(數據庫的訪問,數據的創建,更新,刪除等)由EntityBean的實現(javax.ejb.EntityBean的實現類)自身完成。
2,CMP (Container-managed persistence:容器管理持久化):持久化操作由容器根據deploy時的配置信息(ejb-jar.xml)自動完成。
MDB (message-driven bean:消息驅動bean)
MDB主要用來處理異步消息。客戶端調用SessionBean,EntityBean的方法時,會一直處於等待狀態,直到被調用的方法處理完畢。但使用MDB,客戶端向容器發送一個JMS消息之後,不必等待MDB處理完畢便可直接返回。JMS被髮送給由容器管理的JMS消息隊列,容器在適當的時候通知MDB的callback方法onMessage加以處理。一個MDB需要實現javax.jms.MessageListener接口與javax.ejb.MessageDrivenBean接口。
EJB組件的構造
構造圖:
SessionBean的UML-CLASS圖
EntityBean的UML-CLASS圖
MDB的UML-CLASS圖
EJB的調用過程
①客戶端程序使用lookup方法查找JNDI
②EJB服務器的JDNI服務根據事先登錄的信息匹配lookup查詢內容,生成Home實例
③客戶端得到對Home實例的引用
④客戶端調用Home.create方法
⑤創建相對應的Bean實例,調用Bean的ejbCreate方法
⑥生成相對應的Remote Ojbect實例
⑦客戶端得到對Remote Ojbect實例的引用
⑧客戶端掉用業務邏輯方法
客戶端與服務器端的通信使用RMI-IIOP通信協議。
客戶端在調用EJB組件時,需要知道EJB組件的位置(包括IP,端口,名稱),才能得到對EJB組件對象的引用。JNDI是J2EE提供的一套Java API,是Java Naming and Directory Interface的略稱,提供根據名稱查找對象的服務。EJB利用JNDI來解決名稱問題。JNDI有Service Provider的概念,Provider可以選擇LDAP或者RMI。
要使用JNDI,需要先進行登錄,然後使用lookup進行查找。
EJB的JNDI的使用,也需要通過配置文件進行登錄,不同的EJB服務器有不同的設置方法。具體可參考相關EJB服務器的操作手冊。
EJB組件的生命週期(Lifecycle)
Stateful SessionBean的生命週期
順序圖(sequence圖)
Stateless SessionBean的生命週期
順序圖(sequence圖)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章