认识EJB
一、定義
??????? 將業務邏輯從客戶端軟件中抽取出來,封裝在一個組件中。這個組件運行在一個獨立的服務器上,客戶端軟件通過網絡調用組件提供的服務以實現業務邏輯,而客戶端軟件的功能單純到只負責發送調用請求和顯示處理結果。在J2EE中,這個運行在一個獨立的服務器上,并封裝了業務邏輯的組件就是EJB(Enterprise JavaBean)組件。
EJB體系結構中涉及以下 6 類軟件構件:
1.Enterprise Java Bean(簡稱 Enterprise Bean)
??????? 分別是會話Bean(SessionBean),實體Bean(Entity Bean)和消息驅動Bean(MessageDriven Bean)。
SessionBean:
?????? 用于實現業務邏輯,它可以是有狀態的,也可以是無狀態的。每當客戶端請求時,容器就會選擇一個SessionBean來為客戶端服務。SessionBean可以直接訪問數據庫,但更多時候,它會通過Entity Bean實現數據訪問。
Entity Bean:
?????? 是域模型對象,用于實現O/R映射,負責將數據庫中的表記錄映射為內存中的Entity對象。事實上,創建一個EntityBean對象相當于新建一條記錄,刪除一個Entity Bean會同時從數據庫中刪除對應記錄,修改一個Entity Bean時,容器會自動將EntityBean的狀態和數據庫同步。
MessageDriven Bean:
?????? 是EJB2.0中引入的新的企業Bean,它基于JMS消息,只能接收客戶端發送的JMS消息然后處理。MDB實際上是一個異步的無狀態SessionBean,客戶端調用MDB后無需等待,立刻返回,MDB將異步處理客戶請求。這適合于需要異步處理請求的場合,比如訂單處理,這樣就能避免客戶端長時間的等待一個方法調用直到返回結果。
2.Home 接口
??????? Home 接口(HomeInterface)包含 EJB生命周期管理的相關的方法,客戶程序使用 Home接口創建或刪除 EJB 的實例。
3.Remote 接口
????? Remote接口中包含 EJB 實現的方法的聲明,它實際上約定了 EJB 所提供的服務。在 EJB 中,客戶程序只能通Remote 接口來間接地訪問 EJB實現的商業方法,不能直接進行調用。
4. EJB 容器
????? EJB容器為 EJB 構件提供運行環境并管理運行于其中的 EJB,理論上講,一個 EJB 容器可以包含任何數量的EJB,但是由于實際資源的限制,實際的 J2EE 平臺的容器往往有一個能夠包含 EJB構件的上限。EJB 容器為 EJB 的執行提供系統級的服務,如自動將 EJB 相關的 Home 接口注冊到一個目錄服務中,自動注冊服務支持客戶應用查找定位EJB 的實例。
5. EJB 服務器
????? EJB服務器是遵循 EJB 定義的構件模型的 CTM 實現,一個 EJB 服務器可以包含一個或多個 EJB 容器,EJB服務器為 EJB容器的運行提供公共服務框架。公共服務框架支持系統級服務,如 JNDI 服務。從使用服務的角度來看,開發人員可以不區分 EJB 容器與 EJB 服務器,可以認為EJB 容器和 EJB 服務器提供的服務都是由容器提供的。
6. EJB 客戶端
???? EJB客戶端泛指調用 EJB 構件提供的業務操作的軟件實體,EJB 構件的客戶端可以有多種形式。如 EJB 的客戶端可以是獨立的Java 程序,也可以是運行在 Web 容器中的 Servlet或 JSP 構件,Servlet 或 JSP 形式的 EJB 客戶端響應 Web 客戶的請求;EJB的客戶端還可以是其它的 EJB,例如 Session Bean 經常作為Entity Bean 的客戶端來訪問持久數據。?
???????????????????????????????? 
 
二、主要技術
分布式對象技術:
???????? 分布式對象技術提供客戶端訪問分布式對象的基本支持。除了EJB之外,其它的分布式對象技術包括 Java RMI、 CORBA、 DCOM等,所有的分布式對象技術都會使用某個特定的遠程方法調用協議, EJB中最常用的遠程方法調用協議是RMI/IIOP。不論其采用什么具體的遠程方法調用協議,現有分布式對象技術一般均采用Stub/Skeleton結構來支持客戶端與分布式對象之間的交互。
服務端構件技術:
??????? 服務端構件技術用于中間層應用服務器,支持分布式商業對象的開發。服務端構件技術以組件方式提供系統的可重用性與可擴展性,隨著實際商業系統的變化,可以重新組裝、修改、甚至刪除商業對象,而不必重新重寫整個應用系統。
CTM( Component Transaction Monitor)技術:
?????? 簡單地說,CTM 是一個應用服務器,它為分布式商業對象提供公共服務框架,CTM 公共服務框架支持大量的系統級服務,如事務(Transaction)管理等。
綜上所述,EJB采用的構件技術為我們刻畫了 EJB 構件的基本特征:EJB 構件是由公共服務框架自動管理的分布式的服務端商業構件,其中, CTM技術提供了公共服務框架的支持,分布式對象技術提供了分布式對象的支持,而服務端構件技術提供了服務端構件管理的基本支持。
 
三、特點
公共服務框架:
??????? EJB將實現商業對象所使用的服務框架的任務劃分給了 EJB 應用服務器,服務框架支持大量的、由應用服務器提供的系統級服務。 EJB應用服務器提供的服務框架使得應用開發者可以關注于應用商業邏輯的實現,從而大大提高了開發效率,縮短了應用的開發周期。
平臺獨立性:
??????? 平臺獨立性一方面得益于EJB 沿襲了 Java 技術的平臺無關性,另一方面,EJB/J2EE 規范的開放性使得構成 EJB 應用的商業對象可以移植到任何符合 EJB 規范的應用服務器上。
封裝特性:
???????? EJB規范提供對服務的封裝特性(Wrap and Embrace),封裝特性使得 EJB 應用可以使用現有的基礎性服務(如目錄服務),EJB 通過定義一系列標準的服務 API 來封裝現有的基礎性服務,EJB 構件通過這些標準的 API 來使用服務。如JNDI接口支持訪問現有的命名目錄服務(如 LDAP、COS),通過使用JNDI,EJB 應用服務器廠商可以將 LDAP 服務集成到其產品中,而不需去重新實現LDAP。EJB 的封裝特性可以使應用服務器廠商節省IT投資,廠商可以使用現有的基礎性服務,而不必去重新實現這些服務。
可定制性:
??????? EJB構件可以在不修改源代碼的基礎上進行定制化,EJB 構件的定制是指修改 EJB 構件的運行時配置以滿足特定用戶的需求。EJB構件的定制主要通過布署描述符完成,如可以利用布署描述符改變EJB 構件的事務管理特性。除了 EJB 模塊中標準的布署描述符 ejb-jar.xml 外,J2EE平臺提供商通常還會提供特定的輔助布署描述符以支持更強的可定制特性,如Websphere中的ibm-ejb-ext.xmi、Weblogic中的weblogic-ejb-jar.xml 等。
協議無關性:
??????? 該特性指EJB 構件支持客戶端通過多種 EJB 訪問 EJB 構件 EJB 規范并沒有強制約定只能通過 IIOP 協議來訪問 EJB構件,客戶端可以通過其它通信協議,如Weblogic 中支持的t3 協議(一種基于 HTTP 的協議)來訪問遠程 EJB 構件。協議無關性使得 EJB支持多種類型的客戶端,不同類型的客戶端使用不同的通信協議與 EJB 應用通信。
通用性:
?????? 通用性指EJB 規范可方便支持不同規模的應用系統,即可以在任何時間增加客戶系統,而不需修改核心的應用系統。通用性通常意味著系統資源的可伸縮性,系統資源在軟件構件處理客戶請求時要使用到,如處理器(CPU),隨著系統規模的增大,構件可能要處理來自大量的客戶請求,這里往往需要增加冗余的系統資源,如提供多個處理器(服務器),同時還需要一種合理的負載均衡機制將客戶端請求均勻地分發到不同的服務器上。基于EJB容器的基本支持,Java企業版平臺(尤其是商用的平臺)可以方便的支持不同規模的應用系統,如 Websphere 提供的克隆機制可以支持管理員將某個J2EE 應用復制多份在多個服務器上運行,同時為多份服務提供自動的負載均衡機制。
 
四、EJB構件與 Java Bean 的比較
EJB 與 JavaBeans 都是基于Java 語言的構件模型,開發應用時,可以選擇 EJB 模型,也可以選擇 JavaBeans 模型。 EJB 與 Java Bean 的區別主要包括以下幾點:
1.在大型的 Java 企業版應用中, EJB 構件通常用于服務端應用開發,而 Java Bean 構件通常用于客戶端應用開發或作為服務端EJB 構件的補充。當然也可以用 Java Bean 構件進行服務端應用的開發,但是與 EJB 構件相比, Java Bean 不能使用 Java企業版平臺提供的公共服務框架的支持,當應用需要使用關鍵的公共服務(如事務控制服務)時,使用普通的Java Bean 構件顯然不適合。
2. EJB 構件是可布署的,即 EJB 構件可以作為獨立的軟件單元被布署到 EJB 應用服務器上,是應用構(application components);而 Java Bean 是開發構件,不能被部署為獨立的單元。
3.EJB 構件是布署時可定制的,開發人員可以通過布署描述符對 EJB 構件的運行時配置進行定制;而 Java Bean構件的定制通常僅發生在開發階段,開發人員只能利用開發工具創建并組裝 JavaBeans 構件,部署時不能對其進行定制。
4. EJB 構件是分布式對象,可以被客戶應用或者其它 EJB 構件進行遠程訪問;而普通的 Java Bean 構件只能在其構成的應用中使用,不能提供遠程訪問的能力。
5.EJB 構件是服務端構件,運行在服務端,沒有人機交互界面,對終端用戶不可見;而部分 JavaBeans 構件對終端用戶可見,如 GUI應用中使用的按鈕構件等。
 
綜上所述,從對比的角度看,可以認為EJB 是 Java 語言提供的服務端構件模型,而 JavaBean 則是 Java語言提供的客戶端構件模型,具體開發時可根據應用的具體需求,結合 EJB和 Java Bean的特點,靈活的選擇 EJB 或者 Java Bean。
總結
 
                            
                        - 上一篇: 虚拟人物设计-虚拟动作编排-虚拟数字人生
- 下一篇: 数学建模写作时相关的套路
