專利名稱:一種J2EE應(yīng)用服務(wù)器中Web容器的集成框架的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種針對J2EE應(yīng)用服務(wù)器中Web容器集成的技術(shù)框架,屬于軟件技術(shù)領(lǐng)域。
背景技術(shù):
J2EE(Java 2 Platform Enterprise Edition)是Sun公司于1999年推出的Java企業(yè)計算平臺規(guī)范與技術(shù),為基于Java語言開發(fā)面向企業(yè)的分布應(yīng)用提供了基于構(gòu)件的解決方案,是目前應(yīng)用最為廣泛的面向Web的應(yīng)用系統(tǒng)結(jié)構(gòu)規(guī)范。圖1描述了J2EE應(yīng)用的三層體系結(jié)構(gòu)●表示層一般位于客戶端的瀏覽器或基于Java的程序;●業(yè)務(wù)層位于服務(wù)器端,包括Web容器、EJB容器和各類J2EE服務(wù)等。一般而言,Web構(gòu)件可進(jìn)行簡單的業(yè)務(wù)處理,而EJB構(gòu)件負(fù)責(zé)復(fù)雜的業(yè)務(wù)處理;●數(shù)據(jù)層也稱后端層,是遺產(chǎn)應(yīng)用和數(shù)據(jù)庫的組合,如企業(yè)資源規(guī)劃系統(tǒng)、大型主機(jī)事務(wù)處理、數(shù)據(jù)庫系統(tǒng)等。
J2EE平臺主要包括四種容器(Applet容器、Application Client容器、EJB容器以及Web容器)和各類J2EE服務(wù)(事務(wù)服務(wù),安全服務(wù),資源管理服務(wù)等),為組成分布式應(yīng)用的三大部分提供運(yùn)行支撐環(huán)境,如圖1所示,這三個部分是表示邏輯,包括Applet構(gòu)件和應(yīng)用客戶端構(gòu)件;業(yè)務(wù)邏輯,包括Web構(gòu)件和EJB構(gòu)件;數(shù)據(jù)邏輯。其中業(yè)務(wù)層的Web容器、EJB容器和J2EE服務(wù)構(gòu)成了J2EE應(yīng)用服務(wù)器。
J2EE應(yīng)用服務(wù)器中的容器為部署在其上的J2EE應(yīng)用構(gòu)件提供運(yùn)行支持。通過容器提供的協(xié)議和方法,應(yīng)用構(gòu)件可以進(jìn)行交互或訪問J2EE服務(wù)。圖1中的箭頭線表示了容器之間以及容器與數(shù)據(jù)層的交互關(guān)系。一般地,Web容器在接收到客戶的Web請求時,會由相應(yīng)的Web構(gòu)件進(jìn)行簡單的業(yè)務(wù)處理,之后再將請求轉(zhuǎn)發(fā)給EJB容器、由相應(yīng)的EJB構(gòu)件處理復(fù)雜業(yè)務(wù)邏輯并跟數(shù)據(jù)層進(jìn)行交互。
Web容器負(fù)責(zé)管理兩類構(gòu)件——Servlet構(gòu)件和JSP構(gòu)件,它們分別對應(yīng)Servlet和JSP兩個規(guī)范。由于JSP規(guī)范實際上是對Servlet規(guī)范的擴(kuò)展與延伸,所以通常這兩類構(gòu)件由同一個容器(即Web容器)管理。Web容器負(fù)責(zé)提供支撐部署在Web容器中的Servlet/JSP構(gòu)件運(yùn)行所需的機(jī)制;當(dāng)作為應(yīng)用服務(wù)器中的一個模塊時,Web容器需要提供被應(yīng)用服務(wù)器其他模塊訪問的接口,例如為管理工具提供啟動、停止和配置(包括虛擬主機(jī)配置)等一系列管理操作的管理接口,為部署工具提供部署Web構(gòu)件的部署接口等。
因為Web容器已經(jīng)有相當(dāng)成熟的實現(xiàn)技術(shù),例如業(yè)界有Apache Tomcat,Jetty等開源軟件,所以對于應(yīng)用服務(wù)器開發(fā)者來說,一般采用緊耦合的方式集成Web容器。這種方法簡單直接,在應(yīng)用服務(wù)器發(fā)展的早期很好的滿足了各方面需求。然而在應(yīng)用服務(wù)器標(biāo)準(zhǔn)升級頻繁、復(fù)雜度大幅度提高的今天,其各種弊病已日益凸顯,主要的問題可以概括為以下幾點●應(yīng)用服務(wù)器對集成的Web容器有過強(qiáng)的依賴性。應(yīng)用服務(wù)器中需要使用Web容器的各個模塊都需要直接調(diào)用Web容器的相應(yīng)方法。這種依賴性一方面限制了用戶根據(jù)需要選擇合適的Web容器的自由,另一方面也給升級或者更換Web容器造成了很大的困難。
●應(yīng)用服務(wù)器對集成的Servlet容器只能在高層進(jìn)行操作,而對其內(nèi)部模塊的可控制性較差。在這種方案下,應(yīng)用服務(wù)器只負(fù)責(zé)設(shè)定相關(guān)的參數(shù)和環(huán)境變量,而后調(diào)用Web容器自身的啟動代碼進(jìn)行啟動。對于Web容器的內(nèi)部模塊應(yīng)用服務(wù)器很難進(jìn)行控制。
●Web容器提供的配置文件、管理方式與應(yīng)用服務(wù)器本身的機(jī)制不統(tǒng)一。由于集成沒有深入到Web容器的內(nèi)部模塊,從而導(dǎo)致了對Web容器的配置以及管理都需通過Web容器提供的機(jī)制。也就是說,用戶無法通過應(yīng)用服務(wù)器的配置文件和管理工具對整個應(yīng)用服務(wù)器進(jìn)行統(tǒng)一的配置或管理。
發(fā)明內(nèi)容
針對上述問題,本發(fā)明的目的是提供一種J2EE應(yīng)用服務(wù)器中Web容器的集成框架,該框架把各種不同Web容器實現(xiàn)的配置抽象并規(guī)范化成同一種表示和配置方式,由框架來做適配,實現(xiàn)Web容器的無縫集成,從而實現(xiàn)應(yīng)用服務(wù)器配置和管理機(jī)制的統(tǒng)一;同時給予用戶選擇具體Web容器的自由。該方法的核心思想是通過一個兩層框架將Web容器的具體實現(xiàn)細(xì)節(jié)對應(yīng)用服務(wù)器的其他模塊完全屏蔽。
本發(fā)明的框架包括兩個層面,面向應(yīng)用服務(wù)器其他模塊(包括部署工具模塊,管理工具模塊等)的外層,以及面向Web容器實現(xiàn)的內(nèi)層。我們將這個框架稱為“Web容器集成框架”。如圖2所示,框架的外層由一組接口構(gòu)成,它定義了應(yīng)用服務(wù)器其他模塊(包括管理工具、部署工具和其他模塊等)與Web容器進(jìn)行交互的接口。應(yīng)用服務(wù)器中的其他模塊與Web容器的交互全部通過這組接口進(jìn)行,而不對Web容器的具體實現(xiàn)有任何依賴??蚣艿膬?nèi)層主要是對特定Web容器的包裝以及對外層接口的實現(xiàn),負(fù)責(zé)將外層接口定義的操作映射到特定Web容器提供的方法,或者用Web容器提供的方法對外層接口方法進(jìn)行模擬。在這樣一個框架下,實現(xiàn)者可以同時集成多種Web容器而無需對應(yīng)用服務(wù)器的其他模塊做任何修改。
根據(jù)本發(fā)明的目的,所述的Web容器集成框架包括外層接口和內(nèi)層接口1、框架外層(外層接口)Web容器管理框架的外層接口定義了Web容器對外提供的所有方法;其獨立于Web容器實現(xiàn),是用于實現(xiàn)應(yīng)用服務(wù)器中其他模塊與Web容器交互的接口;應(yīng)用服務(wù)器的其他模塊通過這組方法訪問Web容器提供的服務(wù)或?qū)eb容器進(jìn)行管理。
通常,一個完整的Web服務(wù)器包含一個或多個的“虛擬主機(jī)”(所謂虛擬主機(jī),就是在一個物理的服務(wù)器上配置多個域名,每個域名對應(yīng)相同或不同的應(yīng)用。這樣,客戶端看起來好像是有多個主機(jī);Web容器在收到請求時,根據(jù)客戶端給出的域名確定處理該請求的虛擬主機(jī)),在每個虛擬主機(jī)中又可以部署一個或多個Web應(yīng)用。
根據(jù)這樣一種層次結(jié)構(gòu),我們抽象出如下三個接口作為Web容器集成框架的外層接口(1)WebController該接口代表了整個Web容器,任何需要使用或操作Web容器的模塊都需要通過該接口進(jìn)行。該接口提供的方法包括啟動與停止Web容器,或者添加刪除虛擬主機(jī)以及獲取已定義的虛擬主機(jī)實例等。
(2)VirtualHost該接口代表一個虛擬主機(jī)。虛擬主機(jī)同時是部署Web應(yīng)用的容器,一個應(yīng)用在同一時間只能被部署在一個虛擬主機(jī)上。該接口提供的方法包括啟動與停止該虛擬主機(jī)和部署與卸載Web應(yīng)用等。
(3)VirtualApp該接口代表了一個部署在服務(wù)器上的Web應(yīng)用。通過該接口可以得到具體應(yīng)用的信息,包括應(yīng)用根目錄的本地路徑和映射的上下文路徑等。另外該接口還提供部署、啟動、停止和卸載應(yīng)用的方法。
這三個接口反映了Web容器的邏輯層次結(jié)構(gòu),能夠滿足應(yīng)用服務(wù)器其他模塊對Web容器的訪問,并且完全獨立于所集成的Web容器,很好地將Web容器的內(nèi)部實現(xiàn)細(xì)節(jié)隱藏了起來。
2、框架內(nèi)層(內(nèi)層接口)Web容器框架內(nèi)層的主要功能是為外層接口到特定Web容器提供的方法進(jìn)行適配,即,對特定Web容器進(jìn)行包裝、擴(kuò)展或改良,用于匹配外層接口。為了完成該功能,內(nèi)層需要實現(xiàn)的內(nèi)容包括(1)接入應(yīng)用服務(wù)器管理框架所需的接口。Web容器集成到應(yīng)用服務(wù)器中,需要遵從一定的管理規(guī)則,即實現(xiàn)接入應(yīng)用服務(wù)器內(nèi)核的管理接口。例如一般應(yīng)用服務(wù)器都會采用Java Management Beans接口(Java Management Extensions規(guī)范的組成部分)來實施統(tǒng)一管理,因此Web容器為納入應(yīng)用服務(wù)器整理管理框架也必須實現(xiàn)MBeans接口。
(2)實現(xiàn)框架外層中定義的接口,將框架外層所定義的功能映射到Web容器所提供的功能。若集成的Web沒有相應(yīng)的功能,則通過類似功能進(jìn)行模擬或者直接實現(xiàn)該功能。一般來說特定的Web容器實現(xiàn)都會有相關(guān)模塊進(jìn)行匹配。例如流行的Web容器實現(xiàn)ApacheTomcat的結(jié)構(gòu)就和外層接口有比較好的對應(yīng)關(guān)系WebController的功能映射到TomcatEngine模塊;VirtualHost的功能映射到Tomcat Host模塊;VirtualApp功能映射到TomcatContext模塊。
內(nèi)層接口最終的類圖如圖3所示,從中可以看到內(nèi)層對外層接口的實現(xiàn)和對管理接口的實現(xiàn)。其中,Server和WebControllerBase類是對WebController接口的實現(xiàn),HostWrapper和VirtualHostBase類是對VirtualHost接口的實現(xiàn),AppWrapper和VirtualAppBase是對VirtualApp接口的實現(xiàn)等。
本發(fā)明的技術(shù)效果在于1、Web容器的內(nèi)部實現(xiàn)細(xì)節(jié)被完全隱藏起來,僅暴露出用戶真正關(guān)心的通用的配置接口。因此給予用戶選擇不同Web容器的自由,并且其替換和升級非常容易。
2、Web容器的配置方式被重新設(shè)計,很好地整合到了應(yīng)用服務(wù)器中,實現(xiàn)了應(yīng)用服務(wù)器配置和管理機(jī)制的統(tǒng)一。因此用戶可以通過應(yīng)用服務(wù)器的配置文件和管理工具對包括Web容器在內(nèi)的整個應(yīng)用服務(wù)器進(jìn)行統(tǒng)一的配置和管理。
圖1是J2EE體系結(jié)構(gòu)示意圖;圖2是Web容器的兩層集成框架示意圖;圖3是Web容器集成框架的內(nèi)層類圖;圖4是實施例中PKUAS體系結(jié)構(gòu)示意圖;圖5是Web容器集成框架應(yīng)用于PKUAS的實施范例圖。
具體實施例方式
以下結(jié)合附圖,描述Web容器集成框架的具體實施例,但不構(gòu)成對本發(fā)明的限制。
本節(jié)給出一個基于北京大學(xué)信息科學(xué)技術(shù)學(xué)院軟件研究所開發(fā)的J2EE應(yīng)用服務(wù)器PKUAS的Web容器集成框架的實現(xiàn),采用的Web容器為Apache Tomcat。對應(yīng)用服務(wù)器PKUAS和Web容器Tomcat的分析如下PKUAS(Peking University Application Server)是北京大學(xué)信息科學(xué)技術(shù)學(xué)院軟件研究所自主開發(fā)的應(yīng)用服務(wù)器,兼容J2EE1.3與EJB2.0規(guī)范。PKUAS借鑒源自操作系統(tǒng)的微內(nèi)核思想,設(shè)計了基于微內(nèi)核、高度構(gòu)件化的平臺體系結(jié)構(gòu)。如圖4所示,PKUAS構(gòu)建在Java虛擬機(jī)之上,抽取構(gòu)件運(yùn)行平臺的基本功能形成一個微內(nèi)核,將平臺的其他功能(容器,服務(wù)和工具等)封裝在各個相對獨立的模塊內(nèi)(稱為系統(tǒng)構(gòu)件),允許用戶定制與擴(kuò)展這些系統(tǒng)構(gòu)件,在系統(tǒng)啟動階段由內(nèi)核裝配成應(yīng)用服務(wù)器。
Apache Tomcat是Servlet規(guī)范的參考實現(xiàn),其內(nèi)部結(jié)構(gòu)如圖5所示。這是一個較為典型和完整的Web容器結(jié)構(gòu),其他實現(xiàn)或多或少地具有類似的結(jié)構(gòu)。Tomcat有著整齊清晰的內(nèi)部結(jié)構(gòu),各個邏輯模塊間有著明確的分工,每個模塊的責(zé)任通過一系列的接口進(jìn)行定義。這組接口實際上構(gòu)成了一個開放框架,描繪了各個內(nèi)部模塊間的職責(zé)及其交互關(guān)系。參見圖5,Tomcat的關(guān)鍵功能模塊有●ConnectorConnector模塊負(fù)責(zé)接收來自客戶端的請求,并將請求的處理結(jié)果反饋給客戶端。每個Connector實例實際上實現(xiàn)的是一種網(wǎng)絡(luò)傳輸協(xié)議,它將通過這種協(xié)議傳入的客戶端請求進(jìn)行分析,構(gòu)造相應(yīng)的Request和Response實例,找出適合相應(yīng)該請求的Container實例,調(diào)用該Container的invoke方法并將Request和Response實例作為參數(shù)傳入,最終將處理結(jié)果或者錯誤信息反饋給客戶端。
●EngineEngine是Container的子接口,它代表了整個Servlet引擎。在運(yùn)行中,Engine永遠(yuǎn)是Container層次結(jié)構(gòu)的最高級,所以其setParent()方法如被調(diào)用將總是拋出IllegalArgumentException異常。一個Engine的子Container通常是一個或多個的Host實例。
●HostHost代表的實際上就是常說的“虛擬主機(jī)”的概念。在一個Tomcat Web服務(wù)器中可以同時運(yùn)行多個Host,每個Host都與一個特定的主機(jī)名以及任意個“別名”相綁定。每個客戶端的請求都會根據(jù)主機(jī)名映射到相應(yīng)的Host進(jìn)行處理。Host的下級Container通常是一些Context實例。
●Context一個Context就是一個獨立的Web應(yīng)用。它包括了Web應(yīng)用的所有Servlet類、JSP文件、靜態(tài)頁面和圖片、Jar包、環(huán)境變量、各種配置參數(shù)以及其他各種資源。Context的下級Container通常是Wrapper的實例。
根據(jù)以上對對應(yīng)用服務(wù)器PKUAS和Web容器Tomcat的分析,本實施例中Web容器集成框架實現(xiàn)為PKUAS中Web容器集成框架的外層采用如前所述的接口結(jié)構(gòu),WebController,VirtualHost和VirtualApp接口的實現(xiàn)代碼部分摘錄如下
PKUAS中Web容器框架的內(nèi)層實現(xiàn)包括如前所述的兩項主要內(nèi)容(1)實現(xiàn)接入PKUAS微內(nèi)核的MBeans(由于PKUAS采用了Java Management Beans規(guī)范,所以Web容器作為PKUAS平臺上的一個系統(tǒng)構(gòu)件也必須按照規(guī)范實現(xiàn)MBeans接口)。實現(xiàn)代碼部分摘錄如下
(2)實現(xiàn)外層接口到Apache Tomcat功能接口的映射。根據(jù)前面對Tomcat結(jié)構(gòu)的分析可以知道,Tomcat的結(jié)構(gòu)和框架外層接口定義具有比較好的對應(yīng)關(guān)系。因此,框架內(nèi)層的實現(xiàn)比較直接WebController的功能映射到Tomcat Engine模塊;VirtualHost的功能映射到Tomcat Host模塊;VirtualApp功能映射到TomcatContext模塊。實現(xiàn)代碼部分摘錄如下
這樣便完成了本文所提出的Web容器集成框架在PKUAS上的實現(xiàn)。
以上通過具體實施例詳細(xì)描述了本發(fā)明,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,在不脫離本發(fā)明實質(zhì)的范圍內(nèi),可以對本發(fā)明進(jìn)行各種變形和修改。
權(quán)利要求
1.一種Web容器集成框架,其特征在于,使用一個兩層結(jié)構(gòu)的Web容器集成框架集成各種特定的Web容器實現(xiàn),所述的框架包括1)外層接口,獨立于Web容器實現(xiàn),用于實現(xiàn)應(yīng)用服務(wù)器中其他模塊與Web容器交互的接口;2)內(nèi)層接口,對特定Web容器進(jìn)行包裝、擴(kuò)展或改良,用于匹配外層接口。
2.如權(quán)利要求1所述的Web容器集成框架,其特征在于,所述的外層接口包括WebController接口,用于啟動與停止Web容器;VirtualHost接口,用于啟動與停止相應(yīng)的虛擬主機(jī);VirtualApp接口,用于部署、啟動、停止和卸載應(yīng)用。
3.如權(quán)利要求1所述的Web容器集成框架,其特征在于,所述的內(nèi)層接口包括接入應(yīng)用服務(wù)器管理框架所需的接口,用于實現(xiàn)接入應(yīng)用服務(wù)器內(nèi)核的管理;實現(xiàn)框架外層中定義的接口,用于將框架外層所定義的功能映射到特定Web容器所提供的功能。
4.如權(quán)利要求2所述的Web容器集成框架,其特征在于,所述的WebController接口還用于添加、刪除虛擬主機(jī)以及獲取已定義的虛擬主機(jī)實例。
5.如權(quán)利要求2所述的Web容器集成框架,其特征在于,所述的VirtualHost接口還用于部署與卸載Web應(yīng)用。
6.如權(quán)利要求2所述的Web容器集成框架,其特征在于,所述的VirtualApp接口還可用于獲取具體應(yīng)用的信息,包括應(yīng)用根目錄的本地路徑和映射的上下文路徑。
7.如權(quán)利要求3所述的Web容器集成框架,其特征在于,所述的內(nèi)層接口包括以下幾類Server和WebControllerBase類,是對外層WebController接口的實現(xiàn);HostWrapper和VirtualHostBase類,是對外層VirtualHost接口的實現(xiàn);AppWrapper和VirtualAppBase,是對外層VirtualApp接口的實現(xiàn)。
8.如權(quán)利要求7所述的Web容器集成框架,其特征在于,所述的Server類還用于實現(xiàn)管理接口ServerMBean。
全文摘要
一種Web容器集成框架,使用一個兩層結(jié)構(gòu)的Web容器集成框架集成各種特定的Web容器實現(xiàn),所述的框架包括1)外層接口,獨立于Web容器實現(xiàn),用于實現(xiàn)應(yīng)用服務(wù)器中其他模塊與Web容器交互的接口,包括WebController接口、VirtualHost接口和VirtualApp接口;2)內(nèi)層接口,對特定Web容器進(jìn)行包裝、擴(kuò)展或改良,用于匹配外層接口,包括接入應(yīng)用服務(wù)器管理框架所需的接口和實現(xiàn)框架外層中定義的接口。該框架使Web容器的內(nèi)部實現(xiàn)細(xì)節(jié)被完全隱藏起來,僅暴露出用戶真正關(guān)心的通用的配置接口,因此給予用戶選擇不同Web容器的自由,并且其替換和升級非常容易;而且Web容器的配置方式被重新設(shè)計,很好地整合到了應(yīng)用服務(wù)器中,實現(xiàn)了應(yīng)用服務(wù)器配置和管理機(jī)制的統(tǒng)一。
文檔編號G06F9/44GK1987773SQ20051013066
公開日2007年6月27日 申請日期2005年12月20日 優(yōu)先權(quán)日2005年12月20日
發(fā)明者梅宏, 周明輝, 林泊, 曹東剛 申請人:北京大學(xué)