什么是 EJB?
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
系統管理員: 監視運行時情況
***************
*您學到了哪些?*
***************
EJB 是構建健壯,可擴展并支持事務處理的分布式對象技術規范
有兩種類型的 EJB: Session Bean 和 Entity Bean
一個 EJB 服務器使用 EJB 容器;容器來管理其所包容 bean 的生命周期
每個 bean 將有三個類: bean 類, home 接口和 remote 接口 [@more@]