Java2企業版(J2EE)平台由四個關鍵部分構成:規格說明、參考實現、兼容性測試套件和藍圖(BluePrint)計劃。藍圖描繪了分布式組件架構最好的實踐和設計指導方針。本文基於Rational統一過程和BluePrint示例程序介紹一個八步驟J2EE開發方法學。通過閱讀這篇文章,你可以了解許多重要的J2EE架構的話題,並且能夠擴展和修改這個簡單的方法來解決自己特有的業務問題。 在商業世界裡,我們使用Java2 企業版(J2EE)解決業務問題、開發商業軟件或者提供轉包服務。如果一家公司想使用多層體系結構建造一個電子商務網站,通常在整個開發生命周期中需要涉及到管理者、架構師,設計人員、編程人員、測試人員和數據庫專家。 為了使不同部門能高效率地工作,他們經常需要一個軟件開發過程。一些經典的開發過程包括瀑布模型、快速應用開發(RAD)和極限編程(XP)。本文我們將集中於一個流行的軟件工程過程,即Rational統一過程(RUP)。RUP提供了一個給角色分配任務和責任的嚴格方法。它的目標是保證我們在預期的進度和預算內開發出滿足用戶需求的高質量軟件。 我在J2EE開發中使用RUP出於以下三個原因。首先,RUP以架構為中心;在將資源分配給全面開發之前,它先開發一個可執行的架構原型。其次,RUP是迭代並基於構件的。該架構基線通常包括一個框架或基礎設施以便於通過迭代增加構件,在不影響系統其他部分的前提下定制和擴展一個系統的功能。最後,RUP 利用一門工業標准語言--UML,可視化建模系統的架構和構件。RUP有四個不同的開發階段:初始、細化、構造和移交。然而,本文從技術角度覆蓋了 J2EE開發的八個必要活動,主要集中在系統架構。 1、 需求分析 需求分析描述系統應該做什麼或不應該做什麼使得開發者和客戶可以簽署一份原始的商業合同。可以使用業務概念、領域術語、用例和用戶界面(UI)模型形成功能需求文檔。對於非功能需求,如性能和事務,可以在需求文檔附件中詳細說明。根據參與項目深度的不同,確定在紙上還是使用Html建造高層UI模型。 圖1 展現了一個典型電子商務系統中的兩個用例。查看訂單(vIEWorder)用例告訴我們一個用戶通過Web界面登陸系統、查看訂單列表,點擊鏈接查看特定訂單的詳細信息。增加訂單項(addLineItem)用例告訴我們浏覽產品列表、選擇感興趣的產品並將它們添加到購買訂單中。 按此在新窗口浏覽圖片圖1 訂購用例 2、 面向對象分析 分析人員構造問題領域模型:類、對象和交互。分析應該與技術和實現細節無關,並包含一個理想的模型。對象分析可以幫助理解問題並獲得關於問題領域的知識。因為業務過程的改變比信息技術的改變要慢得多,所以必須要維持一個不含技術細節的純領域模型。 這兩個步驟--需求分析和面向對象分析--不是J2EE特有的;對許多面向對象方法學來說,它們都非常通用。圖2 顯示了一個寵物店示例程序的高層對象分析模型。它用圖例說明了我們從需求分析用例中識別的主要概念。我們把這些概念建模成對象並標識它們的關系。 按此在新窗口浏覽圖片圖2 更高層分析模型:寵物店領域 需求和對象分析的結果是為J2EE架構的開發提供切入點。為了開發架構,可以選擇一個縱向聯合部分(vertical pIEce)--經常是關鍵部分,如訂單領域對象模型--進行對象設計、實現、測試和部署。(縱向聯合部分,一個RUP概念,是指系統的一小部分。起始點是圖1所示的用例子集和圖3所示的領域分析模型。一個縱向聯合部分的實現結果是一個全功能的微小系統,包括UI層的JSP,中間層業務對象如EJB和後端數據庫。)可以將從原型中獲得的經驗應用於領域對象並作為對象設計階段的指導。 按此在新窗口浏覽圖片圖3 詳細對象分析:訂單 3、 架構規格說明 經過前面兩個步驟,業務領域問題和需求應該比較明確了。現在,我們將工作集中在技術策略和架構上。架構是指所有構件組合定義系統的一個藍圖:結構、接口和通訊機制。我們可以進一步將架構分為企業級和應用級架構。 企業級系統架構 企業級系統架構包括硬件和軟件基礎設施、網絡布局、開發、測試、生產環境等等。它反映了一個企業的長期投資。開發前,需要評估已存在的軟件和硬件基礎設施,如果不完全支持J2EE的話,增加新構件更新已存在系統。你需要徹底地評估硬件,包括計算機、路由器、網絡轉換器和網絡布局,因為它們都影響到系統的性能和可靠性。圖4 顯示了一個可能的多層網絡布局。 按此在新窗口浏覽圖片圖4 企業級架構:網絡布局 如圖4所示的一個多層企業級架構包括以下幾個主要構件: 一個Web浏覽器客戶端,可能在也可能不在客戶端組織的防火牆內 一個HTTP服務器,是一個對公眾開放的Web服務器。它通常位於一個稱作DMZ的子網內 Web容器主表示層和可能的業務邏輯構件 應用程序容器主業務邏輯構件 關系數據庫管理系統(RDBMS)和數據庫主數據、數據邏輯 你使用的系統架構類型依賴於安全、性能和可靠性的需求,也依賴於組織的財政狀況。在缺少經驗的情況下,也可以適當地從一個修理廠電話訂購一台簡單地二手計算機。 Internet上有許多開放源代碼的操作系統、Web服務器、應用程序服務器和數據庫管理系統。得到這些系統的代價只是幾百美元和熬幾個通宵。 象許多華爾街金融機構這樣的高端客戶也許需要一個連續支持安全、高吞吐量交易和不可預料網絡通訊的系統。在這種情況下,為了容錯,通常需要將Web服務器和應用程序服務器集群配置成一個n層架構。 還需要評估軟件基礎設施,包括Web服務器、安全管理軟件、應用程序服務器、域名管理服務器、數據庫管理系統和第三方軟件構件。如果還沒有購買應用程序服務器,選擇一個 J2EE供應商將是評估過程的一個重要方面。應該注意到不同的供應商對J2EE的實現程度是不同的,一些供應商只支持老的J2EE版本。另外,一些Web容器或應用程序容器可能比其他的速度要快。除了實現J2EE規范外,許多供應商還出售J2EE基礎構件或框架。選擇一個穩定的提供支持的 J2EE供應商也非常關鍵。你可以在系統基礎設施層面上購買或開發的通用功能包括: 事務 國際化和本地化 集群和對象分布 應用程序性能度量和剖析 通訊 工作流管理 入口和個性化管理 層對層通訊協議 安全和防火牆 應用架構 應用架構參考一個特定的項目和規范建立在企業級系統架構的上層。在基礎設施完成後,架構師研究怎樣構造一個特定的應用。如果你的企業級架構僅部分支持老的 J2EE版本,可以先升級你的系統。如果由於預算或時間關系不能升級,那麼必須在更老版本規定的技術范圍內開展工作。雖然構造企業級重用構件非常重要,但是必須首先要能夠使用。這裡的最終目標是滿足客戶的需求--一次一個項目。 架構師不是設計師;架構和設計是完全不同。一個應用架構的范圍包括系統的主要結構、架構設計模式和可以在上面增加構件的框架。架構主要關注的是非功能性方面,而設計關注應用業務用例將領域對象模型轉換成技術對象模型。應用架構是項目的結構,一個特殊的應用程序。通過應用架構開發,你通常必須要做的應用架構決定包括: 層之間進行功能劃分 領域對象建模 要保護的遺留系統 要購買的軟件構件 要開發的構件 怎樣集成第三方構件 圖3的訂單領域對象說明了怎樣對領域對象進行建模。利用當前的Java技術,可以將領域對象分布在作為開發者管理持續性對象的Web容器中、應用程序服務器的EJB中或者作為 RDBMS宿主的Java存儲過程中。 在寵物店藍圖中,我們將訂單對象設計成一個實體bean,一個詳細對象和一個數據訪問對象,如圖5和後面的圖6所示。當你看到這個的時候,你應該意識到架構的重要性。為什麼分析模型中的一個領域對象映射成這麼多對象?如果改變設計,會出現什麼問題?你也許聽說過EJB的好處,但是要注意不同供應商的性能是不同的。當一種新技術到來的時候,你需要在投入全面設計之前進行一些研究。你可以經常地將設計和實現領域對象模型縱向聯合部分的經驗應用到其他許多領域對象中。這就是架構開發的內容。 按此在新窗口浏覽圖片圖4 企業級架構:網絡布局 如圖4所示的一個多層企業級架構包括以下幾個主要構件: 一個Web浏覽器客戶端,可能在也可能不在客戶端組織的防火牆內 一個HTTP服務器,是一個對公眾開放的Web服務器。它通常位於一個稱作DMZ的子網內 Web容器主表示層和可能的業務邏輯構件 應用程序容器主業務邏輯構件 關系數據庫管理系統(RDBMS)和數據庫主數據、數據邏輯 你使用的系統架構類型依賴於安全、性能和可靠性的需求,也依賴於組織的財政狀況。在缺少經驗的情況下,也可以適當地從一個修理廠電話訂購一台簡單地二手計算機。 Internet上有許多開放源代碼的操作系統、Web服務器、應用程序服務器和數據庫管理系統。得到這些系統的代價只是幾百美元和熬幾個通宵。 象許多華爾街金融機構這樣的高端客戶也許需要一個連續支持安全、高吞吐量交易和不可預料網絡通訊的系統。在這種情況下,為了容錯,通常需要將Web服務器和應用程序服務器集群配置成一個n層架構。 還需要評估軟件基礎設施,包括Web服務器、安全管理軟件、應用程序服務器、域名管理服務器、數據庫管理系統和第三方軟件構件。如果還沒有購買應用程序服務器,選擇一個 J2EE供應商將是評估過程的一個重要方面。應該注意到不同的供應商對J2EE的實現程度是不同的,一些供應商只支持老的J2EE版本。另外,一些Web容器或應用程序容器可能比其他的速度要快。除了實現J2EE規范外,許多供應商還出售J2EE基礎構件或框架。選擇一個穩定的提供支持的 J2EE供應商也非常關鍵。你可以在系統基礎設施層面上購買或開發的通用功能包括: 事務 國際化和本地化 集群和對象分布 應用程序性能度量和剖析 通訊 工作流管理 入口和個性化管理 層對層通訊協議 安全和防火牆 應用架構 應用架構參考一個特定的項目和規范建立在企業級系統架構的上層。在基礎設施完成後,架構師研究怎樣構造一個特定的應用。如果你的企業級架構僅部分支持老的 J2EE版本,可以先升級你的系統。如果由於預算或時間關系不能升級,那麼必須在更老版本規定的技術范圍內開展工作。雖然構造企業級重用構件非常重要,但是必須首先要能夠使用。這裡的最終目標是滿足客戶的需求--一次一個項目。 架構師不是設計師;架構和設計是完全不同。一個應用架構的范圍包括系統的主要結構、架構設計模式和可以在上面增加構件的框架。架構主要關注的是非功能性方面,而設計關注應用業務用例將領域對象模型轉換成技術對象模型。應用架構是項目的結構,一個特殊的應用程序。通過應用架構開發,你通常必須要做的應用架構決定包括: 層之間進行功能劃分 領域對象建模 要保護的遺留系統 要購買的軟件構件 要開發的構件 怎樣集成第三方構件 圖3的訂單領域對象說明了怎樣對領域對象進行建模。利用當前的Java技術,可以將領域對象分布在作為開發者管理持續性對象的Web容器中、應用程序服務器的EJB中或者作為 RDBMS宿主的Java存儲過程中。 在寵物店藍圖中,我們將訂單對象設計成一個實體bean,一個詳細對象和一個數據訪問對象,如圖5和後面的圖6所示。當你看到這個的時候,你應該意識到架構的重要性。為什麼分析模型中的一個領域對象映射成這麼多對象?如果改變設計,會出現什麼問題?你也許聽說過EJB的好處,但是要注意不同供應商的性能是不同的。當一種新技術到來的時候,你需要在投入全面設計之前進行一些研究。你可以經常地將設計和實現領域對象模型縱向聯合部分的經驗應用到其他許多領域對象中。這就是架構開發的內容。