天天看點

什麼是ejb?

什麼是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 
系統管理者: 監視運作時情況      

繼續閱讀