在右下方我們選擇創(chuàng)建WLS8 project,也可以通過(guò)菜單File->New->WLS8 project來(lái)創(chuàng)建工程。創(chuàng)建工程時(shí)只需要指定工程所在目錄即可,我們指定為D:\ArcStyler\iBank,工程創(chuàng)建完畢后如下圖:
斌\MDA\ArcStyler實(shí)戰(zhàn)-網(wǎng)上銀行系統(tǒng)1.files\image004.jpg)
我們可以注意到ArcStyler分為三個(gè)部分,最上面是菜單和工具欄,中間是UML工具,最下面是MDA區(qū)域。
1.4.3??????? 建立PIM模型
如同使用一些通用的UML工具一樣,可以在UML工具區(qū)建立系統(tǒng)的PIM模型,包括以下工作:
????????? 創(chuàng)建一個(gè)名為iBank的包;
????????? 在iBank包中創(chuàng)建一個(gè)名為iBankDiagram的類圖;
????????? 在iBankDiagram圖中創(chuàng)建Account,Bank,Transfer三個(gè)組件;
????????? 為上面三個(gè)組件添加相應(yīng)的方法和屬性;
完成之后得到的模型如下圖:
斌\MDA\ArcStyler實(shí)戰(zhàn)-網(wǎng)上銀行系統(tǒng)1.files\image006.jpg)
1.4.4??????? 建立PSM模型
其實(shí)在ArcStyler中并沒(méi)有區(qū)分PIM和PSM,因?yàn)?/SPAN>ArcStyler并沒(méi)有提供從PIM到PSM的自動(dòng)轉(zhuǎn)換工具,它是選擇了通過(guò)標(biāo)注的方式來(lái)體現(xiàn)PSM的思想。
為了清晰起見(jiàn),筆者將建模環(huán)節(jié)區(qū)分為建立PIM和建立PSM兩個(gè)部分,那么建立PSM其實(shí)只是給上面的PIM作出一些技術(shù)相關(guān)的標(biāo)注,包括以下內(nèi)容:
????????? 將Bank和Account組件標(biāo)注為Entity Bean;
????????? 將Bank和Account組件的永久存儲(chǔ)管理模式標(biāo)注為容器管理;
????????? 將Transfer組件標(biāo)注為Session Bean;
標(biāo)注過(guò)程如圖:
斌\MDA\ArcStyler實(shí)戰(zhàn)-網(wǎng)上銀行系統(tǒng)1.files\image008.jpg)
對(duì)于Bank和Account這兩個(gè)組件還需要?jiǎng)?chuàng)建工廠方法和容器類,我們右鍵選取Bank組件,然后從彈出式菜單中選擇Cartridge Wizards->WLS8->Create Collection Type,這樣創(chuàng)建了Bank組件的容器類,命名為Bank_Collection;同樣創(chuàng)建Account組件的容器類Account_Collection。接下來(lái)右鍵選取Bank組件,選擇MDA Cartridge Wizards->WLS8->Create Factory Method來(lái)創(chuàng)建工廠方法,將此方法命名為create,并設(shè)置相應(yīng)的參數(shù),如下圖:
斌\MDA\ArcStyler實(shí)戰(zhàn)-網(wǎng)上銀行系統(tǒng)1.files\image010.jpg)
同樣創(chuàng)建Account組件的create工廠方法。
1.4.5????????? 建模部署組件
在PSM模型完成以后,要將模型的部署工作也進(jìn)行建模,本例中的部署建模很簡(jiǎn)單,只需要進(jìn)行以下幾步就可以完成:
????????? 首先創(chuàng)建一個(gè)名為libs的包;
????????? 在libs包中創(chuàng)建一個(gè)EJBArchive組件,命名為iBank;
????????? 從上面的PSM圖中將Account,Bank以及Transfer三個(gè)組件用鼠標(biāo)拖拽至iBank組件中;
然后我們打開(kāi)部署組件iBank的屬性,可以看到:
斌\MDA\ArcStyler實(shí)戰(zhàn)-網(wǎng)上銀行系統(tǒng)1.files\image012.jpg)
1.4.6??????? 配置MDA Cartridage
建模工作全部完成以后,接下來(lái)應(yīng)該是代碼生成,不過(guò)在代碼生成之前,需要進(jìn)行代碼生成器的配置工作。在ArcStyler中,代碼生成器以及配置管理方面的工具統(tǒng)一稱為MDA Cartridage,它負(fù)責(zé)具體生成代碼以及配置與管理工具。我稱之為MDA橋接器。ArcStyler之所以稱之為MDA工具,其根本原因就是它支持MDA橋接器的動(dòng)態(tài)加載,使之可以生成不同技術(shù)路線的具體代碼。
我們這里需要配置的是WLS8的橋接器,我們只需指定代碼生成的目錄即可,配置畫面如下:
斌\MDA\ArcStyler實(shí)戰(zhàn)-網(wǎng)上銀行系統(tǒng)1.files\image014.jpg)
1.4.7??????? 模型驗(yàn)證
在配置好了MDA橋接器之后,在代碼生成之前,需要進(jìn)行模型驗(yàn)證,模型驗(yàn)證的操作很簡(jiǎn)單,在工具欄上選擇WLS8:Verify,然后點(diǎn)擊它右邊的執(zhí)行按鈕,就可以進(jìn)行驗(yàn)證,驗(yàn)證后會(huì)有成功或失敗的提示:
斌\MDA\ArcStyler實(shí)戰(zhàn)-網(wǎng)上銀行系統(tǒng)1.files\image016.jpg)
模型驗(yàn)證主要是驗(yàn)證以下幾個(gè)方面的內(nèi)容:
????????? 結(jié)構(gòu)完整性,檢查模型中的組件或類是否重名等等;
????????? UML約束;
????????? ArcStyler約束;
????????? 技術(shù)可行性(Java約束,EJB容器約束,C#約束,.NET約束),當(dāng)然技術(shù)可行性的驗(yàn)證是基于你選擇的技術(shù)路線;
1.4.8??????? 代碼生成
在模型驗(yàn)證成功以后,就可以進(jìn)行代碼生成工作,選取工具欄上的WLS8:Generate,然后點(diǎn)擊它右邊的執(zhí)行按鈕,就可以進(jìn)行代碼生成,代碼生成的信息會(huì)顯示在下方的MDA區(qū)域內(nèi),如圖:
斌\MDA\ArcStyler實(shí)戰(zhàn)-網(wǎng)上銀行系統(tǒng)1.files\image018.jpg)
1.4.9??????? 代碼補(bǔ)充
代碼生成之后,我們需要進(jìn)行代碼的補(bǔ)充工作,這是使用ArcStyler的唯一的代碼工作,補(bǔ)充的代碼主要是Bean方法實(shí)現(xiàn)以及測(cè)試類中的方法,需要進(jìn)行代碼補(bǔ)充的源代碼文件如下:
????????? AccountBean.java
????????? TransferBean.java
????????? BankBean.java
????????? iBankTestClient.java
補(bǔ)充的內(nèi)容參看說(shuō)明文檔Tutorial.pdf第47頁(yè)Component Code Customization這一節(jié)。
ArcStyler可以自動(dòng)生成Jbuilder工程,當(dāng)我們進(jìn)行代碼的補(bǔ)充工作的時(shí)候,可以直接打開(kāi)生成的JBuilder工程,其中包含所有生成的源代碼,也可以直接使用其他代碼編輯工具修改。注意:代碼的添加和修改都在安全區(qū)中,進(jìn)行反復(fù)的代碼生成工作并不會(huì)被覆蓋。
1.4.10??? 編譯
代碼補(bǔ)充完成以后,就可以進(jìn)行編譯和運(yùn)行了。ArcStyler中的編譯和運(yùn)行是采用了集成的Ant工具。在ArcStyler的UML工具區(qū)的最右邊有一個(gè)Ant按鈕,點(diǎn)擊此按鈕可以打開(kāi)Ant工具集,如圖:
斌\MDA\ArcStyler實(shí)戰(zhàn)-網(wǎng)上銀行系統(tǒng)1.files\image020.jpg)
可以看到Ant工具中的內(nèi)容是一個(gè)表格,表格的每一項(xiàng)包括兩列,第一列是編譯或者運(yùn)行的參數(shù),第二列是說(shuō)明。選擇build這一行,然后點(diǎn)擊下面的Run按鈕,就可以進(jìn)行整個(gè)系統(tǒng)的編譯工作。
這里需要注意的是,如果你使用了我們前面提到的ArcStyler和Weblogic版本,那么編譯會(huì)出錯(cuò),筆者研究發(fā)現(xiàn)是由于Weblogic的jdk目錄名稱不符合造成的,例如本機(jī)的WebLogic安裝目錄是C:\bea,那么jdk目錄是C:\bea\jdk141_05,但是根據(jù)WebLogic的版本不同目錄名稱可能是C:\bea\jdk141_02至C:\bea\jdk141_05。但是由WLS8橋接器生成的編譯配置文件中統(tǒng)一為C:\bea\jdk141_03。所以我們這里需要將目錄名稱改為C:\bea\jdk141_03,編譯才可以順利通過(guò)。也許還有更好的方法,但是筆者目前還沒(méi)有發(fā)現(xiàn)。
編譯的內(nèi)容包括:
????????? 編譯java源代碼,得到class文件;
????????? 為EJB組建生成EJB JAR文件;
????????? 為EJB容器的部署生成EAR JAR文件;
1.4.11??? 部署
編譯完成之后就可以進(jìn)行部署工作了,我將部署工作分為以下四步:
????????? 創(chuàng)建Server實(shí)例,生成Weblogic8.1中的域,此域包含了本系統(tǒng)服務(wù)器的運(yùn)行環(huán)境;
????????? 啟動(dòng)PointBase數(shù)據(jù)庫(kù);
????????? 在PointBase數(shù)據(jù)庫(kù)中創(chuàng)建EJB組件所需的表,由于EJB采用了CMP模式,所以我們幾乎不需要關(guān)心數(shù)據(jù)庫(kù)方面的工作;
????????? 啟動(dòng)Server;
以上四步都是通過(guò)ArcStyler中的集成Ant工具完成了,完成手段和前面的編譯步驟一樣,只需要在Ant工具集中選擇相應(yīng)的參數(shù)來(lái)運(yùn)行即可:
?????
? 部署完成以后,服務(wù)器和數(shù)據(jù)庫(kù)會(huì)全部啟動(dòng),服務(wù)器的部署以及數(shù)據(jù)庫(kù)的表會(huì)創(chuàng)建完畢,如下圖:
斌\MDA\ArcStyler實(shí)戰(zhàn)-網(wǎng)上銀行系統(tǒng)1.files\image024.jpg)
1.4.12??? 運(yùn)行
部署完成以后,在Ant工具集中選擇runClient參數(shù),點(diǎn)擊run按鈕就可以運(yùn)行客戶端的測(cè)試程序,運(yùn)行結(jié)果會(huì)顯示在ArcStyler下方的MDA區(qū)域內(nèi),運(yùn)行的過(guò)程是進(jìn)行一次轉(zhuǎn)帳操作,如圖:
斌\MDA\ArcStyler實(shí)戰(zhàn)-網(wǎng)上銀行系統(tǒng)1.files\image026.jpg)
1.4.13??? 脫離ArcStyler環(huán)境運(yùn)行
從編譯,部署到運(yùn)行只是與Ant工具相關(guān),脫離了ArcStyler環(huán)境,這些步驟仍然是可以很好的執(zhí)行。在代碼生成的步驟中,已經(jīng)生成了Ant工具所需的批處理文件build.bat以及配置文件build.xml,利用他們就可以脫離ArcStyler環(huán)境進(jìn)行編譯,部署和運(yùn)行。
Build.bat和build.xml所在目錄為ArcStyler目錄\工程目錄\自動(dòng)生成的代碼目錄\組件目錄\部署組件目錄\橋接器名稱。例如本機(jī)的相應(yīng)目錄為D:\ArcStyler\iBank\gen\components\libs\iBank\wls8。在此目錄中執(zhí)行批處理文件build.bat,并給出對(duì)應(yīng)的參數(shù),就可以脫離ArcStyler進(jìn)行編譯、部署和調(diào)試,例如:
build build是進(jìn)行編譯;
build CreateServerInstance是創(chuàng)建服務(wù)器域;
其他依此類推,運(yùn)行情況如圖:
斌\MDA\ArcStyler實(shí)戰(zhàn)-網(wǎng)上銀行系統(tǒng)1.files\image028.jpg)
1.5??????? 使用感想
至此為止,完成了網(wǎng)上銀行系統(tǒng)服務(wù)器端的工作,以及一個(gè)簡(jiǎn)單的測(cè)試客戶端,通過(guò)上面的實(shí)例,寫幾點(diǎn)使用感想。
第一點(diǎn)感想是ArcStyler4.0的方便易用超出了我的想象,在3.0版本中,ArcStyler的自動(dòng)代碼生成等工作還要依賴于RationalRose,但是在這個(gè)版本中已經(jīng)將建模,代碼生成,編譯運(yùn)行等功能全部集成了。現(xiàn)在已經(jīng)可以稱為一個(gè)較為完整的MDA工具了。
第二點(diǎn)是從ArcStyler的水平我們可以看出MDA技術(shù)已經(jīng)走上舞臺(tái),一個(gè)技術(shù)的成熟與否要看支持它的工具的水平,ArcStyler的成功標(biāo)志著MDA技術(shù)已經(jīng)正式走上舞臺(tái),無(wú)論以后MDA的出路如何,至少它反應(yīng)了這個(gè)時(shí)代的一股潮流。
第三點(diǎn)是在《應(yīng)用MDA》書(shū)中作者所提到的,橋接器技術(shù)將會(huì)成為MDA技術(shù)的第一個(gè)熱點(diǎn)。ArcStyler目前只支持J2EE和.NET平臺(tái),是因?yàn)樗旧碇惶峁┝诉@兩個(gè)平臺(tái)的橋接器,如果其他中間件廠商愿意提供橋接器,那么ArcStyler可以方便的擴(kuò)充到支持這些廠商的中間件技術(shù)。
第四點(diǎn)感想來(lái)自于一個(gè)朋友的置疑,他說(shuō)做做這種玩具般的結(jié)構(gòu)型系統(tǒng)有用么?能否支持大規(guī)模的有動(dòng)作語(yǔ)義的系統(tǒng)。對(duì)于這一點(diǎn)置疑,我的看法是,由于目前流行的建模語(yǔ)言(例如UML)在語(yǔ)義方面的功能還很弱,所以目前的MDA工具幾乎只支持結(jié)構(gòu)型的系統(tǒng),但是我相信隨著建模語(yǔ)言的進(jìn)一步強(qiáng)化,MDA技術(shù)會(huì)越來(lái)越豐富,工具也將越來(lái)越好。
1.6??????? 后記
? 這個(gè)系統(tǒng)并沒(méi)有完成,系統(tǒng)的客戶端僅僅是一個(gè)用戶測(cè)試的簡(jiǎn)單程序。ArcStyler提供了WebAccessor橋接器專門用于生成豐富的JSP的客戶端。希望以后能夠與大家共同討論。歡迎大家多多和我聯(lián)系,交流MDA技術(shù),聯(lián)系方法wxb_nudt@163.com。
1.7??????? 參考書(shū)目
ArcStyler文檔《Tutorial》
《UML用戶指南》
《應(yīng)用MDA》
《解析MDA》