一、Server方組件結構
EJB是一種Server方的組件結構,它可以非常簡單的開發基於java的企業級的分布式對象應用。使用EJB可以開發出易升級的、可靠的、安全的應用程序,而不用獨立開發復雜的分布式對象框架;EJB可以迅速開發服務方應用程序,快速建立基於Java的服務方組件。EJB被設計用來實現企業中間件服務的可移植和可重用性。
如果你對企業計算很陌生,這些概念對你很有用,EJB是個很復雜的主題,應該被充分的解釋。在這一章我們討論有關EJB的主要概念。首先,我們先討論開發企業級軟件是為了干什麼?為什麼說像EJB的預包裝的分布式對象體系可以簡化你的生活?在討論中,你將會對服務端的組件結構有宏觀的了解。
服務端組件結構的需要
我們必須首先了解開發者在建立和配置服務端環境下的組件時通常需要什麼?同時,我們將解決圍繞服務端開發所出現的問題,將看到建立一套像EJB標准體系結構的必要性。
軟件組件――一個軟件組件是一段代碼,它用來實現一系列定義好的接口。組件不是完整的
應用程序――它們不能被獨立運行。更貼切的說,它們是看作是許多大型問題分割成的小問題。
軟件組件的思想非常有用。公司可以買來定義好的可用來解決某一問題的模塊,將它和其他組件一起編譯用以解決大型問題。
組件結構――為了使組件開發過程更加容易,需要為建立、管理、維持組件建立規范。
開發組件的開發工具――建立組件時,應該允許開發者集中精力在組件的背後開發核心邏輯,使開發者不需要考慮太多的標准細節問題,從而快速開發應用程序。例如IDE:Symantec的Visual Cafe,IBM的VisualAge for Java,Inprise的Jbuilder 2,這些工具可以幫助你快速的建立和調試組件。
管理配置好的組件容器――組件容器為你的組件運行提供了一個運行時環境。同時也提供了一套供大多數組件使用的通用服務。
配置和維持組件工具――從組件提供商購買了組件後,還需要有一套工具來幫助配置和維持這些組件。
Java:完美實現組件結構
對於成功運用在解決商業問題的一個組件,無論是組件開發商還是使用組件的客戶都必須遵守調用組件方法的語法和語義。開發商出版有關調用組件的規范,客戶代碼必須遵守它們。
為了防止當開發商提供了一個新版本的組件,或更改了組件規范,客戶方就必須重新編寫或編譯它們的代碼,因此面向對象設計提出了一種新的設計方法:通過從組件的實現中分離出接口。
組件接口
組件邏輯
為了使接口/實現分離這種方式變得更有效,開發者必須為組件接口寫客戶代碼(這被稱為基於接口的程序設計),通過這種分離,可以改變服務方邏輯而不用更改客戶方代碼。
Java中的組件結構
現在讓我們了解什麼是組件結構,看看在Java世界裡存在那些組件結構。首先,你應該了解什麼是JavaBeans,JavaBeans組件是小的應用程序塊,可以使用JavaBean去集合成大型的組件,從而編譯完整的應用程序。然而,你不能配置一個JavaBean,因為一個JavaBean不是一個完全的應用程序。JavaBean可以幫助你構建更大的可配置的軟件。因為不需要配置,JavaBean不需要運行時環境,也不需要容器來對它進行實例化、破壞、提供其他服務的操作。應用程序本身是由許多JavaBean構成的。
相比較,EJB標准定義了一個組件結構來配置組件,被稱為企業級的Beans。企業級的Beans是比較大的、粗糙的被用來配置的應用程序組件。他們能被破壞,也能被用來和其他組件組合成更大的應用程序系統。可配置組件在容器內被配置,容器提供了對組件的運行時服務。例如實例化。
企業級Beans和兩種其他的Java組件十分相似:applets和servlets。Applets可以在Web頁中配置,浏覽器的AppletvIEwer為其提供了運行時的容器。Servlets可以在Web Server中被配置,Webserver的servlet engine為提供運行時的容器。企業級Beans可以在應用程序服務器中被配置,應用服務器為其提供了運行時的容器。
它們三者之間真正的不同是每個組件類型可以延伸的域大小。
Applets是輕便Java程序,它能夠被任意的下載和運行。例如它可以從Web Server中下載到浏覽器。
Servlets是可以被用來延伸Web server功能的網絡組件。它是面向請求/回答的,從許多客戶端獲得請求,再給它們發應答。這樣使得它被廣泛用於執行Web任務。
Applets和servlets適用於客戶方操作。而企業級Bean不擴展客戶端操作,它是服務端組件,執行服務端操作;例如執行復雜運算、執行大量的商業傳輸。
服務端所需
一個完整的組件結構遵循以下方式:
開發者寫可重用組件
提供商寫組件容器:用以給組件提供運行時環境和服務
提供商提供開發、配置和維持工具。
這些方式保證了可重用性。
多層結構
服務方配置是用來支持用戶同時執行並發、安全、可靠、有效的操作的軟件。
服務方配置一般被分成多層。每層實現不同的功能,每層有一個或多個組件。注意:層是個抽象的概念,在物理上它並不存在。下面有個分層的例子:
代表層:這些容器組件處理用戶接口和用戶交互。例如,代表層是一個單獨的應用程序,可以用VB來寫。基於Web配置的代表層可以使用java servlets,Java server pages或Java applets。
業務邏輯層:是用來解決業務問題的容器組件的集合。這些組件常被用來處理高執行度的工作,它們常用安全性的語言來寫,例如:Java、C。
數據層:被業務邏輯層用來保持狀態的持久性。數據層的中心是一個或多個數據庫。
分層的優點是盡量隔離各層。
兩層結構
通常,大多數配置是兩層結構。將業務邏輯層和另外兩層的一個合並:可能和代表層合並。可能和數據層合並。
代表層和業務邏輯層合並
如把代表層和業務邏輯層這一層作為客戶端,數據層作為服務端,則形成fat客戶端,而thin服務端的情況。在兩層結構中,客戶端應用程序通過數據庫橋API與數據層相連。例如:ODBC、JDBC。
這樣的兩層結構有以下特征:
配置代價非常高。數據庫驅動必須在每一個客戶層上安裝和配置。
數據庫驅動交換代價高。轉接一個數據庫驅動,需要在各個客戶端重新安裝客戶端驅動。
數據庫類型轉型代價高。
業務邏輯移植代價高。
數據庫連接代價高。
網絡性能發揮低。
將業務邏輯層部分並入數據層
形成客戶端thin,而服務端fat的情況。
N層結構
其中將代表層、業務邏輯層、數據層各自為一層。
特點:
配置代價低。
數據庫交換代價低。
業務邏輯移植代價低。
可以和防火牆結合配置安全部分。
資源可以被重用。
每層都有較大的靈活性
J2EE技術:
J2EE是中間件服務套件,對於服務端應用的開發者來說,使開發變得更容易。它包含:
EJB:它定義了怎樣去寫服務方組件、提供了一個在組件和管理它們的應用服務器之間的標准。EJB是J2EE的核心。
RMI和RMI-IIOP:RMI――遠程過程調用;RMI-IIOP是RMI的擴展,它可以使用IIOP協議,可以被CORBA整合使用。
JNDI:JNDI用來在網絡上區分組件和其他資源的位置。
JDBC:是聯系數據庫的橋梁
推出EJB1.0後的幾個月,第一個基於EJB的應用服務BEA’s WebLogic就誕生了。
二、EJB總攬
EJB采用divide-and-conquer的方式來實現服務方的計算。事實上,EJB標准定義了6個不同的部分協同工作。每個部分都被作為EJB配置成功的關鍵。在這兒,我們分別討論它們的作用。
Who’s Who in EJB
在EJB的世界裡,業務解決方案被分為四個階段發展:
1、 業務邏輯模塊化。ERP(企業資源計劃(ERP)培訓 )、金融、電子商務提供商將產品模塊化,集成在可重用EJB組件中,這樣就意味著任何有EJB和J2EE知識的人都可以使用這些組件。
2、 業務組件需要運行在分布式的、企業級配置的多層環境中。這樣就需要不同的中間件,推動了中間件的發展。
3、 應用服務器和可重用組件捆綁。
4、 完整的系統配置。
EJB有好的可移植性,它被分為完全不同的6個部分:
6個部分之間的關系
The relationship between EJB servers and EJB containers.
EJB規范定義了完成一個基於EJB組件的分布式應用所需要的六個角色,這六個角色可以由不同的廠商來擔當,也可以某個廠商擔當多個角色。這六個角色是:
Enterprise Bean Provider EJB組件開發者,負責編寫EJB組件,EJB組件開發者是應用領域的專家。
Application Assembler 應用組合者,負責將各種EJB組合成一個完整的應用系統。
Deployer 部署者,負責將包含EJB組件的ejb-jar文件部署到應用服務器中。
EJB Server Provider EJB服務器提供者,負責實現一些底層的系統服務,如交易管理等。EJB服務器提供者是系統領域的專家。
EJB Container Provider EJB容器提供者,負責提供EJB組件的運行環境,EJB容器提供者和EJB服務器提供者一般是由相同的廠商擔當,提供的產品叫應用服務器。
System Administrator 系統管理員負責為EJB服務器和容器提供一個企業級的計算和網絡環境。
EJB配置的物理部分分為以下幾部分:
EJB Container
是裝載Enterprise Beans及Enterprise Beans生存的空間,是Beans在運行時相互聯接的接口,Container必須實現與Beans之間的約定,Continer提供者也應該提供配置工具以便能方便地配置Beans