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

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

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

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

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

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