什麼是打包和部署?
J2EE平台的主要特色之一在於開發人員可以在其之上整合不同的組件,這個將組件整合為模塊並將模塊整合為商業應用程序的過程叫做打包。而在一個可使用環境的安裝和定制應用程序的過程則叫做部署。為了能夠更好地被定制,應用程序的組件需要是可配置的,然而,開發人員不應該持續開發不同的配置機制,相反地,使用標准機制並對配置過程提供相當的靈活度是非常重要的。
J2EE平台為打包和部署提供了相應的工具,使得其過程相對簡單。主要來說,它使用Java檔案文件(JAR)作為組件和應用打包之後的標准整合結果,同時它還使用基於XML的描述文件來配置組件和應用程序。J2EE技術規范為J2EE應用程序的結構建立和生成提供了指導,其中一條原則就是與打包(packaging)有關,具體的技術規范為諸如EJB、JSP網頁和servlet等組件的打包提供了指導;J2EE平台規格描述提供一個將一個或多個組件集成為一個模塊的方法,即為任何組件類型的最小單元提供獨立部署,一個模塊可以直接部署至J2EE容器中,或多個模塊可以集合起來組建一個J2EE應用程序;例如,幾個ejb組件可以被打包為應用模型中的一個EJB模塊,同時這個EJB模塊也可以進一步與其他模塊結合以建造一個完整的J2EE應用。
J2EE打包綜述
一個J2EE應用程序包括下列部分:一個或者多個J2EE組件;一個J2EE應用程序實施描述符。 在一個或者多個異類J2EE組件需要彼此使用對方的時候,必須生成一個J2EE應用程序(application)。在建立一個J2EE應用程序時必須考慮到多個方面,其中包括:
1、可以打包成一個J2EE應用程序的J2EE組件類型;
2、當人們生成J2EE包時扮演的角色;
3、當前的J2EE打包限制;
不同廠商為滿足J2EE組件交互而采用的類裝入方式。
1、用J2EE打包組件
一個J2EE組件,例如servlet或EJB,是與組件描述中定義的接口保持一致的獨立功能軟件單位,並且這類軟件很明顯地依賴於其生存環境。組件也許是一個單一的類,但也經常是類、接口和資源的集合。J2EE平台提供五種類型的組件:EJB,servlets和JSP,applet,應用客戶程序以及連接器(connector)。
J2EE平台中的模塊和應用程序被作為部署單元而打包和部署,這種過程所得到的壓縮文檔與JAR文件類似,但具有一個指定的內部結構和文件擴展名。通常來說,存在四種不同類型的J2EE平台模塊:
(l)EJB模塊,其中包含ejb文件及相應類;EJB模塊是一個可實施的單元,包括EJB、關聯的庫JAR文件以及資源。 EJB模塊被預打包成JAR文件,在JAR文件的META-INF目錄中有一個實施描述符 (ejb-jar.xml)。
(2)Web模塊,其中包含Web層的組件及資源;Web模塊是一種可以實施的單元,由Java Servlets、JSP網頁、JSP標志庫、庫JAR文件、HTML/XML文檔及其他公共資源如圖片,applet類文件等組成。一個Web模塊打包成一個Web ARchive file,也稱為一個WAR文件。WAR文件類似於JAR文件,只是WAR文件包含一個WEB-INF目錄,在web.xml文件中包含實施說明。
(3)應用客戶模塊,其中包含應用客戶類;應用程序客戶模塊JAR文件包含一個獨立的Java應用程序,它將要在應用程序客戶容器中運行。這個應用程序客戶JAR文件包含一個專門化的實施描述符,其構成與EJB JAR文件類似。JAR文件包含運行獨立的客戶所需的類,當然還包括訪問JDBC、JMS、JAXP、JAAS或者EJB客戶所需的任何客戶庫。
(4)資源適配器模塊,其中包含Java連接器(connector)、資源適配器和幫助庫函數及相關資源。資源適配器RAR文件包含在一個企業信息系統中實現一個Java Connector Architecture(JCA)資源適配器所需的本機(native)庫和Java類。資源適配器並不在一個容器內執行,而是設計成一個橋梁在應用程序服務器和外部企業信息系統之間運行;這些部件每個都是單獨開發和打包的,除了J2EE EAR文件和自己的實施描述符之外;J2EE EAR文件是一個或者多個這些組件的一種結合,成為一個帶有自定義實施描述符的統一的包。
2、打包角色
在建立、實施和使用EJB、Web應用程序或者其他組件時,不同的人將扮演不同的角色。J2EE技術規范定義了一個寬泛的系統平台角色(platform role),這是開發者在生成企業應用程序時扮演的。盡管在開發和實施過程中人們會想到有多種角色,但實際上這些角色只不過是一些邏輯上的概念,目的是使得人們可以更好地規劃和執行一個應用程序。一個人或者機構很可能(而且希望是)具有多重角色。EAR文件的建立、實施或者使用中的普通角色包括:
1) J2EE產品提供者
J2EE產品提供者提供了J2EE系統平台的一個實現,其中包括所有適當的J2EE API及此技術規范中定義的其他特性。J2EE產品提供者典型情況下是一個應用程序服務器,Web服務器或者數據庫系統廠商,它通過把技術規范和組件映射到網絡協議而提供了一個適當的實現。
2) 應用程序組件提供者
應用程序組件提供者提供了一個J2EE組件,例如一個EJB應用程序或者一個Web應用程序。在J2EE技術規范中還有許多角色可以具有應用程序組件提供者的特點。這些包括文檔開發者、JSP作者、企業bean開發者和資源適配器開發者。
3) 應用程序組裝者
應用程序組裝者負責把一個或者多個J2EE組件結合到一個EAR文件中以生成一個J2EE應用程序。應用程序組裝者還負責生成J2EE應用程序實施描述符,並且標識出此應用程序可能需要的任何外部資源。其中包括類庫、安全性角色和命名環境。應用程序組裝者一般將使用J2EE產品提供者和工具提供者提供的工具。
4) 工具提供者
工具提供者提供相關的實用程序來自動實現J2EE應用程序的生成、打包和實施。工具提供者可以提供相關的工具來自動為一個EAR文件生成實施描述符、生成EAR文件以及把EAR文件實施到應用程序服務器。工具提供者提供的實用程序既可以是獨立於系統平台的(適用於不論任何環境下的所有EAR文件),也可以是與系統平台相關的(適用於一種特定環境下的本機功能)。
5) 實施者
實施者負責把Web應用程序和EJB應用程序實施到服務器環境中。實施者並不負責實施資源適配器檔案文件或者應用程序--客戶檔案文件,但也可能會負責這些組件的相關配置。這些組件即使是作為J2EE EAR文件的一部分打包,在企業應用程序實施的時候也不會被考慮。它們是J2EE應用程序的組成部分,但並不通過一個運行時的"激活過程(activation)"而組合,而Web應用程序和EJB容器在實施過程中要經過這個激活過程。資源適配器檔案文件就是一個合法JCA實現的庫。盡管它們被打包成一個J2EE EAR文件的組成部分,但它們並不在J2EE容器的上下文環境中運行。因此,由於資源適配器檔案文件並沒有J2EE容器,它們在激活過程中也不需要有J2EE實施者。
應用程序客戶程序確實是在J2EE容器的上下文環境中運行,但是它們並不實施在應用程序服務器中。應用程序客戶程序獨立運行,實施者並不負責為這些程序配置容器環境。
實施者生成准備好供容器使用的Web應用程序、EJB應用程序,applet和已經針對應用程序服務器的目標環境定制的應用程序客戶。
6) 系統管理員
系統管理員負責配置網絡和運行環境供應用程序服務器和J2EE應用程序在其中運行。系統管理員還負責監視和維護J2EE應用程序。
3、打包的限制
EAR文件滿足了打包應用程序的基本要求, 因為大多數基於Web的J2EE應用程序完全由Web和EJB應用程序組成。但是EAR文件缺乏打包復雜的J2EE應用程序的能力。例如,下列組件不能在一個EAR文件中被聲明,但經常用於一個J2EE應用程序:
1) JDBC DataSource對象;
2) JMS ConnectionFactory和Destination對象;
3) JMX Mbeans;
4) 在應用程序服務器中運行的一些JMS消費者,如MessageConsumer作為SeverSession的一部分運行;
5) 當應用程序被實施和卸出(un-deployed)時觸發的類。(這些類是由廠商提供的專門擴展,不是J2EE技術規范的規定。但是,所有的廠商一般都提供它們。)
目前這些組件都需要被手工配置以及通過實施廠商提供的管理接口配置和實施,並且這也是系統管理員的責任。隨著時間的推移,這些項目的使用將會增加,因而EAR文件支持這些組件的打包也是很重要的,以便使應用程序的移植成為可能。
在下一部分中我將介紹如何打包J2EE應用程序