前言
雖然IBM放棄了WSAD、ROSE的繼續發展(取而代之的是Rational Software Architect),但作為一代經典的ROSE,到今天仍然是系統建模的有力工具。
至於WSAD,我本人從4.0就開始使用,通過IBM的紅皮書的范例和教程,我逐步掌握了JSP、EJB、WebService等技術。
對於初學者來說,WSAD很容易上手:
安裝容易
中文菜單
本身帶Websphere測試環境、不需要復雜的配置
IBM紅皮書教程豐富的范例和教程
不需要額外的運行環境和插件
並且,從WSAD轉向eclipse相當容易,WSAD本身就是基於eclipse,界面和eclipse非常類似,大部分快捷鍵都和eclipse一致。
本文通過jpetstore(struts+ibatis)范例,介紹WSAD的基本用法、並用ROSE為jpetstore建立用例模型、數據模型、WEB模型等,最後將jpetstore改造成用spring+hibernate實現,可作為WSAD、ROSE初學著的入門教程。
一、jpetstore簡介
大家知道,SUN公司J2EE藍圖應用程序,petstore寵物店有很多版本,jpetstore版本的詳細介紹可參見基於struts+spring+ibatis的輕量級J2EE開發。
我個人認為,jpetstore版本的設計有許多值得學習的地方,建議大家仔細讀讀它的源代碼。
jpetstore的主要特點:
所有的Action通過BeanAction實現,相當做了IOC,便於系統的擴展(如增加BeforeAction和AfterAction的攔截器)。
通過LocalThread技術,解決了Struts中Action線程不安全的問題。
ActionContext封裝了所有請求的參數(Parameter)、會話(Session)、Servlet上下文(ServletContext)等內容,具體的方法就不需要參數了。
ActionForm與Action合二為一,表現層Bean裡面可以有多個方法。
可以在表現層Bean中方便地使用POJO對象。
由於做了IOC,對BaseBean、BeanAction稍加改造,持久層、業務層、表現層遇到錯誤直接拋異常,在BeanAction可以捕獲到所有異常,便於錯誤和異常的統一處理。
二、用WSAD運行jpetstore
第一步:用DDL中的腳本建表和數據。
第二步:啟動WSAD後,建立工程
1.由於已有jpetstore文件,選擇文件->導入
選war文件(也可以war解壓縮,選擇文件系統):
點擊“完成”後,選擇相應的war文件(見附件)。
2.“新建”項目
取名jpetstoreWeb
完成後,建立了一個動態WEB項目。
3.導入Java文件
在“Java資源”右鍵選擇導入,類似的,選擇導入文件系統後,選擇src文件夾(jpetstore.war中有,解壓出來)。
工程就建立起來了。
4.修改propertiesdatabase.propertIEs文件,比如,如果是MySQL數據庫
driver=org.gjt.mm.mysql.Driverurl=jdbc:MySQL://localhost/jpetstoreusername=rootpassWord=root
第三步:運行工程
右鍵點擊“jpetstoreWeb”工程,選擇“在服務器上運行”
由於WSAD帶WebSphere測試環境,全部默認就可以。
在IE運行 http://localhost:9080/jpetstoreWeb/
控制台右下有“服務器”,可以啟動或者停止服務器。
第四步:重構項目
1.右鍵com.ibatis.jpetstore.persistence.iface.AccountDao,選擇“重命名”,如為IAccountDao(我個人的習慣,接口都以I開頭),所有引用AccountDao的Java文件中,AccountDao也全部更改名稱了。其余的幾個Dao也重命名。
2.打開com.ibatis.jpetstore.service.AccountService,選擇“重構”->“抽取接口”,命名IAccountService,形成接口和實現兩個文件,所有對AccountService的引用也同時修改。
第五步:導出EAR文件。
二、在Websphere5.1中運行jpetstore
進入Webshpere的管理控制台,選擇安裝新的應用程序,導入並發布jpetstore.ear後,就可以在IE中直接運行了( http://localhost:9080/jpetstoreWeb/)。
三、用ROSE為jpetstore建模
本部分的模型,首先通過ROSE工具的反向工程(Reverse Engineer)、然後進行整理生成。
(一)、UseCase用例
普通用戶(user)可以搜索產品(searchProducts)、查看產品分類(viewCategory)、查看產品(viewProduct)、查看產品項目(vIEwItem)、注冊新賬號(newAccount)、登陸(sign-In)。
登陸後的用戶(signedUser)可以注銷登陸(sign-Out)、編輯賬號(editAccount)、將產品項目放入購物車(addItemToCart)、從購物車刪除產品項目(removeItemFromCart)、修改購物數量(updateCartQuantities)、新訂單(newOrder)、查看訂單(vIEWorder)、查看購物車(vIEwCart)、結算(checkout)。
(二)、數據模型
點擊看大圖
jpetstore的數據模型可以分三大類:
1.產品相關:
產品分類(CATEGORY)
產品(PRODUCT),也可以說是產品的小分類
單個產品(ITEM),描述具體產品的詳細屬性
供應商(SUPPLIER)
產品庫存(INVENTORY)
2.用戶賬號相關:
用戶賬號(ACCOUNT)
用戶口令(SIGNON),ibatis純粹為了展示表關聯的用法。
用戶配置文件(PROFILE),存放用戶個性化信息。
系統BANNER信息(BANNERDATA)
3.訂單相關:
用戶訂單(ORDERS)
訂單狀態(ORDERSTATUS)
訂單詳情(LINEITEM)
(三)、WEB模型
WEB模型一向是各個建模工具的弱項,ROSE的WEB建模能力也不強,有時不能表達准確的含義。
1.新增、修改賬號
點擊看大圖
2.浏覽產品
點擊看大圖
3.訂單
4.購物車(略)
對於WEB模型,配合struts的導航圖(NitroX生成,部分截圖),會更清楚些。
點擊看大圖
(四)、類圖
點擊看大圖
蘭色方框內是通過spring+hibernate實現的。可以看到,表現層的AccountBean是面向接口調用Service的,當改為用hibernate實現O/R mapping時,只需要修改接口的實現類(DAO持久層),表現層的程序不需要任何修改。