1 前言?
隨著計算機硬件技術水平的不斷提高,特別是近年來互聯網技術的發展、電子商務技術的普及和應用,軟件客戶對基于網絡的分布式應用系統的多用戶響應能力、系統構建的時效性、系統運行的穩定性等方面的需求越來越強烈。因此,軟件組織按照客戶的特殊系統需求,快速地構建一個性能穩定、可移植性強的軟件系統,不僅對軟件系統的軟、硬件運行環境提出了新的需求,更重要的是需對傳統的應用軟件系統構建方式進行更新。?
由于軟件系統面向的應用領域不同,作為軟件系統核心內容的封裝了企業商務規則的業務處理模塊往往帶有行業性質,在研發過程中需要進行大量的客戶交流和系統分析,為此需消耗大量的人力和財力。因而理想的情況是:這種類型的軟件模塊由專業化的軟件組織開發并負責維護,應用軟件系統集成商在系統組裝和集成過程中,以“軟件組件”的形式從第三方獲得由專業人員開發的這些模塊集成到待開發系統中。?
基于這些需求,以服務器端軟件組件對象模型為核心的分布式多層應用系統體系結構逐漸成為在構建基于互聯網的商業系統時的首選實現模型。?
2 軟件組件對象結構
長期以來,軟件設計人員一直追求在程序代碼編寫過程中,能夠象電子元器件一樣將具有公共特征的軟件代碼創建成為軟件組件(Component)。軟件組件通過接口將組件內封裝的方法“暴露”給組件的使用者。創建應用程序的過程類似于“搭積木”,將具有特定功能的軟件組件組織到一起來構成完整的應用系統。?
從組件對象的客戶端角度來看:一個軟件組件對象通常可劃分成如下兩部分:?
●軟件組件的外部接口?
為了使調用組件商務方法的客戶能夠獲取組件中實現方法的類型和參數格式,在軟件組件中必須定義組件接口對象。軟件組件的客戶通過組件的接口對象訪問組件中定義的方法。因此,可以將接口對象看成是軟件組件與方法調用客戶之間的協議對象。?
●軟件組件的實現?
軟件組件中的實現代碼作為組件對象的核心,是實現了特定功能的邏輯單元,其主要內容為按照商務規則對數據進行邏輯分析和處理的程序代碼。由于組件實現代碼是組件的私有部分,因此,必須將實現代碼與客戶端完全隔離。典型的軟件組件客戶與軟件組件之間的協作關系如下圖所示:?
圖1 軟件組件客戶與軟件組件之間的協作關系圖?
通過將組件劃分為組件接口對象和實現代碼兩部分內容,使得應用組件對象的客戶端可以將組件看成是一個黑箱(Black Box)。組件開發人員在組件中編寫完整實現商務規則的代碼并將組件商務方法的定義以接口形式對組件應用對象公開后,組件的客戶就能夠按照接口方法定義的約束條件調用組件商務方法來獲取服務。?
基于軟件的組件對象化技術,獨立軟件開發商(ISV)通過集成多個軟件開發商的軟件組件產品,能夠以較快地速度開發出符合客戶需求的應用軟件系統產品,縮短了軟件產品從研發到市場化的周期,降低了軟件客戶投資風險。?
3 應用系統構建過程中的職責劃分?
??? 由于研究的技術領域和發展方向不同,不同的軟件組織在應用系統的開發過程中分別扮演不同的角色。例如:?
●精通行業應用規則并且熟練掌握某種程序設計語言的軟件組織可以從事軟件組件對象的開發工作;?
●熟悉服務器端程序設計并且精通系統級的事務處理、安全性維護、并發性控制以及熟練掌握各種類型數據庫訪問技術的軟件組織可以從事軟件組件運行環境的設計和開發工作;?
●熟悉各種類型硬件設備性能的軟件組織可以從事組件部署和維護工具的開發工作。?
為了充分發揮專業技術優勢,組件對象的開發、部署和應用的各個過程都需要不同專業方向的軟件組織來完成相應的職責。軟件組件對象開發完成后,組件的應用或部署人員須利用部署工具供應商提供的部署工具在高端服務器中為組件對象的運行提供合適的運行環境,而運行環境由掌握服務器端程序設計的軟件組織設計并開發。?
由于軟件組織在基于組件對象模型的應用系統開發、部署和維護等工作中的分工,促進了服務器端軟件組件體系結構規范的發展。?
4 服務器端組件體系結構解決方案
對象管理組織(OMG)、Microsoft和Sun等組織或公司分別針對服務器端軟件組件模型定義了相應的分布式應用體系結構規范:?
●CORBA規范?
對象管理組織定義的公共對象請求代理體系結構(Common Object Request Broker Architecture,CORBA)規范定義了分布式應用對象間的互操作方式。同時,規范中基于互聯網的對象請求代理間互操作協議(Internet Inter-ORB Protocol,IIOP)定義了分布式對象間的信息交換方式。?
??? 需要注意的是:CORBA規范只是分布式應用對象間交互方式的定義,而不是最終的軟件產品。如果要基于CORBA規范創建分布式應用系統,需要采用實現CORBA規范的、由Borland、IBM、IONA等公司開發的如VisiBroker等中間件軟件產品。基于這些中間件產品,應用系統開發人員可以采用不同的程序設計語言開發分布式應用系統的客戶端和服務實現對象,并且可以實現系統的跨平臺應用能力。?
??? ●DNA規范?
Microsoft定義的分布式互聯網應用體系結構(Distributed Internet Architecture,DNA)用于規范Windows平臺中分布式應用對象間的互操作方式。DNA體系結構中包括分布式組件對象模型(DCOM)、微軟事務服務(MTS)、微軟消息隊列(MSMQ)、互聯網信息服務器(IIS)、Windwos NT操作系統等應用技術和系統運行環境。基于DCOM模型構建的組件化應用系統可以在相關實現技術的支持下,動態響應客戶端服務請求。?
??? ●EJB規范?
Sun公司的Java2平臺企業版(Java2 Platform Enterprise Edition,J2EE)規范定義了采用Java語言創建平臺獨立、具有可移植、能夠響應多用戶請求、以服務器端組件對象模型為核心的應用系統構建方式。在J2EE規范中,包括EJB組件對象規范、JDBC數據庫訪問技術、JSP/Servlet技術、JavaMail電子郵件處理技術、JNDI命名和目錄接口技術、JTA事務服務API、JMS消息服務等。?
??? 以Java虛擬機(Java Virtual Machine,JVM)環境為基礎,采用J2EE規范構建的應用系統不需要考慮軟件系統的運行環境問題。在應用系統構建過程中,服務器可以采用高性能的、基于Unix等穩定操作系統的高端服務器,而客戶端可以采用基于Linux和Windows操作系統的低端臺式計算機。?
??? 從以上分析可以看出:J2EE規范作為以Java為程序設計語言的應用系統構建方式解決方案,不僅可以使應用系統的構成方式更加靈活,而且能夠對在不同運行環境中開發的遺留(Legacy)系統進行良好集成。?
5 EJB組件對象規范的內容?
?? EJB規范是J2EE分布式應用體系結構中的服務器端應用組件對象規范。?
EJB規范定義了應用系統的服務器端由EJB組件和組件運行的EJB容器構成。EJB容器提供組件對象的事務管理、對象持久化、遠程訪問控制、服務器端資源管理和安全性維護等多種類型的系統服務。EJB容器軟件由專業的中間件或者應用軟件開發商開發。?
按照組件對象模型思想,EJB組件以接口對象的形式向組件對象的客戶提供組件中定義方法的細節。組件開發者依照EJB規范開發的EJB組件可以部署在符合EJB規范的容器中,在運行時通過標準的接口使用EJB容器提供的系統服務。EJB2.0規范定義了三種類型的組件對象:?
●會話類型組件?
會話(Session Bean)類型組件是不需要被持久化存儲的組件對象,用于實現數學運算、邏輯分析等功能。按照組件對象能否在EJB容器中維護不同組件客戶的狀態信息,EJB2.0規范定義了有狀態(Stateful)和無狀態(Stateless)兩種類型的會話組件。?
●實體類型組件?
相對會話類型組件而言,實體(Entity Bean)類型組件對象是需要進行持久化存儲的組件對象。從組件對象構成的實際意義上講,實體類型組件通常代表系統后臺關系數據庫中的數據記錄。按照實體組件持久性狀態的維護對象不同,EJB2.0規范定義了容器管理持久性(Container-Managed Persistence,CMP)和組件管理持久性(Bean-Managed Persistence,BMP)兩種類型的實體組件。?
●消息驅動類型組件?
消息驅動(Message-Driven Bean)類型組件是EJB2.0規范中新定義的服務器端組件對象類型,用于在EJB服務器端響應基于JMS消息服務規范發送的事件消息。?
按照組件對象的定義思想,EJB組件對象的開發者不是作為組件對象產品的直接使用者。因此,EJB規范采用XML部署描述文件的形式將組件對象的類型、構成和需求的系統服務等內容通知組件對象的組裝和部署人員以及組件部署的EJB容器。?
6 EJB組件對象模型的技術優勢?
Java平臺根據軟件組件對象模型,以軟件組件中實現的商務功能為基礎,定義了企業應用級JavaBean組件(Enterprise JavaBean,EJB)。?
??? EJB組件是部署在EJB容器中的服務器端可部署(Deployable)類型組件。基于EJB組件對象的可部署能力,組件程序設計人員在對商務對象進行系統分析后,根據特定的商務規則創建EJB組件對象后,由組裝和部署人員將EJB組件部署到應用服務器中的EJB容器中。EJB容器(Container)根據客戶端的服務請求在EJB容器中動態創建EJB組件對象實例為客戶提供服務。?
??? 部署在高性能服務器中的EJB組件用于進行復雜、大量的數據分析和處理,并且依靠應用服務器來提供事務管理、多用戶訪問的并發控制及應用系統的容錯處理等。總體上講,服務器端EJB組件對象模型具有如下技術優勢:?
●提高了軟件代碼的可重用性;?
●不同類型的客戶端可以采用多種技術訪問部署在EJB容器中的組件對象;?
●軟件開發廠商可以向第三方軟件商購買具有行業特點或者軟件代碼相對復雜的EJB組件集成在待開發系統中,從而節省了大量的人力和時間、降低了軟件開發風險;
●將自己不擅長的技術細節封裝成為軟件組件,由其它軟件開發商開發,從而降低了軟件代碼中發生錯誤的機會;
??? ●EJB組件用于專門實現商務規則,而由組件部署的EJB容器提供系統級服務,從而降低了組件代碼編寫難度;
??? ●按照J2EE規范對應用系統開發過程中的角色劃分,掌握并熟練應用不同技術的軟件組織能夠發揮自身的技術優勢,從而構建出健壯的應用系統;?
●在軟件系統維護過程中,購買的軟件組件可以由作為行業專家的軟件組件開發商來維護,提高了應用系統維護效率、降低了維護成本;
??? ●有效減少應用系統開發過程中的技術難題,降低了系統構建成本。?
7 以EJB組件對象為核心的分布式應用系統構成方式?
J2EE規范根據分布式多層應用系統的各個組成部分在功能上的差別,將整個應用系統劃分成配置在不同類型應用服務器中的邏輯層。常規意義上的分布式三層/多層體系結構由客戶層、中間層和企業信息系統層構成,其中中間層可細分為WEB層和業務層。在對應用系統的組件對象進行組裝和部署過程中,需根據J2EE規范將不同性質和用途的組件對象部署到不同的應用系統邏輯層中,如下圖所示:?
圖2 基于J2EE規范劃分的企業應用系統邏輯層?
●客戶層?
客戶層用于與應用系統的用戶進行交互以及顯示系統的運行結果。客戶端的實現形式可以是支持HTML、DHTML或者JavaScript的瀏覽器,也可以是不基于瀏覽器的獨立(Stand Alone)應用程序。?
基于瀏覽器的分布式應用系統客戶端啟動后,從WEB服務器中下載靜態或由JSP/Servlet動態生成的HTML頁面。由于瀏覽器可以運行在任何應用環境中,應用目前成熟的瀏覽器頁面構造技術和WEB容器中的JSP/Servlet組件技術,完全能夠構建出符合用戶需求的用戶界面。因此,這種類型的分布式應用系統客戶端實現形式被大多數J2EE應用系統所采用。?
獨立應用程序類型的客戶端是利用Java語言集成化開發工具(IDE)編寫的、基于JVM運行的、具有用戶界面的應用程序,在應用程序中包含與中間層進行數據交換的程序代碼。這種類型的客戶端與中間層WEB組件之間的數據交換可以采用基于HTTP協議的XML技術,也可以采用解析JSP組件生成HTML代碼的方式。因此,這種類型的客戶端可以運行在手持設備或汽車電話等移動設備中,其技術優勢在于可以基于RMI/IIOP協議與其它類型的組件對象或者是遺留系統進行集成。
●中間層?
中間層由響應客戶端請求的JSP/Servlet組件和進行業務數據處理的EJB組件對象構成。通常,將JSP/Servlet組件和其運行的WEB容器稱為WEB層、將EJB組件和其運行的EJB容器稱為業務層。?
J2EE規范定義的WEB層由JSP組件或者由動態生成HTML頁面的Servlet構成。WEB層中的JSP組件能夠動態生成用于構造客戶端顯示邏輯的HTML代碼,而Servlet能夠以”請求/響應”的方式接收客戶端提出的服務請求并在接收業務層的計算結果后動態創建客戶端的顯示邏輯代碼。這些元素在組裝過程中通過打包的方式創建WEB組件。?
業務層由實現特定商務規則的EJB組件和為EJB組件提供系統服務的EJB容器構成。EJB組件響應客戶端服務請求并按照商務規則對數據進行處理后,可將處理結果發送到企業信息系統層進行存儲并將數據處理結果返回提出服務請求的客戶端。部署在業務層中的EJB組件依賴于EJB容器來提供諸如事務、生命期、狀態轉換、多線程及資源存儲等系統服務。?
企業信息系統層通常由企業資源規劃(Enterprise Resource Planning,ERP)系統、大型機事務處理(Mainframe Transaction Processing)系統、關系數據庫系統(RDMS)及其它在創建J2EE分布式應用系統之前已有的企業信息管理軟件系統構成,基于J2EE規范的分布式應用系統利用這些軟件系統存儲數據資源。由于數據存儲對象類型的差異,J2EE規范定義了JDBC、JNDI、JMS以及JavaIDL等技術,使得應用系統的中間層可以從企業信息系統中獲取數據資源以及將應用系統產生的數據存儲到信息系統中。?
8 結論?
在早期的如Vax、Cray等類型的大型機應用軟件系統中,多個客戶端與服務器直接連接,并發地向服務器發出作業請求,服務器按照商務規則對客戶端的服務請求進行處理并將結果保存在本地數據庫中。
隨著小型計算機性能的提高、軟件行業分工的細化,應用系統的構建方式逐漸以提高服務器的數據分析和處理能力,客戶端在側重于提供與客戶進行交互的圖形用戶界面基礎上,只進行簡單的用戶輸入數據合法性驗證,而獨立的數據庫服務器用于進行穩定、高數據吞吐效率的數據資源管理和服務。由于這些應用系統組成部分的邏輯功能不同,需要不同性能的計算機來完成相應功能,從而使得軟件系統構成實際意義上的分布式三層/多層應用體系結構。
正是根據增強軟件系統的可移植性、提高應用系統對各種訪問模式的兼容性、縮短應用系統的開發周期、最大程度地保護軟件客戶已有投資等方面的需求,推動了作為分布式三層/多層應用體系結構核心內容的服務器端組件對象體系結構模型的應用和發展。?
J2EE分布式體系結構規范以EJB組件對象模型為核心,著力于創建以互聯網應用技術為基礎的“瘦”客戶端類型的分布式多層軟件系統。EJB組件對象部署在高性能的應用服務器中,依賴于EJB容器提供系統服務,向前響應客戶端的服務請求,向后存儲系統數據資源。可以說:EJB軟件組件對象模型的定義,促進了分布式應用技術的普及和發展,推動了Java語言在網絡環境中的應用。?
參考文獻?
1 Sun Microsystems Inc. Guide to the Java2 Platform Enterprise Edition. 2001?
2 Ed Roman. Mastering Enterprise JavaBeans(Second Edition). Amazon Press. 2002?
3 Perrone P. J2EE構建企業系統專家級解決方案. 北京:清華大學出版社,2001?
4 艾拉瑪. J2EE編程指南. 北京:電子工業出版社,2002?
5 蘇洋. Java程序設計實例教程. 北京:希望電子出版社,2003?