摘要
Java2企業(yè)版(J2EE)平臺由四個關鍵部分構成:規(guī)格說明、參考實現(xiàn)、兼容性測試套件和藍圖(BluePrint)計劃。藍圖描繪了分布式組件架構最好的實踐和設計指導方針。本文基于Rational統(tǒng)一過程和BluePrint示例程序介紹一個八步驟J2EE開發(fā)方法學。通過閱讀這篇文章,你可以了解許多重要的J2EE架構的話題,并且能夠擴展和修改這個簡單的方法來解決自己特有的業(yè)務問題。
在商業(yè)世界里,我們使用Java2 企業(yè)版(J2EE)解決業(yè)務問題、開發(fā)商業(yè)軟件或者提供轉包服務。如果一家公司想使用多層體系結構建造一個電子商務網(wǎng)站,通常在整個開發(fā)生命周期中需要涉及到管理者、架構師,設計人員、編程人員、測試人員和數(shù)據(jù)庫專家。
為了使不同部門能高效率地工作,他們經(jīng)常需要一個軟件開發(fā)過程。一些經(jīng)典的開發(fā)過程包括瀑布模型、快速應用開發(fā)(RAD)和極限編程(XP)。本文我們將集中于一個流行的軟件工程過程,即Rational統(tǒng)一過程(RUP)。RUP提供了一個給角色分配任務和責任的嚴格方法。它的目標是保證我們在預期的進度和預算內開發(fā)出滿足用戶需求的高質量軟件。
我在J2EE開發(fā)中使用RUP出于以下三個原因。首先,RUP以架構為中心;在將資源分配給全面開發(fā)之前,它先開發(fā)一個可執(zhí)行的架構原型。其次,RUP是迭代并基于構件的。該架構基線通常包括一個框架或基礎設施以便于通過迭代增加構件,在不影響系統(tǒng)其他部分的前提下定制和擴展一個系統(tǒng)的功能。最后,RUP利用一門工業(yè)標準語言--UML,可視化建模系統(tǒng)的架構和構件。RUP有四個不同的開發(fā)階段:初始、細化、構造和移交。然而,本文從技術角度覆蓋了J2EE開發(fā)的八個必要活動,主要集中在系統(tǒng)架構。
1、 需求分析
需求分析描述系統(tǒng)應該做什么或不應該做什么使得開發(fā)者和客戶可以簽署一份原始的商業(yè)合同。可以使用業(yè)務概念、領域術語、用例和用戶界面(UI)模型形成功能需求文檔。對于非功能需求,如性能和事務,可以在需求文檔附件中詳細說明。根據(jù)參與項目深度的不同,確定在紙上還是使用HTML建造高層UI模型。
圖1 展現(xiàn)了一個典型電子商務系統(tǒng)中的兩個用例。查看訂單(viewOrder)用例告訴我們一個用戶通過Web界面登陸系統(tǒng)、查看訂單列表,點擊鏈接查看特定訂單的詳細信息。增加訂單項(addLineItem)用例告訴我們?yōu)g覽產(chǎn)品列表、選擇感興趣的產(chǎn)品并將它們添加到購買訂單中。

圖1 訂購用例
2、 面向對象分析
分析人員構造問題領域模型:類、對象和交互。分析應該與技術和實現(xiàn)細節(jié)無關,并包含一個理想的模型。對象分析可以幫助理解問題并獲得關于問題領域的知識。因為業(yè)務過程的改變比信息技術的改變要慢得多,所以必須要維持一個不含技術細節(jié)的純領域模型。
這兩個步驟--需求分析和面向對象分析--不是J2EE特有的;對許多面向對象方法學來說,它們都非常通用。圖2 顯示了一個寵物店示例程序的高層對象分析模型。它用圖例說明了我們從需求分析用例中識別的主要概念。我們把這些概念建模成對象并標識它們的關系。

圖2 更高層分析模型:寵物店領域
需求和對象分析的結果是為J2EE架構的開發(fā)提供切入點。為了開發(fā)架構,可以選擇一個縱向聯(lián)合部分(vertical piece)--經(jīng)常是關鍵部分,如訂單領域對象模型--進行對象設計、實現(xiàn)、測試和部署。(縱向聯(lián)合部分,一個RUP概念,是指系統(tǒng)的一小部分。起始點是圖1所示的用例子集和圖3所示的領域分析模型。一個縱向聯(lián)合部分的實現(xiàn)結果是一個全功能的微小系統(tǒng),包括UI層的JSP,中間層業(yè)務對象如EJB和后端數(shù)據(jù)庫。)可以將從原型中獲得的經(jīng)驗應用于領域對象并作為對象設計階段的指導。

圖3 詳細對象分析:訂單
3、 架構規(guī)格說明
經(jīng)過前面兩個步驟,業(yè)務領域問題和需求應該比較明確了。現(xiàn)在,我們將工作集中在技術策略和架構上。架構是指所有構件組合定義系統(tǒng)的一個藍圖:結構、接口和通訊機制。我們可以進一步將架構分為企業(yè)級和應用級架構。
企業(yè)級系統(tǒng)架構
企業(yè)級系統(tǒng)架構包括硬件和軟件基礎設施、網(wǎng)絡布局、開發(fā)、測試、生產(chǎn)環(huán)境等等。它反映了一個企業(yè)的長期投資。開發(fā)前,需要評估已存在的軟件和硬件基礎設施,如果不完全支持J2EE的話,增加新構件更新已存在系統(tǒng)。你需要徹底地評估硬件,包括計算機、路由器、網(wǎng)絡轉換器和網(wǎng)絡布局,因為它們都影響到系統(tǒng)的性能和可靠性。圖4 顯示了一個可能的多層網(wǎng)絡布局。

圖4 企業(yè)級架構:網(wǎng)絡布局
如圖4所示的一個多層企業(yè)級架構包括以下幾個主要構件:
一個Web瀏覽器客戶端,可能在也可能不在客戶端組織的防火墻內
一個HTTP服務器,是一個對公眾開放的Web服務器。它通常位于一個稱作DMZ的子網(wǎng)內
Web容器主表示層和可能的業(yè)務邏輯構件
應用程序容器主業(yè)務邏輯構件
關系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)和數(shù)據(jù)庫主數(shù)據(jù)、數(shù)據(jù)邏輯
你使用的系統(tǒng)架構類型依賴于安全、性能和可靠性的需求,也依賴于組織的財政狀況。在缺少經(jīng)驗的情況下,也可以適當?shù)貜囊粋€修理廠電話訂購一臺簡單地二手計算機。Internet上有許多開放源代碼的操作系統(tǒng)、Web服務器、應用程序服務器和數(shù)據(jù)庫管理系統(tǒng)。得到這些系統(tǒng)的代價只是幾百美元和熬幾個通宵。
象許多華爾街金融機構這樣的高端客戶也許需要一個連續(xù)支持安全、高吞吐量交易和不可預料網(wǎng)絡通訊的系統(tǒng)。在這種情況下,為了容錯,通常需要將Web服務器和應用程序服務器集群配置成一個n層架構。
還需要評估軟件基礎設施,包括Web服務器、安全管理軟件、應用程序服務器、域名管理服務器、數(shù)據(jù)庫管理系統(tǒng)和第三方軟件構件。如果還沒有購買應用程序服務器,選擇一個J2EE供應商將是評估過程的一個重要方面。應該注意到不同的供應商對J2EE的實現(xiàn)程度是不同的,一些供應商只支持老的J2EE版本。另外,一些Web容器或應用程序容器可能比其他的速度要快。除了實現(xiàn)J2EE規(guī)范外,許多供應商還出售J2EE基礎構件或框架。選擇一個穩(wěn)定的提供支持的J2EE供應商也非常關鍵。你可以在系統(tǒng)基礎設施層面上購買或開發(fā)的通用功能包括:
事務
國際化和本地化
集群和對象分布
應用程序性能度量和剖析
通訊
工作流管理
入口和個性化管理
層對層通訊協(xié)議
安全和防火墻
應用架構
應用架構參考一個特定的項目和規(guī)范建立在企業(yè)級系統(tǒng)架構的上層。在基礎設施完成后,架構師研究怎樣構造一個特定的應用。如果你的企業(yè)級架構僅部分支持老的J2EE版本,可以先升級你的系統(tǒng)。如果由于預算或時間關系不能升級,那么必須在更老版本規(guī)定的技術范圍內開展工作。雖然構造企業(yè)級重用構件非常重要,但是必須首先要能夠使用。這里的最終目標是滿足客戶的需求--一次一個項目。
架構師不是設計師;架構和設計是完全不同。一個應用架構的范圍包括系統(tǒng)的主要結構、架構設計模式和可以在上面增加構件的框架。架構主要關注的是非功能性方面,而設計關注應用業(yè)務用例將領域對象模型轉換成技術對象模型。應用架構是項目的結構,一個特殊的應用程序。通過應用架構開發(fā),你通常必須要做的應用架構決定包括:
層之間進行功能劃分
領域對象建模
要保護的遺留系統(tǒng)
要購買的軟件構件
要開發(fā)的構件
怎樣集成第三方構件
圖3的訂單領域對象說明了怎樣對領域對象進行建模。利用當前的Java技術,可以將領域對象分布在作為開發(fā)者管理持續(xù)性對象的Web容器中、應用程序服務器的EJB中或者作為RDBMS宿主的Java存儲過程中。
在寵物店藍圖中,我們將訂單對象設計成一個實體bean,一個詳細對象和一個數(shù)據(jù)訪問對象,如圖5和后面的圖6所示。當你看到這個的時候,你應該意識到架構的重要性。為什么分析模型中的一個領域對象映射成這么多對象?如果改變設計,會出現(xiàn)什么問題?你也許聽說過EJB的好處,但是要注意不同供應商的性能是不同的。當一種新技術到來的時候,你需要在投入全面設計之前進行一些研究。你可以經(jīng)常地將設計和實現(xiàn)領域對象模型縱向聯(lián)合部分的經(jīng)驗應用到其他許多領域對象中。這就是架構開發(fā)的內容。

圖4 企業(yè)級架構:網(wǎng)絡布局
如圖4所示的一個多層企業(yè)級架構包括以下幾個主要構件:
一個Web瀏覽器客戶端,可能在也可能不在客戶端組織的防火墻內
一個HTTP服務器,是一個對公眾開放的Web服務器。它通常位于一個稱作DMZ的子網(wǎng)內
Web容器主表示層和可能的業(yè)務邏輯構件
應用程序容器主業(yè)務邏輯構件
關系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)和數(shù)據(jù)庫主數(shù)據(jù)、數(shù)據(jù)邏輯
你使用的系統(tǒng)架構類型依賴于安全、性能和可靠性的需求,也依賴于組織的財政狀況。在缺少經(jīng)驗的情況下,也可以適當?shù)貜囊粋€修理廠電話訂購一臺簡單地二手計算機。Internet上有許多開放源代碼的操作系統(tǒng)、Web服務器、應用程序服務器和數(shù)據(jù)庫管理系統(tǒng)。得到這些系統(tǒng)的代價只是幾百美元和熬幾個通宵。
象許多華爾街金融機構這樣的高端客戶也許需要一個連續(xù)支持安全、高吞吐量交易和不可預料網(wǎng)絡通訊的系統(tǒng)。在這種情況下,為了容錯,通常需要將Web服務器和應用程序服務器集群配置成一個n層架構。
還需要評估軟件基礎設施,包括Web服務器、安全管理軟件、應用程序服務器、域名管理服務器、數(shù)據(jù)庫管理系統(tǒng)和第三方軟件構件。如果還沒有購買應用程序服務器,選擇一個J2EE供應商將是評估過程的一個重要方面。應該注意到不同的供應商對J2EE的實現(xiàn)程度是不同的,一些供應商只支持老的J2EE版本。另外,一些Web容器或應用程序容器可能比其他的速度要快。除了實現(xiàn)J2EE規(guī)范外,許多供應商還出售J2EE基礎構件或框架。選擇一個穩(wěn)定的提供支持的J2EE供應商也非常關鍵。你可以在系統(tǒng)基礎設施層面上購買或開發(fā)的通用功能包括:
事務
國際化和本地化
集群和對象分布
應用程序性能度量和剖析
通訊
工作流管理
入口和個性化管理
層對層通訊協(xié)議
安全和防火墻
應用架構
應用架構參考一個特定的項目和規(guī)范建立在企業(yè)級系統(tǒng)架構的上層。在基礎設施完成后,架構師研究怎樣構造一個特定的應用。如果你的企業(yè)級架構僅部分支持老的J2EE版本,可以先升級你的系統(tǒng)。如果由于預算或時間關系不能升級,那么必須在更老版本規(guī)定的技術范圍內開展工作。雖然構造企業(yè)級重用構件非常重要,但是必須首先要能夠使用。這里的最終目標是滿足客戶的需求--一次一個項目。
架構師不是設計師;架構和設計是完全不同。一個應用架構的范圍包括系統(tǒng)的主要結構、架構設計模式和可以在上面增加構件的框架。架構主要關注的是非功能性方面,而設計關注應用業(yè)務用例將領域對象模型轉換成技術對象模型。應用架構是項目的結構,一個特殊的應用程序。通過應用架構開發(fā),你通常必須要做的應用架構決定包括:
層之間進行功能劃分
領域對象建模
要保護的遺留系統(tǒng)
要購買的軟件構件
要開發(fā)的構件
怎樣集成第三方構件
圖3的訂單領域對象說明了怎樣對領域對象進行建模。利用當前的Java技術,可以將領域對象分布在作為開發(fā)者管理持續(xù)性對象的Web容器中、應用程序服務器的EJB中或者作為RDBMS宿主的Java存儲過程中。
在寵物店藍圖中,我們將訂單對象設計成一個實體bean,一個詳細對象和一個數(shù)據(jù)訪問對象,如圖5和后面的圖6所示。當你看到這個的時候,你應該意識到架構的重要性。為什么分析模型中的一個領域對象映射成這么多對象?如果改變設計,會出現(xiàn)什么問題?你也許聽說過EJB的好處,但是要注意不同供應商的性能是不同的。當一種新技術到來的時候,你需要在投入全面設計之前進行一些研究。你可以經(jīng)常地將設計和實現(xiàn)領域對象模型縱向聯(lián)合部分的經(jīng)驗應用到其他許多領域對象中。這就是架構開發(fā)的內容。