在右下方我們選擇創建WLS8 project,也可以通過菜單File->New->WLS8 project來創建工程。創建工程時只需要指定工程所在目錄即可,我們指定為D:\ArcStyler\iBank,工程創建完畢后如下圖:

我們可以注意到ArcStyler分為三個部分,最上面是菜單和工具欄,中間是UML工具,最下面是MDA區域。
1.4.3??????? 建立PIM模型
如同使用一些通用的UML工具一樣,可以在UML工具區建立系統的PIM模型,包括以下工作:
????????? 創建一個名為iBank的包;
????????? 在iBank包中創建一個名為iBankDiagram的類圖;
????????? 在iBankDiagram圖中創建Account,Bank,Transfer三個組件;
????????? 為上面三個組件添加相應的方法和屬性;
完成之后得到的模型如下圖:

1.4.4??????? 建立PSM模型
其實在ArcStyler中并沒有區分PIM和PSM,因為ArcStyler并沒有提供從PIM到PSM的自動轉換工具,它是選擇了通過標注的方式來體現PSM的思想。
為了清晰起見,筆者將建模環節區分為建立PIM和建立PSM兩個部分,那么建立PSM其實只是給上面的PIM作出一些技術相關的標注,包括以下內容:
????????? 將Bank和Account組件標注為Entity Bean;
????????? 將Bank和Account組件的永久存儲管理模式標注為容器管理;
????????? 將Transfer組件標注為Session Bean;
標注過程如圖:

對于Bank和Account這兩個組件還需要創建工廠方法和容器類,我們右鍵選取Bank組件,然后從彈出式菜單中選擇Cartridge Wizards->WLS8->Create Collection Type,這樣創建了Bank組件的容器類,命名為Bank_Collection;同樣創建Account組件的容器類Account_Collection。接下來右鍵選取Bank組件,選擇MDA Cartridge Wizards->WLS8->Create Factory Method來創建工廠方法,將此方法命名為create,并設置相應的參數,如下圖:

同樣創建Account組件的create工廠方法。
1.4.5????????? 建模部署組件
在PSM模型完成以后,要將模型的部署工作也進行建模,本例中的部署建模很簡單,只需要進行以下幾步就可以完成:
????????? 首先創建一個名為libs的包;
????????? 在libs包中創建一個EJBArchive組件,命名為iBank;
????????? 從上面的PSM圖中將Account,Bank以及Transfer三個組件用鼠標拖拽至iBank組件中;
然后我們打開部署組件iBank的屬性,可以看到:

1.4.6??????? 配置MDA Cartridage
建模工作全部完成以后,接下來應該是代碼生成,不過在代碼生成之前,需要進行代碼生成器的配置工作。在ArcStyler中,代碼生成器以及配置管理方面的工具統一稱為MDA Cartridage,它負責具體生成代碼以及配置與管理工具。我稱之為MDA橋接器。ArcStyler之所以稱之為MDA工具,其根本原因就是它支持MDA橋接器的動態加載,使之可以生成不同技術路線的具體代碼。
我們這里需要配置的是WLS8的橋接器,我們只需指定代碼生成的目錄即可,配置畫面如下:

1.4.7??????? 模型驗證
在配置好了MDA橋接器之后,在代碼生成之前,需要進行模型驗證,模型驗證的操作很簡單,在工具欄上選擇WLS8:Verify,然后點擊它右邊的執行按鈕,就可以進行驗證,驗證后會有成功或失敗的提示:

模型驗證主要是驗證以下幾個方面的內容:
????????? 結構完整性,檢查模型中的組件或類是否重名等等;
????????? UML約束;
????????? ArcStyler約束;
????????? 技術可行性(Java約束,EJB容器約束,C#約束,.NET約束),當然技術可行性的驗證是基于你選擇的技術路線;
1.4.8??????? 代碼生成
在模型驗證成功以后,就可以進行代碼生成工作,選取工具欄上的WLS8:Generate,然后點擊它右邊的執行按鈕,就可以進行代碼生成,代碼生成的信息會顯示在下方的MDA區域內,如圖:

1.4.9??????? 代碼補充
代碼生成之后,我們需要進行代碼的補充工作,這是使用ArcStyler的唯一的代碼工作,補充的代碼主要是Bean方法實現以及測試類中的方法,需要進行代碼補充的源代碼文件如下:
????????? AccountBean.java
????????? TransferBean.java
????????? BankBean.java
????????? iBankTestClient.java
補充的內容參看說明文檔Tutorial.pdf第47頁Component Code Customization這一節。
ArcStyler可以自動生成Jbuilder工程,當我們進行代碼的補充工作的時候,可以直接打開生成的JBuilder工程,其中包含所有生成的源代碼,也可以直接使用其他代碼編輯工具修改。注意:代碼的添加和修改都在安全區中,進行反復的代碼生成工作并不會被覆蓋。
1.4.10??? 編譯
代碼補充完成以后,就可以進行編譯和運行了。ArcStyler中的編譯和運行是采用了集成的Ant工具。在ArcStyler的UML工具區的最右邊有一個Ant按鈕,點擊此按鈕可以打開Ant工具集,如圖:

可以看到Ant工具中的內容是一個表格,表格的每一項包括兩列,第一列是編譯或者運行的參數,第二列是說明。選擇build這一行,然后點擊下面的Run按鈕,就可以進行整個系統的編譯工作。
這里需要注意的是,如果你使用了我們前面提到的ArcStyler和Weblogic版本,那么編譯會出錯,筆者研究發現是由于Weblogic的jdk目錄名稱不符合造成的,例如本機的WebLogic安裝目錄是C:\bea,那么jdk目錄是C:\bea\jdk141_05,但是根據WebLogic的版本不同目錄名稱可能是C:\bea\jdk141_02至C:\bea\jdk141_05。但是由WLS8橋接器生成的編譯配置文件中統一為C:\bea\jdk141_03。所以我們這里需要將目錄名稱改為C:\bea\jdk141_03,編譯才可以順利通過。也許還有更好的方法,但是筆者目前還沒有發現。
編譯的內容包括:
????????? 編譯java源代碼,得到class文件;
????????? 為EJB組建生成EJB JAR文件;
????????? 為EJB容器的部署生成EAR JAR文件;
1.4.11??? 部署
編譯完成之后就可以進行部署工作了,我將部署工作分為以下四步:
????????? 創建Server實例,生成Weblogic8.1中的域,此域包含了本系統服務器的運行環境;
????????? 啟動PointBase數據庫;
????????? 在PointBase數據庫中創建EJB組件所需的表,由于EJB采用了CMP模式,所以我們幾乎不需要關心數據庫方面的工作;
????????? 啟動Server;
以上四步都是通過ArcStyler中的集成Ant工具完成了,完成手段和前面的編譯步驟一樣,只需要在Ant工具集中選擇相應的參數來運行即可:
?????
? 部署完成以后,服務器和數據庫會全部啟動,服務器的部署以及數據庫的表會創建完畢,如下圖:

1.4.12??? 運行
部署完成以后,在Ant工具集中選擇runClient參數,點擊run按鈕就可以運行客戶端的測試程序,運行結果會顯示在ArcStyler下方的MDA區域內,運行的過程是進行一次轉帳操作,如圖:

1.4.13??? 脫離ArcStyler環境運行
從編譯,部署到運行只是與Ant工具相關,脫離了ArcStyler環境,這些步驟仍然是可以很好的執行。在代碼生成的步驟中,已經生成了Ant工具所需的批處理文件build.bat以及配置文件build.xml,利用他們就可以脫離ArcStyler環境進行編譯,部署和運行。
Build.bat和build.xml所在目錄為ArcStyler目錄\工程目錄\自動生成的代碼目錄\組件目錄\部署組件目錄\橋接器名稱。例如本機的相應目錄為D:\ArcStyler\iBank\gen\components\libs\iBank\wls8。在此目錄中執行批處理文件build.bat,并給出對應的參數,就可以脫離ArcStyler進行編譯、部署和調試,例如:
build build是進行編譯;
build CreateServerInstance是創建服務器域;
其他依此類推,運行情況如圖:

1.5??????? 使用感想
至此為止,完成了網上銀行系統服務器端的工作,以及一個簡單的測試客戶端,通過上面的實例,寫幾點使用感想。
第一點感想是ArcStyler4.0的方便易用超出了我的想象,在3.0版本中,ArcStyler的自動代碼生成等工作還要依賴于RationalRose,但是在這個版本中已經將建模,代碼生成,編譯運行等功能全部集成了。現在已經可以稱為一個較為完整的MDA工具了。
第二點是從ArcStyler的水平我們可以看出MDA技術已經走上舞臺,一個技術的成熟與否要看支持它的工具的水平,ArcStyler的成功標志著MDA技術已經正式走上舞臺,無論以后MDA的出路如何,至少它反應了這個時代的一股潮流。
第三點是在《應用MDA》書中作者所提到的,橋接器技術將會成為MDA技術的第一個熱點。ArcStyler目前只支持J2EE和.NET平臺,是因為他本身只提供了這兩個平臺的橋接器,如果其他中間件廠商愿意提供橋接器,那么ArcStyler可以方便的擴充到支持這些廠商的中間件技術。
第四點感想來自于一個朋友的置疑,他說做做這種玩具般的結構型系統有用么?能否支持大規模的有動作語義的系統。對于這一點置疑,我的看法是,由于目前流行的建模語言(例如UML)在語義方面的功能還很弱,所以目前的MDA工具幾乎只支持結構型的系統,但是我相信隨著建模語言的進一步強化,MDA技術會越來越豐富,工具也將越來越好。
1.6??????? 后記
? 這個系統并沒有完成,系統的客戶端僅僅是一個用戶測試的簡單程序。ArcStyler提供了WebAccessor橋接器專門用于生成豐富的JSP的客戶端。希望以后能夠與大家共同討論。歡迎大家多多和我聯系,交流MDA技術,聯系方法wxb_nudt@163.com。
1.7??????? 參考書目
ArcStyler文檔《Tutorial》
《UML用戶指南》
《應用MDA》
《解析MDA》