今天,越來越多的開發者想要編寫企業級的分布式的事務處理應用程序,而這些應用程序必須可以發揮速度、安全性和服務器端技術的可靠性。如果你已經在這一領域從事工作,你應該了解在現在這個高速發展、要求苛刻的電子商務和信息技術的世界中,企業級的應用程序必須具有以下特點:花費更少的金錢、具有更快的速度、占用更少的資源。
為了減少費用,快速設計和開發企業級的應用程序,Java 2 Platform, Enterprise Edition (J2EE)技術提供了一個基于組件的方法來設計、開發、裝配和部署企業級應用程序。J2EE平臺提供了一個多層結構的分布式的應用程序模型,該模型具有重用組件的能力、基于擴展標記語言(XML)的數據交換、統一的安全模式和靈活的事務控制。你不僅可以比以前更快地發表對市場的新的解決方案,而且你的獨立于平臺的基于組件的J2EE解決方案不再受任何提供商的產品和應用程序編程界面(APIs)的限制。提供商和買主都可以自己選擇最合適于它們的商業應用和所需技術的產品和組件。
1、分布式的多層應用程序
J2EE平臺使用了一個多層的分布式的應用程序模型。應用程序的邏輯根據其實現的不同功能被封裝到組件中,組成J2EE應用程序的大量應用程序組件根據在其所屬的多層的J2EE的環境中所處的層被安裝到不同的機器中。圖1-1表示了兩個多層的J2EE應用程序根據下面的描述被分為不同的層。在圖1-1中涉及的J2EE應用程序的各個部分將在J2EE組件中給出詳細描述。
1、運行在客戶端機器的客戶層組件。
2、運行在J2EE服務器中的Web層組件。
3、運行在J2EE服務器中的商業層組件。
4、運行在EIS服務器中的企業信息系統(EIS)層軟件。
盡管從圖1-1中可以看到J2EE應用程序既可以是三層結構,也可以是四層結構,但是我們通常將J2EE應用程序的多層結構考慮為三層結構。這是因為它們分布在三個不同的位置:客戶端機器、J2EE服務器機器和在后端的傳統的機器。三層結構的應用程序可以理解為在標準的兩層結構的客戶端/服務器模式的客戶端應用程序和后端存儲資源中間增加了一個多線程的應用程序服務器。
為了減少費用,快速設計和開發企業級的應用程序,Java 2 Platform, Enterprise Edition (J2EE)技術提供了一個基于組件的方法來設計、開發、裝配和部署企業級應用程序。J2EE平臺提供了一個多層結構的分布式的應用程序模型,該模型具有重用組件的能力、基于擴展標記語言(XML)的數據交換、統一的安全模式和靈活的事務控制。你不僅可以比以前更快地發表對市場的新的解決方案,而且你的獨立于平臺的基于組件的J2EE解決方案不再受任何提供商的產品和應用程序編程界面(APIs)的限制。提供商和買主都可以自己選擇最合適于它們的商業應用和所需技術的產品和組件。
1、分布式的多層應用程序
J2EE平臺使用了一個多層的分布式的應用程序模型。應用程序的邏輯根據其實現的不同功能被封裝到組件中,組成J2EE應用程序的大量應用程序組件根據在其所屬的多層的J2EE的環境中所處的層被安裝到不同的機器中。圖1-1表示了兩個多層的J2EE應用程序根據下面的描述被分為不同的層。在圖1-1中涉及的J2EE應用程序的各個部分將在J2EE組件中給出詳細描述。
1、運行在客戶端機器的客戶層組件。
2、運行在J2EE服務器中的Web層組件。
3、運行在J2EE服務器中的商業層組件。
4、運行在EIS服務器中的企業信息系統(EIS)層軟件。
盡管從圖1-1中可以看到J2EE應用程序既可以是三層結構,也可以是四層結構,但是我們通常將J2EE應用程序的多層結構考慮為三層結構。這是因為它們分布在三個不同的位置:客戶端機器、J2EE服務器機器和在后端的傳統的機器。三層結構的應用程序可以理解為在標準的兩層結構的客戶端/服務器模式的客戶端應用程序和后端存儲資源中間增加了一個多線程的應用程序服務器。

圖1-1:多層結構的應用程序
2、J2EE組件
J2EE應用程序由組件組成。一個J2EE組件就是一個自帶功能的軟件單元,它隨同它相關的類和文件被裝配到J2EE應用程序中,并實現與其它組件的通信。J2EE規范是這樣定義J2EE組件的:
客戶端應用程序和applet是運行在客戶端的組件。
Java Servlet和JavaServer Pages (JSP)是運行在服務器端的Web組件。
Enterprise JavaBean(EJB)組件(enterprise bean)是運行在服務器端的商業軟件。
J2EE組件由Java編程語言寫成,并和用該語言寫成的其它程序一樣進行編譯。J2EE組件和"標準的"Java類的不同點在于:它被裝配在一個J2EE應用程序中,具有固定的格式并遵守J2EE規范,它被部署在產品中,由J2EE服務器對其進行管理。
3、J2EE客戶端
一個J2EE客戶端既可以是一個Web客戶端,也可以是一個應用程序客戶端。
3.1 Web客戶端
一個Web客戶端由兩部分組成:由運行在Web層的Web組件生成的包含各種標記語言(HTML、XML等等) 的動態Web頁面和接受從服務器傳送來的頁面并將它顯示出來的Web頁面。
一個Web客戶端有時被稱之為瘦客戶端。瘦客戶端一般不做象數據庫查詢、執行復雜的商業規則及連接傳統應用程序這樣的操作。當你使用一個瘦客戶端時,象這樣的重量級的操作被交給了在J2EE服務器執行的enterprise bean。這樣就可以充分發揮J2EE服務器端技術在安全性、速度、耐用性和可靠性方面的優勢。
3.2 Applets
從Web層接收的一個Web頁面可以包含內嵌的applet。一個applet是一個用Java編程語言編寫的小的客戶端應用程序,它在安裝在Web瀏覽器中的Java虛擬機中運行。然而,為了在Web瀏覽器中成功地運行applet,客戶端系統很可能需要Java插作和安全策略文件。
Web組件是用來建立一個Web客戶端程序的首選的API,因為這樣在客戶端系統中就不需要插件和安全策略文件。同樣的,使用Web組件可以有效地改善應用程序設計,因為它們提供了一個將應用程序設計和Web頁面設計有效分離的途徑。Web頁面的設計者可以不必關心Java編程語言的語法就能很好地完成自己的工作。
J2EE應用程序由組件組成。一個J2EE組件就是一個自帶功能的軟件單元,它隨同它相關的類和文件被裝配到J2EE應用程序中,并實現與其它組件的通信。J2EE規范是這樣定義J2EE組件的:
客戶端應用程序和applet是運行在客戶端的組件。
Java Servlet和JavaServer Pages (JSP)是運行在服務器端的Web組件。
Enterprise JavaBean(EJB)組件(enterprise bean)是運行在服務器端的商業軟件。
J2EE組件由Java編程語言寫成,并和用該語言寫成的其它程序一樣進行編譯。J2EE組件和"標準的"Java類的不同點在于:它被裝配在一個J2EE應用程序中,具有固定的格式并遵守J2EE規范,它被部署在產品中,由J2EE服務器對其進行管理。
3、J2EE客戶端
一個J2EE客戶端既可以是一個Web客戶端,也可以是一個應用程序客戶端。
3.1 Web客戶端
一個Web客戶端由兩部分組成:由運行在Web層的Web組件生成的包含各種標記語言(HTML、XML等等) 的動態Web頁面和接受從服務器傳送來的頁面并將它顯示出來的Web頁面。
一個Web客戶端有時被稱之為瘦客戶端。瘦客戶端一般不做象數據庫查詢、執行復雜的商業規則及連接傳統應用程序這樣的操作。當你使用一個瘦客戶端時,象這樣的重量級的操作被交給了在J2EE服務器執行的enterprise bean。這樣就可以充分發揮J2EE服務器端技術在安全性、速度、耐用性和可靠性方面的優勢。
3.2 Applets
從Web層接收的一個Web頁面可以包含內嵌的applet。一個applet是一個用Java編程語言編寫的小的客戶端應用程序,它在安裝在Web瀏覽器中的Java虛擬機中運行。然而,為了在Web瀏覽器中成功地運行applet,客戶端系統很可能需要Java插作和安全策略文件。
Web組件是用來建立一個Web客戶端程序的首選的API,因為這樣在客戶端系統中就不需要插件和安全策略文件。同樣的,使用Web組件可以有效地改善應用程序設計,因為它們提供了一個將應用程序設計和Web頁面設計有效分離的途徑。Web頁面的設計者可以不必關心Java編程語言的語法就能很好地完成自己的工作。
3.3 應用程序客戶端
一個J2EE應用程序客戶端運行在客戶端機器上,它使得用戶可以處理需要比標記語言所能提供的更豐富的用戶界面的任務。具有代表性的是用Swing或抽象窗口工具包(AWT)API建立的圖形用戶界面(GUI),但是一個命令行界面也是當然可能的。
應用程序客戶端直接訪問運行在商業層的enterprise bean。然而,如果應用程序需要授權, 一個J2EE應用程序客戶端可以打開一個HTTP連接來與一個運行在Web層的servlet建立通信。
4、JavaBeans組件體系結構
服務器層和客戶層也可以包含以JavaBean組件體系結構(JavaBeans組件)為基礎的組件來管理在一個應用程序客戶端或applet與運行在J2EE服務器上的組件之間的數據流動以及服務器端組件與數據庫之間的數據流動。在J2EE規范中JavaBeans組件不被認為是J2EE組件。
JavaBeans組件具有實例變量以及用來訪問實例變量中的數據的get方法和set方法。作這種用途的JavaBeans組件在設計和執行時相當簡單,但是它必須遵守JavaBeans組件體系結構的命令和設計慣例。
5、J2EE服務器通信
圖1-2顯示了客戶層組成的多種方式。客戶端可以直接和運行在J2EE服務器中的商業層進行通信。如果是一個運行在瀏覽器中的客戶端,也可以通過運行在Web層中的JSP頁面和Servlet進行這種通信。
你的J2EE應用程序是采用瘦客戶端還是胖客戶端。要作出這樣的決定,你應該明白將胖客戶端是將功能留在客戶端,使它與用戶更接近,而瘦客戶端是將功能的實現盡可能地交給服務器。由服務器處理更多的功能,就更容易分發、部署和管理應用程序;而將更多的功能留在客戶端對于有經驗的用戶也許是個明智的選擇。
一個J2EE應用程序客戶端運行在客戶端機器上,它使得用戶可以處理需要比標記語言所能提供的更豐富的用戶界面的任務。具有代表性的是用Swing或抽象窗口工具包(AWT)API建立的圖形用戶界面(GUI),但是一個命令行界面也是當然可能的。
應用程序客戶端直接訪問運行在商業層的enterprise bean。然而,如果應用程序需要授權, 一個J2EE應用程序客戶端可以打開一個HTTP連接來與一個運行在Web層的servlet建立通信。
4、JavaBeans組件體系結構
服務器層和客戶層也可以包含以JavaBean組件體系結構(JavaBeans組件)為基礎的組件來管理在一個應用程序客戶端或applet與運行在J2EE服務器上的組件之間的數據流動以及服務器端組件與數據庫之間的數據流動。在J2EE規范中JavaBeans組件不被認為是J2EE組件。
JavaBeans組件具有實例變量以及用來訪問實例變量中的數據的get方法和set方法。作這種用途的JavaBeans組件在設計和執行時相當簡單,但是它必須遵守JavaBeans組件體系結構的命令和設計慣例。
5、J2EE服務器通信
圖1-2顯示了客戶層組成的多種方式。客戶端可以直接和運行在J2EE服務器中的商業層進行通信。如果是一個運行在瀏覽器中的客戶端,也可以通過運行在Web層中的JSP頁面和Servlet進行這種通信。
你的J2EE應用程序是采用瘦客戶端還是胖客戶端。要作出這樣的決定,你應該明白將胖客戶端是將功能留在客戶端,使它與用戶更接近,而瘦客戶端是將功能的實現盡可能地交給服務器。由服務器處理更多的功能,就更容易分發、部署和管理應用程序;而將更多的功能留在客戶端對于有經驗的用戶也許是個明智的選擇。

圖1-2 服務器通信
5.1 Web組件
J2EE的Web組件既可以是servlet也可以是JSP頁面。Servlets是一個Java編程語言類,它可以動態地處理請求并作出響應。JSP頁面是一個基于文本的文檔,它以servlet的方式執行,但是它可以更方便建立靜態內容。
在裝配應用程序時,靜態的HTML頁面和applet被綁定到Web組件中,但是它們并不被J2EE規范視為Web組件。服務器端的功能類也可以被綁定到Web組件中,與HTML頁面一樣,它們也不被J2EE規范視為Web組件。
正如圖1-3中所示,和客戶層一樣,Web層也可以包含一個JavaBeans組件以管理用戶的輸入并將輸入發送到運行在商業層的enterprise bean進行處理。
J2EE的Web組件既可以是servlet也可以是JSP頁面。Servlets是一個Java編程語言類,它可以動態地處理請求并作出響應。JSP頁面是一個基于文本的文檔,它以servlet的方式執行,但是它可以更方便建立靜態內容。
在裝配應用程序時,靜態的HTML頁面和applet被綁定到Web組件中,但是它們并不被J2EE規范視為Web組件。服務器端的功能類也可以被綁定到Web組件中,與HTML頁面一樣,它們也不被J2EE規范視為Web組件。
正如圖1-3中所示,和客戶層一樣,Web層也可以包含一個JavaBeans組件以管理用戶的輸入并將輸入發送到運行在商業層的enterprise bean進行處理。

圖1-3 Web層和J2EE應用程序
5.2 商業組件
商業代碼,表示了例如銀行、零售和財政這樣的特定的商業領域的相適應的邏輯。它由運行在商業層的enterprise bean處理。圖1-4顯示了一個enterprise bean如何從客戶端接受數據,對它進行處理(如果需要),并將其發送到企業信息系統層以作存儲。一個enterprise bean也可以從存儲器獲取數據,對它進行處理(如果需要),并將其發送到客戶端應用程序。
商業代碼,表示了例如銀行、零售和財政這樣的特定的商業領域的相適應的邏輯。它由運行在商業層的enterprise bean處理。圖1-4顯示了一個enterprise bean如何從客戶端接受數據,對它進行處理(如果需要),并將其發送到企業信息系統層以作存儲。一個enterprise bean也可以從存儲器獲取數據,對它進行處理(如果需要),并將其發送到客戶端應用程序。

圖1-4 商業層和EIS層
有三種類型的enterprise beans:session beans、entity beans和message-driven beans。一個session bean描述了與客戶端的一個短暫的會話。當客戶端的執行完成后,session bean和它的數據都將消失。與些相對應的是一個entity bean描述了存儲在數據庫的表中的一行的持久穩固的數據。如果客戶端終止或者服務結束,底層的服務會負責entity bean數據的存儲。
一個message-driven bean結合了一個session bean和一個Java信息服務(JMS)信息監聽者的功能,它允許一個商業組件異步地接受JMS消息。這份指南只介紹entity bean和session bean。有關message-driven bean的介紹,請參看Java消息服務指南:
http://java.sun.com/products/jms/tutorial/index.html
6、企業信息系統層
企業信息系統層處理企業信息系統軟件并包含諸如企業資源計劃(ERP)、主機事務處理、數據庫系統和其它傳統系統這樣的底層系統。J2EE應用程序組件可能需要訪問企業信息系統,例如是獲得一個數據庫連接。
6.1 J2EE容器
通常,瘦客戶端的多層應用程序是很難編寫的,這是因為這得包括許多行復雜的代碼以處理事務、狀態管理、多線程、資源池和其它復雜的底層詳細資料。基于組件并與平臺無關的J2EE體系結構使得J2EE應用程序易于編寫,這是因為商業邏輯被封裝到可重用的組件中,此外,J2EE服務器以容器的形式為每一個組件類型提供底層服務。因為我們不需要自己開發這些服務,這使我們可以全力以赴地著手處理商業問題。
6.2 容器服務
容器是一個組件和支持組件的底層平臺特定功能之間的接口,在一個Web組件、enterprise bean或者是一個應用程序客戶端組件可以被執行前,它們必須被裝配到一個J2EE應用程序中,并且部署到它們的容器。
裝配的過程包括為J2EE應用程序中的每一個組件以及J2EE應用程序本身指定容器的設置。容器設置定制了由J2EE服務器提供的底層支持,這將包括諸如安全性、事務管理、Java命名目錄接口(JNDI)搜尋以及遠程序連接。下面是其中的主要部分:
1、J2EE的安全性模式可以讓你對一個Web組件或enterprise bean進行配置以使得只有授權用戶訪問系統資源。
2、J2EE的事務模式可以讓你指定方法之間的關系以組成一個單個的事務,這樣在一個事務中的所有方法將被視為一個單一的整體。
3、JNDI搜尋服務為企業中的多種命名目錄服務提供一個統一的接口,這使得應用程序組件可以訪問命名目錄服務。
4、J2EE遠程連接模式管理客戶端和enterprise bean之間的底層通信。在一個enterprise bean被建立后,客戶端在調用其中的方法時就象這個enterprise bean就運行在同一個虛擬機上一樣。
實際上,J2EE體系結構提供了可配置的服務意味著在相同的J2EE應用程序中的應用程序組件根據其被部署在什么在地方在實際運行時會有所不同。例如,一個enterprise bean可能在一個產品環境中擁有包含訪問數據庫數據的某種級別的安全性設置,而在另一個產品環境中是另一個訪問數據庫的級別。
容器還管理諸如一個enterprise bean和servlet的生存周期、數據庫連接資源池以及訪問在J2EE APIs中介紹的J2EE平臺API這樣不能配置的服務。盡管數據持久化是一個不能配置的服務,但是J2EE體系統結構允許你在你想要獲得比默認的容器管理持久化所能提供更多的控制時,通過在你的enterprise bean執行中包含適當的代碼以重載容器管理持久化。例如,你可以使用bean管理持久化以實現你自己的finder(查找)方法或者是建立一個定制的數據庫緩沖區。
6.3容器類型
部署時會將J2EE應用程序組件安裝到J2EE容器中,就象圖1-5中所示那樣。
1、J2EE服務器:是J2EE產品的運行部分。一個J2EE服務器提供EJB容器和Web容器。Enterprise JavaBeans(EJB)容器:管理J2EE應用程序的enterprise bean的執行。Enterprise bean和它的容器運行在J2EE服務器中。
2、Web容器:管理J2EE應用程序的JSP頁面和servlet組件的執行。Web組件和它的容器也運行在J2EE服務器中。
3、客戶端應用程序容器:管理應用程序客戶端組件的運行。應用程序客戶端和它的容器運行在客戶端中。
4、Applet容器:管理applet的執行。由運行在客戶端的一個Web瀏覽器和Java插件一同組成。
一個message-driven bean結合了一個session bean和一個Java信息服務(JMS)信息監聽者的功能,它允許一個商業組件異步地接受JMS消息。這份指南只介紹entity bean和session bean。有關message-driven bean的介紹,請參看Java消息服務指南:
http://java.sun.com/products/jms/tutorial/index.html
6、企業信息系統層
企業信息系統層處理企業信息系統軟件并包含諸如企業資源計劃(ERP)、主機事務處理、數據庫系統和其它傳統系統這樣的底層系統。J2EE應用程序組件可能需要訪問企業信息系統,例如是獲得一個數據庫連接。
6.1 J2EE容器
通常,瘦客戶端的多層應用程序是很難編寫的,這是因為這得包括許多行復雜的代碼以處理事務、狀態管理、多線程、資源池和其它復雜的底層詳細資料。基于組件并與平臺無關的J2EE體系結構使得J2EE應用程序易于編寫,這是因為商業邏輯被封裝到可重用的組件中,此外,J2EE服務器以容器的形式為每一個組件類型提供底層服務。因為我們不需要自己開發這些服務,這使我們可以全力以赴地著手處理商業問題。
6.2 容器服務
容器是一個組件和支持組件的底層平臺特定功能之間的接口,在一個Web組件、enterprise bean或者是一個應用程序客戶端組件可以被執行前,它們必須被裝配到一個J2EE應用程序中,并且部署到它們的容器。
裝配的過程包括為J2EE應用程序中的每一個組件以及J2EE應用程序本身指定容器的設置。容器設置定制了由J2EE服務器提供的底層支持,這將包括諸如安全性、事務管理、Java命名目錄接口(JNDI)搜尋以及遠程序連接。下面是其中的主要部分:
1、J2EE的安全性模式可以讓你對一個Web組件或enterprise bean進行配置以使得只有授權用戶訪問系統資源。
2、J2EE的事務模式可以讓你指定方法之間的關系以組成一個單個的事務,這樣在一個事務中的所有方法將被視為一個單一的整體。
3、JNDI搜尋服務為企業中的多種命名目錄服務提供一個統一的接口,這使得應用程序組件可以訪問命名目錄服務。
4、J2EE遠程連接模式管理客戶端和enterprise bean之間的底層通信。在一個enterprise bean被建立后,客戶端在調用其中的方法時就象這個enterprise bean就運行在同一個虛擬機上一樣。
實際上,J2EE體系結構提供了可配置的服務意味著在相同的J2EE應用程序中的應用程序組件根據其被部署在什么在地方在實際運行時會有所不同。例如,一個enterprise bean可能在一個產品環境中擁有包含訪問數據庫數據的某種級別的安全性設置,而在另一個產品環境中是另一個訪問數據庫的級別。
容器還管理諸如一個enterprise bean和servlet的生存周期、數據庫連接資源池以及訪問在J2EE APIs中介紹的J2EE平臺API這樣不能配置的服務。盡管數據持久化是一個不能配置的服務,但是J2EE體系統結構允許你在你想要獲得比默認的容器管理持久化所能提供更多的控制時,通過在你的enterprise bean執行中包含適當的代碼以重載容器管理持久化。例如,你可以使用bean管理持久化以實現你自己的finder(查找)方法或者是建立一個定制的數據庫緩沖區。
6.3容器類型
部署時會將J2EE應用程序組件安裝到J2EE容器中,就象圖1-5中所示那樣。
1、J2EE服務器:是J2EE產品的運行部分。一個J2EE服務器提供EJB容器和Web容器。Enterprise JavaBeans(EJB)容器:管理J2EE應用程序的enterprise bean的執行。Enterprise bean和它的容器運行在J2EE服務器中。
2、Web容器:管理J2EE應用程序的JSP頁面和servlet組件的執行。Web組件和它的容器也運行在J2EE服務器中。
3、客戶端應用程序容器:管理應用程序客戶端組件的運行。應用程序客戶端和它的容器運行在客戶端中。
4、Applet容器:管理applet的執行。由運行在客戶端的一個Web瀏覽器和Java插件一同組成。

圖1-5 J2EE服務器和容器
7、封裝
J2EE組件被分別打包并綁定到一個J2EE應用程序中以供部署。每一個組件、它的諸如GIF、HTML文件和服務器端功能類這樣的相關文件以及一個部署說明組成了一個模塊并被添加到J2EE應用程序中。一個J2EE應用由一個或幾個enterprise bean組件模塊、Web組件模塊或應用程序客戶端組件模塊組成。根據不同的設計需求,最終的企業解決方案可以是一個J2EE應用程序,也可以由兩個或更多的J2EE應用程序組成。
一個J2EE應用程序以及它的每一個模塊有它自己的部署說明。一個部署說明就是一個具有.xml擴展名的XML文件,它描述了一個組件的部署設置。例如,一個enterprise bean模塊的部署說明,描述了一個enterprise bean的事務屬性和安全性授權。因為部署說明信息是公開的,因此它可以被改變而不必修改bean的源代碼。在運行時,J2EE服務器將讀取這個部署說明并遵照執行。
一個J2EE應用以及它的所有模塊被提交到一個Enterprise ARchive (EAR)文件中。 一個EAR文件就是一個具有.ear擴展名的標準的Java Archive (JAR)文件。在J2EE SDK應用程序部署工具的GUI版本中,你首先建立一個EAR文件,并在其中添加JAR文件和Web Archive(WAR)文件。然而,如果你使用的是命令行的打包工具,你必須首先建立JAR和WAR文件,然而才是建立EAR文件。有關J2EE SDK工具的詳細介紹請參看工具。
1、每一個EJB JAR文件包含一個部署說明、enterprise bean文件以及相關的文件。
2、每一個應用程序客戶端JAR文件包含一個部署說明、應用程序客戶端的類文件以及相關的文件。
3、每一個WAR文件包含一個部署說明、Web組件文件以及相關的資源。
使用模塊和EAR文件使得運用同一組件以裝配許多不同的J2EE應用程序成為可能。不需要額外的編程工作,你唯一要做的是在J2EE EAR文件中添加各種J2EE模塊。
8、開發角色
可重用的模塊使得將應用程序的開發過程和部署過程分成不同的角色成為可能。這樣,不同的人或公司可以在這一過程的各個部分承擔不同的任務。
最先的兩個角色承擔購買和安裝J2EE產品和工具的任務。在購買和安裝好軟件之后,應用程序組件提供商就開始開發J2EE組件,應用程序裝配者負責裝配,而應用程序部署者負責部署。在一個大的組織中,每個這樣的角色可能對應于不同的個人和小組。作這樣的分工是因為前一個角色將會輸出一個可移植的文件,而這將是后一個角色的輸入。例如,在應用程序組件提供商階段,一個enterprise bean軟件開發者提交EJB JAR文件。而在應用程序裝配者階段,另一些開發者將這些EJB JAR文件組合到一個J2EE應用程序中并將其保存為一個EAR文件。在應用程序部署者階段,消費者站點的系統管理員使用EAR文件將J2EE應用程序安裝到J2EE服務器中。
不同的角色不一定總得由不同的人來執行。例如,你是在一個小公司工作或者你是從事一個樣本程序的原型開發,你也可能需要執行每一個階段的任務。
9、J2EE產品提供者
J2EE產品提供者是設計并提供實現J2EE規范所定義的J2EE平臺、API和其它功能的公司。這一般是指操作系統、數據庫系統、應用程序服務器或Web服務器的賣主,它們依照J2EE的規范實現J2EE平臺。
9.1工具提供者
工具提供者是指建立組件提供者、裝配者和部署者所使用的開發、裝配和打包的工具的公司或個人。有關J2EE SDK 1.3可用工具的詳細信息參見工具。
9.2 應用程序組件提供者
應用程序組件提供者是指建立J2EE應用程序所使用的Web組件、enterprise bean、applet或應用程序客戶端的公司或個人。
9.3 Enterprise Bean開發者
一個enterprise bean開發者執行下面的任務并遞交一個包含enterprise bean的EJB JAR文件:
1、編寫并編譯源代碼
2、詳細說明部署描述
3、將.class文件和部署描述綁定到一個EJB JAR文件中
9.4 Web組件開發者
一個Web組件開發者執行下面的任務并提交一個包含Web組的WAR文件:
1、編寫并編譯servlet源代碼
2、編寫JSP和HTML文件
3、詳細說明Web組件的部署描述
4、將.class、.jsp、.html和部署描述綁定到WAR文件中
9.5 J2EE應用程序客戶端開發者
一個應用程序客戶端開發者執行下面的任務并提交一個包含J2EE應用程序客戶端的JAR文件:
1、編寫并編譯源代碼
2、詳細說明客戶端的部署描述
3、將.class文件和部署描述綁定到JAR文件中
9.6 應用程序裝配者
應用程序裝配者是從組件提供者接受應用程序組件JAR文件并將其裝配到一個J2EE應用程序EAR文件中的公司或個人。裝配者或部署者可以直接編輯部署說明或者使用可以根據交互式的正確地添加XML標志的工具。一個軟件開發者執行下列任務并遞交一個包含J2EE應用程序的EAR文件:
1、將上一階段建立的EJB JAR文件和WAR文件裝配到一個J2EE應用程序(EAR)文件中。
2、詳細說明有關J2EE應用程序的部署說明。
3、檢驗EAR文件中的組件是否遵守J2EE規范。
9.7 應用程序部署者和系統管理員
應用程序部署者和系統管理員可以是公司或個人,他們配置和部署J2EE應用程序,管理J2EE應用程序在其中運行的計算機和網絡這些低層結構,并對運行環境進行監控。他們的任務可能包括這樣的一些事:設置事務控制、安全屬性并指定數據庫連接。
在配置時,部署者按照由應用程序組件提供者提供的指示以解決外部的支持、指定安全設置并定義事務屬性。在安裝時,部署者將應用程序組件裝入服務器中并生成特定容器的類和接口。
一個部署者/系統管理員執行下列任務以安裝和配置一個J2EE應用程序:
1、將上一階段生成的J2EE應用程序(EAR)文件添加到J2EE服務器中
2、根據運行環境通過修改J2EE應用程序的部署說明對J2EE應用程序進行配置。
3、檢驗EAR文件的內容是否遵守J2EE規范
4、部署(安裝)J2EE應用程序EAR文件到J2EE服務器中
10、相關執行軟件
J2EE SDK是非經營的J2EE平臺的操作定義,它由Sun公司提供可以免費用于示范、試驗和教育用途。它包含了J2EE應用程序服務器、Web服務器、關系型數據庫、J2EE API和一整套開發和部署工具。你可以從這里下載J2EE SDK:
http://java.sun.com/j2ee/download.html#sdk
J2EE SDK的目的是為了允許產品提供者用來測試它們的執行是否需要一系列特定的條件,并可以運行J2EE兼容性測試以確定他們的J2EE產品是否完全遵守J2EE規范。J2EE SDK還可以由應用程序組件開發者用來運行他們的J2EE應用程序以檢驗它們是否完全適合所有的J2EE產品和工具。
10.1數據庫訪問
關系型數據庫為應用程序數據提供了持久穩固的存儲。一個J2EE執行并不需要支持特定類型的數據庫,這意味著不同的J2EE產品所支持的數據庫可以改變。參看下載的J2EE SDK所包含的版本說明可以了解目前所支持的數據庫。
10.2 J2EE API
J2SE SDK對于J2EE SDK的運行是必需的,它可以為編寫J2EE組件提供核心的API、核心的開發工具和Java虛擬機。J2EE SDK為J2EE應用程序提供下面的API以供使用。
10.3 Enterprise JavaBeans技術2.0
一個enterprise bean是一個用來執行商業邏輯的模塊的具有字段和方法的代碼實體。你可以將一個enterprise bean想象成一塊積木,它可以在J2EE服務器上單獨使用也可以與其它enterprise bean協同工作以執行商業邏輯。
有三種類型的enterprise bean:session bean、entity bean和message-driven bean。Enterprise bean經常與數據庫有一個交互的關系。使用entity bean的一個好處是你不需要編寫任何SQL代碼或使用JDBC API以直接執行數據庫訪問操作;EJB容器會為你處理這些事。然而,如果因為某種原因,你重載了默認的容器管理持續化,你需要使用JDBC API。同樣的,如果你選擇一個session bean來訪問database,你也必須使用JDBC API。
10.4 JDBC API 2.0
JDBC API讓你可以從Java編程語言的方法中調用SQL命令。在一個enterprise bean中,當你重載了默認的容器管理持續化或是在一個session bean中訪問數據庫時,你必須使用JDBC API。當使用容器管理持續化時,數據庫訪問的操作是由容器來處理的,你的enterprise bean執行不包含任何JDBC代碼或SQL命令。你也可以使用JDBC API從一個servlet或JSP頁面中直接訪問數據庫,而不通過一個enterprise bean來完成。
JDBC API有兩個部分:一個由應用程序組件用來訪問數據庫的應用程序級的接口,一個用來將JDBC驅動整合到J2EE平臺中的服務提供商接口。
10.5 Java Servlet技術2.3
Java Servlet技術允許你定義一個特定的HTTP的servlet類。一個servlet類為服務器擴展了這樣一個性能:可以通過請求-響應這樣的程序模式訪問主機應用程序。盡管servlet可以響應任何形式的請求,但是它們通常用于Web服務器上的應用程序。
10.6 JavaServer Pages技術1.2
JavaServer Pages技術使得你可以將servlet代碼嵌入到基于文本的文檔中。一個JSP頁面就是一個基于文本的文檔,它包含兩個類型的文本:靜態模板的數據,它可以表示為任何基于文本的格式,例如HTML、WML和XML;JSP單元,它決定頁面如何建立動態的內容。
10.7 Java消息服務(JMS)1.0
JMS是一個消息標準,它允許J2EE應用程序建立、發送、接受和閱讀消息。它使得建立連接簡單的、可靠的和異步的公布式通信成為可能。有關JMS的更多的介紹,請參看Java消息服務指南:
http://java.sun.com/products/jms/tutorial/index.html
10.8 Java命名目錄接口(JNDI)1.2
JNDI提供命名的目錄功能。它為應用程序提供標準的目錄操作的方法,例如獲得對象的關聯屬性、根據它們的屬性搜尋對象等。使用JNDI,一個J2EE應用程序可以存儲和重新得到任何類型的命名Java對象。
因為JNDI不依賴于任何特定的執行,應用程序可以使用JNDI訪問各種命名目錄服務,包括現有的各種諸如LDAP、NDS、DNS和NIS這樣的命名目錄服務。這使得J2EE應用程序可以和傳統的應用程序和系統共存。有關JNDI的更多的信息,請參看JNDI指南:
http://java.sun.com/products/jndi/tutorial/index.html
10.9 Java事務API 1.0
Java事務API(JTA)提供了劃分事務的標準接口。J2EE體系結構提供了一個默認的自動提交以處理事務提交和回滾。一個自動提交意味著在每一個數據庫讀寫操作之后任何其它應用程序顯示數據時都會看到更新了的數據。然而,如果你的應用程序執行兩部分相互依賴的數據庫訪問操作,你可能會想要用JTA API去確定整個事務,這個事務將包含兩個操作的開始、回滾和提交。
10.10JavaMail API 1.2
J2EE應用程序可以使用JavaMail API來發送e-mail告示。JavaMail API包含兩部分: 一個由應用程序組件用來發送mail的應用程序級的接口和一個服務提供接口。J2EE平臺包含作為服務提供的JavaMail,使得應用程序組件可以發送Internet mail。
10.11 JavaBeans激活架構1.0
之所以要包含JavaBeans激活架構(JAF)是因為JavaMail要使用到它。它提供標準的服務以確定任意數據段的類型、如何對它訪問、找出在其上可應用的操作并建立適當的JavaBeans組件以執行那些操作。
應用程序部署者和系統管理員可以是公司或個人,他們配置和部署J2EE應用程序,管理J2EE應用程序在其中運行的計算機和網絡這些低層結構,并對運行環境進行監控。他們的任務可能包括這樣的一些事:設置事務控制、安全屬性并指定數據庫連接。
在配置時,部署者按照由應用程序組件提供者提供的指示以解決外部的支持、指定安全設置并定義事務屬性。在安裝時,部署者將應用程序組件裝入服務器中并生成特定容器的類和接口。
一個部署者/系統管理員執行下列任務以安裝和配置一個J2EE應用程序:
1、將上一階段生成的J2EE應用程序(EAR)文件添加到J2EE服務器中
2、根據運行環境通過修改J2EE應用程序的部署說明對J2EE應用程序進行配置。
3、檢驗EAR文件的內容是否遵守J2EE規范
4、部署(安裝)J2EE應用程序EAR文件到J2EE服務器中
10、相關執行軟件
J2EE SDK是非經營的J2EE平臺的操作定義,它由Sun公司提供可以免費用于示范、試驗和教育用途。它包含了J2EE應用程序服務器、Web服務器、關系型數據庫、J2EE API和一整套開發和部署工具。你可以從這里下載J2EE SDK:
http://java.sun.com/j2ee/download.html#sdk
J2EE SDK的目的是為了允許產品提供者用來測試它們的執行是否需要一系列特定的條件,并可以運行J2EE兼容性測試以確定他們的J2EE產品是否完全遵守J2EE規范。J2EE SDK還可以由應用程序組件開發者用來運行他們的J2EE應用程序以檢驗它們是否完全適合所有的J2EE產品和工具。
10.1數據庫訪問
關系型數據庫為應用程序數據提供了持久穩固的存儲。一個J2EE執行并不需要支持特定類型的數據庫,這意味著不同的J2EE產品所支持的數據庫可以改變。參看下載的J2EE SDK所包含的版本說明可以了解目前所支持的數據庫。
10.2 J2EE API
J2SE SDK對于J2EE SDK的運行是必需的,它可以為編寫J2EE組件提供核心的API、核心的開發工具和Java虛擬機。J2EE SDK為J2EE應用程序提供下面的API以供使用。
10.3 Enterprise JavaBeans技術2.0
一個enterprise bean是一個用來執行商業邏輯的模塊的具有字段和方法的代碼實體。你可以將一個enterprise bean想象成一塊積木,它可以在J2EE服務器上單獨使用也可以與其它enterprise bean協同工作以執行商業邏輯。
有三種類型的enterprise bean:session bean、entity bean和message-driven bean。Enterprise bean經常與數據庫有一個交互的關系。使用entity bean的一個好處是你不需要編寫任何SQL代碼或使用JDBC API以直接執行數據庫訪問操作;EJB容器會為你處理這些事。然而,如果因為某種原因,你重載了默認的容器管理持續化,你需要使用JDBC API。同樣的,如果你選擇一個session bean來訪問database,你也必須使用JDBC API。
10.4 JDBC API 2.0
JDBC API讓你可以從Java編程語言的方法中調用SQL命令。在一個enterprise bean中,當你重載了默認的容器管理持續化或是在一個session bean中訪問數據庫時,你必須使用JDBC API。當使用容器管理持續化時,數據庫訪問的操作是由容器來處理的,你的enterprise bean執行不包含任何JDBC代碼或SQL命令。你也可以使用JDBC API從一個servlet或JSP頁面中直接訪問數據庫,而不通過一個enterprise bean來完成。
JDBC API有兩個部分:一個由應用程序組件用來訪問數據庫的應用程序級的接口,一個用來將JDBC驅動整合到J2EE平臺中的服務提供商接口。
10.5 Java Servlet技術2.3
Java Servlet技術允許你定義一個特定的HTTP的servlet類。一個servlet類為服務器擴展了這樣一個性能:可以通過請求-響應這樣的程序模式訪問主機應用程序。盡管servlet可以響應任何形式的請求,但是它們通常用于Web服務器上的應用程序。
10.6 JavaServer Pages技術1.2
JavaServer Pages技術使得你可以將servlet代碼嵌入到基于文本的文檔中。一個JSP頁面就是一個基于文本的文檔,它包含兩個類型的文本:靜態模板的數據,它可以表示為任何基于文本的格式,例如HTML、WML和XML;JSP單元,它決定頁面如何建立動態的內容。
10.7 Java消息服務(JMS)1.0
JMS是一個消息標準,它允許J2EE應用程序建立、發送、接受和閱讀消息。它使得建立連接簡單的、可靠的和異步的公布式通信成為可能。有關JMS的更多的介紹,請參看Java消息服務指南:
http://java.sun.com/products/jms/tutorial/index.html
10.8 Java命名目錄接口(JNDI)1.2
JNDI提供命名的目錄功能。它為應用程序提供標準的目錄操作的方法,例如獲得對象的關聯屬性、根據它們的屬性搜尋對象等。使用JNDI,一個J2EE應用程序可以存儲和重新得到任何類型的命名Java對象。
因為JNDI不依賴于任何特定的執行,應用程序可以使用JNDI訪問各種命名目錄服務,包括現有的各種諸如LDAP、NDS、DNS和NIS這樣的命名目錄服務。這使得J2EE應用程序可以和傳統的應用程序和系統共存。有關JNDI的更多的信息,請參看JNDI指南:
http://java.sun.com/products/jndi/tutorial/index.html
10.9 Java事務API 1.0
Java事務API(JTA)提供了劃分事務的標準接口。J2EE體系結構提供了一個默認的自動提交以處理事務提交和回滾。一個自動提交意味著在每一個數據庫讀寫操作之后任何其它應用程序顯示數據時都會看到更新了的數據。然而,如果你的應用程序執行兩部分相互依賴的數據庫訪問操作,你可能會想要用JTA API去確定整個事務,這個事務將包含兩個操作的開始、回滾和提交。
10.10JavaMail API 1.2
J2EE應用程序可以使用JavaMail API來發送e-mail告示。JavaMail API包含兩部分: 一個由應用程序組件用來發送mail的應用程序級的接口和一個服務提供接口。J2EE平臺包含作為服務提供的JavaMail,使得應用程序組件可以發送Internet mail。
10.11 JavaBeans激活架構1.0
之所以要包含JavaBeans激活架構(JAF)是因為JavaMail要使用到它。它提供標準的服務以確定任意數據段的類型、如何對它訪問、找出在其上可應用的操作并建立適當的JavaBeans組件以執行那些操作。
10.12 Java XML處理API1.1
XML是一種描述基于文本的數據的語言,使用XML使得數據可以被任何程序和工具讀取和處理。程序和工具可以生成其它程序和工具可以讀取和處理的XML文檔。Java XML處理API(JAXP)支持使用DOM、SAX和XSLT對XML文檔進行處理。JAXP使得應用程序可以不依賴于特殊的XML處理執行來解析和轉換XML文檔。
例如,一個J2EE應用程序可以使用XML來生成報表,而不同的公司都可以獲得這個報表并使用各自最適宜的方法來處理它。一個公司可能會通過程序將XML數據導入到HTML中以使得其可以在網站中公布,另一個公司可能會通過工具導出XML數據以制定銷售預算,而另一個公司可能會將XML數據導入它的J2EE應用程序中對其進行處理。
10.13 J2EE連接器體系結構1.0
J2EE工具提供商和系統綜合者使用J2EE連接器體系結構建立可以加入到任何J2EE產品的支持訪問企業信息系統的資源適配器。一個資源適配器就是一個使得J2EE應用程序組件可以訪問底層的資源管理器并與其實現交互的軟件組件。因為一個資源適配器是與它的特定的資源管理器相對應的,典型的情況是不同的數據庫或企業信息系統會各自有其不同的資源適配器。
10.14 Java認證和授權服務1.0
Java認證和授權服務(JAAS)為J2EE應用程序提供了一個方法以為一個特定的用戶或一組用戶進行認證和授權。
JAAS是標準的可插入認證模塊(PAM)結構的Java版本,它對Java 2平臺的安全認證框架進行了擴展以支持基于用戶的安全認證。
11、簡單的系統集成
J2EE平臺具有平臺無關性,全部的系統集成解決方案建立了一個開放的市場,在這個市場中,每個提供商都可以向所有的用戶出售他們的產品。這樣的一個市場鼓勵提供商進行競爭,不是試圖將通過技術困縛用戶,而是通過提供比其它提供商更好的產品和服務,例如是更好的性能、更好的工具或更好的用戶支持。
J2EE API使得系統和應用程序集成具有下面的這些特點:
1、enterprise beans所支持的統一的應用程序多層結構
2、JSP頁面和servlet所支持的簡單的請求和響應機制
3、JAAS所支持的可靠的安全模型
4、JAXP所支持的基于XML的數據交換集成
5、J2EE連接器體系結構所支持的簡單的協同工作能力
6、JDBC API所支持的方便的數據庫連通性
7、message-driven beans、JMS、JTA和JNDI所支持的其它特性
要學習更多的有關使用J2EE平臺以建立商業綜合系統的知識,你可以參閱J2EE技術實踐:http://java.sun.com/j2ee/inpractice/aboutthebook.html
11.1工具
J2EE實現標準提供了一個應用程序部署工具和一系列命令以裝配、校驗和部署J2EE應用程序和管理你的部署和產品環境。
11.2應用程序部署工具
J2EE實現標準提供了一個應用程序部署工具(deploytool)以裝配、校驗和部署J2EE應用程序。這個工具有兩個版本:命令行和GUI。
GUI工具包括下列向導
1、打包、配置和部署J2EE應用程序
2、打包和配置enterprise bean
3、打包和配置Web組件
4、打包和配置應用程序客戶端
5、打包和配置資源適配置器
6、此外,還可以在tabbed inspector pane中對每個組件和模塊類型的配置信息進行設置。
11.3命令
表1-1列出了J2EE實現標準中所包含的命令,你可以使用這些命令在命令行執行操作。
XML是一種描述基于文本的數據的語言,使用XML使得數據可以被任何程序和工具讀取和處理。程序和工具可以生成其它程序和工具可以讀取和處理的XML文檔。Java XML處理API(JAXP)支持使用DOM、SAX和XSLT對XML文檔進行處理。JAXP使得應用程序可以不依賴于特殊的XML處理執行來解析和轉換XML文檔。
例如,一個J2EE應用程序可以使用XML來生成報表,而不同的公司都可以獲得這個報表并使用各自最適宜的方法來處理它。一個公司可能會通過程序將XML數據導入到HTML中以使得其可以在網站中公布,另一個公司可能會通過工具導出XML數據以制定銷售預算,而另一個公司可能會將XML數據導入它的J2EE應用程序中對其進行處理。
10.13 J2EE連接器體系結構1.0
J2EE工具提供商和系統綜合者使用J2EE連接器體系結構建立可以加入到任何J2EE產品的支持訪問企業信息系統的資源適配器。一個資源適配器就是一個使得J2EE應用程序組件可以訪問底層的資源管理器并與其實現交互的軟件組件。因為一個資源適配器是與它的特定的資源管理器相對應的,典型的情況是不同的數據庫或企業信息系統會各自有其不同的資源適配器。
10.14 Java認證和授權服務1.0
Java認證和授權服務(JAAS)為J2EE應用程序提供了一個方法以為一個特定的用戶或一組用戶進行認證和授權。
JAAS是標準的可插入認證模塊(PAM)結構的Java版本,它對Java 2平臺的安全認證框架進行了擴展以支持基于用戶的安全認證。
11、簡單的系統集成
J2EE平臺具有平臺無關性,全部的系統集成解決方案建立了一個開放的市場,在這個市場中,每個提供商都可以向所有的用戶出售他們的產品。這樣的一個市場鼓勵提供商進行競爭,不是試圖將通過技術困縛用戶,而是通過提供比其它提供商更好的產品和服務,例如是更好的性能、更好的工具或更好的用戶支持。
J2EE API使得系統和應用程序集成具有下面的這些特點:
1、enterprise beans所支持的統一的應用程序多層結構
2、JSP頁面和servlet所支持的簡單的請求和響應機制
3、JAAS所支持的可靠的安全模型
4、JAXP所支持的基于XML的數據交換集成
5、J2EE連接器體系結構所支持的簡單的協同工作能力
6、JDBC API所支持的方便的數據庫連通性
7、message-driven beans、JMS、JTA和JNDI所支持的其它特性
要學習更多的有關使用J2EE平臺以建立商業綜合系統的知識,你可以參閱J2EE技術實踐:http://java.sun.com/j2ee/inpractice/aboutthebook.html
11.1工具
J2EE實現標準提供了一個應用程序部署工具和一系列命令以裝配、校驗和部署J2EE應用程序和管理你的部署和產品環境。
11.2應用程序部署工具
J2EE實現標準提供了一個應用程序部署工具(deploytool)以裝配、校驗和部署J2EE應用程序。這個工具有兩個版本:命令行和GUI。
GUI工具包括下列向導
1、打包、配置和部署J2EE應用程序
2、打包和配置enterprise bean
3、打包和配置Web組件
4、打包和配置應用程序客戶端
5、打包和配置資源適配置器
6、此外,還可以在tabbed inspector pane中對每個組件和模塊類型的配置信息進行設置。
11.3命令
表1-1列出了J2EE實現標準中所包含的命令,你可以使用這些命令在命令行執行操作。
表1-1 J2EE命令
j2ee
啟動和終止J2EE服務
cloudscape
啟動和終止默認的數據庫
j2eeadmin
增加JDBC驅動、JMS目的文件以及不同資源的連接factory
keytool
建立公鑰和私鑰,并生成X509自簽署證書。
realmtool
導入證書文件。為一個J2EE應用程序的認證和授權列表中增加或刪除J2EE用戶
packager
將J2EE應用程序組件打包到EAR、EJB JAR、應用程序客戶端JAR或WAR文件中
verifier
校驗EAR、EJB JAR、應用程序客戶端JAR和WAR文件是否符合并遵守J2EE規范
runclient
運行一個J2EE應用程序客戶端
cleanup
從J2EE服務器中刪除所有已部署的應用程序