關注點分離(separation of concerns)是面向服務的架構(ServiceOriented ArchitecturesSOA)的核心原則令人遺憾的是該原則在實現SOA服務時常常起不到作用我們通常會看到帶有多個關注點(如安全事務管理)的巨大的實現類使用業務邏輯記錄所有混合在一起的關注點使用Spring Framework和Aspect Oriented Programming (AOP)原則我們可以將關注點分離以用於服務實現
本文中我們將演示如何使用Apache Axis和Spring來開發Web service並使用Acegi Security對其進行保護——同時保持關注點很好地分離
動機和設計
本文中我們將使用的示例是名為FundsTransferService的服務銀行使用該服務將資金從一個賬戶轉移到另一個賬戶可以在本文的參考資料部分找到該服務的WSDL及所有源代碼配置文件和構建文件我們有意讓該服務保持非常簡單以便集中討論本文更有意義的方面在本服務的實現中我們將涉及三個關注點:
Web service管道用來公開作為服務的功能 用於轉移資金的業務邏輯 安全性用於保證只有經授權的用戶才能執行資金轉移 而真正的系統很可能是必須處理其他的關注點如事務管理日志等
我們想設計這樣一種實現處理每個關注點的代碼與其他的代碼完全分離對於Web service管道我們將使用Axis來公開作為服務的功能用於將資金從一個賬戶轉移到另一個賬戶的業務邏輯將封裝在一組POJO(Plain Old Java Object)中將通過Acegi Security框架來提供安全性我們將使用Spring Framework及其AOP工具把各方面聯系起來使構成該Web service實現的所有代碼之間的依賴性減到最小
該實現的設計如圖所示以黃色表示的對象就是我們需要實現的Web service以藍色表示的對象來自Axis;以粉紅色表示的對象來自Acegi;以綠色表示的對象來自SpringFundsTransferService是WSDL中所定義的服務接口為了簡化圖表我們將所有Axis類顯示為名為Axis Engine的組件BasicHandler也是Axis類但由於它對於設計比較重要(稍後詳述)所以單獨顯示出來FundsTransferServiceSoapBindingImpl是Axis的生成類需要實現它來提供服務功能將直接通過Spring委派業務邏輯POJO AccountMgrImpl(稍後也會對此進行詳細解釋)AccountMgrImpl與AccountMgr接口捆綁在一起是不錯的做法因為這樣就允許我們插入Spring以發揮其作用(盡管有其他方法可以不帶接口使用Spring)
.NET編程免費提供,內容來源於互聯網,本文歸原作者所有。