? ? ? ?大家好,我是IT修真院北京分院第31期的學員,一枚正直純潔善良的JAVA程序員。今天給大家分享一下,修真院官網JAVA任務9的深度思考——什么是Tuscany?
什么是TUSCANY?
開源 Apache Tuscany 項目致力于實現 SCA 規范(和一些其他的 SCA 規范,如 Service Data Objects 和 Data Access Service)。依照 Open Service-Oriented Architecture (OSOA) 和針對全球信息社會 (OASIS SCA Java) 規范的一些標準,Apache Tuscany 為 SCA 運行時提供了一個全面的基礎架構。這里需要說明的是Tuscany官方已經不維護了,但是了解其設計思想對我們理解現在很流行的微服務框架是有好處的.
隨著SCA(服務組件架構)和SDO(服務數據對象)最終落戶OASIS,國內對它們的關注也呈上升趨勢。與以往SOA 開發部署方式相比,SCA 所提供的編程模型和裝配模型大大減輕了這些工作的難度。加之有OASIS 標準組織和以IBM為代表的業界巨擘的保駕護航,SCA 和SDO 的前途不可限量。 Tuscany 是SCA 和SDO 的第一個參考實現,旨在提供基于SCA 和SDO 的SOA 基礎設施。Tuscany 幾乎是伴隨規范成長起來的,這樣做的目的是對規范進行驗證并獲得有益的反饋。
什么是SCA?
SCA是一個可執行的模型,用于將不同的 服務集成到一個業務解決方案。它簡化了實現業務服務的組件編程模型,這些組件可以使用不同編程語言實現。SCA帶來的一些益處主要為:
1,松耦合:組件件的集成不需要知道彼此是基于何種編程語言實現的。在同步、異步情況下,組件都可以被方便的調用。
2,可擴展性:組件可被簡單的被替換。既有的服務可被用來創建新的解決方案(自下而上),也可業務建模和開發(自上而下)。
3,生產率:SCA可讓你專心于分析業務邏輯,而不需要過多的去擔心系統架構。SCA簡化了所有開發者的使用體驗(包括J2EE和集成開發者)。
SCA組件實現
SCA的基本的組成部分是組件實現。當你編寫SCA代碼時,你通常正在寫一個組件的實現或者將被這樣的組件使用的代碼。 一個組件通常由下列屬性描述:
服務:描述了該類型的組件所能提供的功能; 引用:描述了該類型的組件相關功能的依賴性; 屬性:定義了配置參數,控制程序邏輯如何實現,例如,使用何種貨幣;
策略:描述了組件行為策略,主要有兩種策略: 實現策略:對組件實現施加影響,例如:事務、監視以及日志; 互動策略:定義組件件如何互動,例如:安全;
一個組件可以使用任何用戶想要的編程語言去實現,例如用BPEL去實現業務流程控制,XSL-T實現轉換,RUBY來編寫腳本,也可以使用純JAVA。這些服務、引用、屬性以及策略如何去定義界定了一個組件的是具體實現類型。
SCA集成
單個組件可獨立使用,也可被組合起來作為一個合成組件使用。一個合成組件不是代碼,而是由一個或多個組件集成起來作為一個整體提供服務的。合成作為一種解決方案,例如信用檢查組合。合成方案也可以在一個更大規模的解決方案中使用,例如信用檢查可能是一個訂單處理組合中的一部分,一個復合構建像一個組件一樣具有同樣的特性,它提供服務,包含對其他組件的引用,并且可以配置成像單獨組件那樣使用屬性和策略。
SCA DOMAIN(域)
這些組件無論獨立還是集成,全部都是可在不同環境下使用多次 的可重用單元。一個合成組件,連帶它的配置信息,被打包到一個叫做contribution的部署單元部署到域。資源可以在不同contributions間重用,比如:JAVA類、XSD文件、WSDL文件等等。 一個SCA域是一個完整的運行配置,可能分布于一系列互聯的的節點運行,域配置的整體布局,是服務依賴、屬性、策略的配置。一個域是運行著的系統,或者一組互相協作在一起工作工作的組件的邏輯視圖,它們通過SCA線路彼此連接。當它實際的用于一個SCA環境的時候,合成組件實例化。
2.知識剖析
實現一個TUSCANY項目具體的步驟
步驟1:定義所需要的功能塊:考慮下你的應用如何被分解為一個個較小的功能/服務,每個塊都是一個可以在總的應用里使用的邏輯操作單元,這樣的話,Calculator應用可以被分為五個功能塊:AddService(加)、SubstractService(減)、MultiplyService(乘)、DivideService(除)和一個主功能塊,起接收請求并引導到正確操作的控制器的作用。我們可以叫這個控制器為CalculatorService。
步驟2:實現每個功能塊:既然你已經識別了應用中的功能塊,現在將準備創建它們。在SCA里,功能性的塊稱為組件。我們將把AddService組件作為我們的第一個例子。一個組件包括方法的接口及其實現
步驟3:編寫CalculatorService組件,它會調用AddService組件,在完整應用中,它會調用SubtractService、MultiplyService以及DivideService組件,但我們目前會忽略其他的,因為它們和我們實現的AddService是一個模式。
編寫CalculatorService組件同樣從CalculatorService接口開始,這是自身提供給其他程序調用的接口,然后實現這個接口.
步驟4:組裝應用.編寫Tuscany重要的配置文件"Calculator.composite".該配置文件是告訴SCA 這些組件在我們計算器應用內如何集成工作的一個XML文件。我們在這里定義了兩個組件并且指定了Tuscany SCA需要加載去實現業務計算的Java實現類。它們是我們剛剛實現的那些類. 需要注意的是,CalculatorServiceComponent擁有一個對addService的引用,在這個XML配置文件里,這個引用目標是AddServiceComponent。當我們實現CalculatorServiceImpl時,引用名字"addService",與我們建立的addService 領域的名字相配,這不是巧合。
Tuscany SCA運行時從Xml配置文件解析這些信息,并且用來創建描述我們calculator應用程序的對象和關系。它首先創建了AddServiceImpl 和CalcualtorSreviceImpl的實例,然后將AddServiceImpl引用注入到CalculatorServiceImpl對象的addService字段域。如果你回過頭來看下我們如何實現的CalculatorService,你會發現@Reference注釋,它告訴SCA哪些字段/域需要被自動設置。
步驟5:在服務端使用Tuscany的Node啟動該服務,并在客戶端接收該服務,并使用.
3.編碼實戰
4.常見問題
因為Tuscany已經被官方放棄了,所以出現很容易出現jar沖突的問題,需要使用exclusion去掉有沖突的jar包,另外還可以降低Spring jar包的版本號試試.
5.參考文獻
https://blog.csdn.net/supheros/article/details/40982973
http://book.51cto.com/art/200805/75270.htm
https://blog.csdn.net/abigfrog/article/details/1812162
https://www.cnblogs.com/skyme/archive/2011/10/31/2217739.html
6.更多討論
鳴謝
感謝觀看,如有出錯,懇請指正
今天的分享就到這里啦,歡迎大家點贊、轉發、留言、拍磚~
????????技能樹.IT修真院
????????“我們相信人人都可以成為一個工程師,現在開始,找個師兄,帶你入門,掌控自己學習的節奏,學習的路上不再迷茫”。
????????這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學習路線,學習透明化,成長可見化,師兄1對1免費指導。快來與我一起學習吧~
我的邀請碼:17742750,或者你可以直接點擊此鏈接:http://www.jnshu.com/login/1/17742750
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。