1.什麼是 EJB?
一個技術規範:EJB 從技術上而言不是一種"產品"
EJB 是一種標準描述了構建應用組件要解決的:
可擴充 (Scalable)
分布式 (Distributed)
交易處理 (Transactional)
資料存放區 (Persistent)
安全性 (Secure)
2.Sun 對 EJB 的期望
提供一個標準的分布的、基於 OO 的組件架構
屏蔽複雜的系統級功能需求
Write once, run anywhere
與非 Java 應用之間的互操作能力
相容 CORBA 標準
3.為什麼選擇 EJB?
EJB 伺服器完成"繁雜"的工作:應用開發人員關注於商務邏輯的實現而不是底層的實現機制(類似於 4GL 語言設計的目標)
支援交易處理
多個業務操作同時成功,或全部失敗
可以通過在代碼外的描述來定義交易處理層級
可擴充性
EJB 可以根據您應用的增長而擴充
EJB 伺服器往往還提供了負載平衡和
安全性:由 EJB 伺服器提供資源的存取權限控制
4.EJB 架構
為了滿足架構的目標,規範中描述了
伺服器 (Server)
容器 (Container)
類 (Class) 和執行個體 (Instance)
Home 和 Remote 介面
用戶端 (Client)
5. 簡化的編程模型
關注於商務邏輯實現:EJB 負責生命週期 (lifecycle), 資料存放區 (persistence), 交易處理語義 (transactional semantic), 安全(security), ...
通用的編程模型:各種服務的高層 API
Java 是其程式設計語言
1.EJB 特點
由一個 EJB 容器在運行時建立和管理 EJB
在部署 EJB 時定製其運行方式
由 EJB 容器和伺服器來協調用戶端的訪問
可以部署到任何相容的 EJB 容器中
用戶端對 EJB 的視圖是由 Bean 開發人員決定的
2.EJB 伺服器
管理 EJB 容器 (它管理 Bean)
提供對作業系統服務的存取
提供 Java 相關的服務,尤其是
通過 JNDI 訪問命名空間
基於 OTS 的交易處理服務
3.EJB 容器
管理 Bean 生命週期:將 EJB 伺服器提供的服務傳遞給 Bean
產生代碼來實現對 Bean 的存取訪問
強制交易處理的限制
建立、初始化和回收 Bean
管理持久資料的儲存
對用戶端而言 EJB 容器是透明的
4.在一個 EJB 伺服器中的容器
目前容器通常是由 EJB 伺服器本身提供的
在 EJB 1.0 或 1.1 規範中沒有定義容器-到-伺服器的介面
各廠商可以根據他們的見解來實現伺服器和容器的各自責任
5.容器提供服務: 資料存放區
容器決定何時載入/儲存狀態
Container-Managed Persistence(容器管理儲存/CMP)
容器負責儲存您的 Bean
容器產生必要的類和代碼
Bean-Managed Persistence(Bean 管理儲存/BMP)
Bean 開發人員提供儲存代碼
開發人員決定 如何儲存, 容器仍然決定 何時進行
6.容器提供服務: 交易處理
可以由容器代理來實現
容器將得到商務邏輯方法的交易處理需求
容器提供事務控制碼
也可以由程式員通過代碼實現
7.容器提供服務: 其它服務
其它服務包括
命名 (Naming)
安全 (Security)
線程管理 (Thread management)
這些服務由容器代理完成將減少應用開發人員的負擔
8.分布式對象運算
遠程對象被作為本機物件來處理:傳遞資訊的方式不變,但開銷更大
Enterprise JavaBeans 永遠運行在伺服器上:對 Bean 的訪問永遠是遠程調用
9.Stub 和 Skeleton
由 EJB 產生:
"Stub" 對要傳遞出去的資訊編碼
"Tie/Skel" 將接受到的資訊解碼並傳遞給目標對象
10.分類: Enterprise JavaBeans
+---Entity Beans--CMP/BMP
Ejb--|
+---Session Beans--Stateful/Stateless
會話 Bean (Session Bean):根據 EJB 規範,一個會話 Bean 是:
代表單個用戶端來執行
可以參與到交易處理中
不直接代表共用於資料庫中的資料,但它能訪問和更新這些資料
相對而言是短暫存在的
當 EJB 容器失效後就不存在---用戶端需要重建立立一個信新的會話對象來繼續運算
實體 Bean (Entity Bean):根據 EJB 規範,一個實體 Bean 是:
提供在資料庫中資料的物件檢視
允許被多個使用者共用存取訪問
可以是長期存在 (只要它存在於資料庫中)
實體 Bean, 它的主鍵對象, 以及它的遠端參照將能跨 EJB 容器的宕機而存在
11.EJB 類和執行個體
構建 EJB 應用程式套件括來自三方的代碼
開發人員編寫的代碼
由 EJB API 定義的類和介面
由容器自動產生的程式碼
開發人員編寫的程式碼封裝括
Bean 類 (定義了商務邏輯)
Home 介面 (如何尋找或建立 bean)
Remote 介面 (如何存取 bean)
其它組件,根據 bean 實際要求
12.EJB Home 介面
每個 bean 有一個
用於:建立新的 bean 執行個體、尋找現存的 bean (只能是實體 bean)
Remote 介面:定義 bean 的公用介面---只有在 Remote 介面中定義的方法才能被用戶端訪問
EJB 用戶端
可以為 servlet, JSP, 應用程式或其它 bean
通過 JNDI 來尋找 EJB home 介面,步驟為:
建立一個 JNDI Context (initial context)
使用 JNDI Context 來尋找 bean home 介面
使用 bean home 介面來建立/尋找 bean 執行個體
使用 bean 執行個體完成業務操作
實際的存取 (對 EJB) 是通過容器產生的類來完成
EJB 架構
用戶端對 bean 訪問永遠不是直接的
EJBObject (tie) 是由容器自身提供的:用來協助管理 bean 的生命週期
EJB 中的角色
EJB 伺服器供應商: 開發並銷售 EJB 伺服器
EJB 容器供應商: 開發並銷售 EJB 容器
Enterprise bean 開發人員: 開發並銷售 EJB
應用組裝人員: 將不同的 EJB 搭建成應用
部屬人員: 使用相應工具在運行環境下配置 EJB
系統管理員: 監視運行時情況