原文見:http://azur.typepad.com/bpel/2005/12/sca_jbi_and_mor.html
1 SCA是什麼
WSDL的弱點:
WSDL在應用之間提高了連接性和可互操作性.但是,WSDL僅僅聚焦於一個服務的接口,不含服務依賴其他服務以及服務和它的依賴之間採取什麼策略配置的任何信息.
SCA一方面超越WSDL,定義了服務構件模型和服務組合模型. 服務構件超越了WSDL,允許服務開發者定義服務的接口,還可以定義服務對其他服務的依賴,還可以定義交互之間的策略(事務、安全、可靠傳輸等),以及服務可展示的潛在配置接口。
SCA不干涉服務的實現。可以用任何語言實現SCA構件
圖1
SCA定義了服務Assembly的標準-SCA Module。以前的構件開發以專有的部署描述符或者硬編碼的方式獲得服務與依賴之間的引用從而來Assembly服務。
圖2
另一方面,SCA定義了一個框架,讓開發者可以以POJO的方式輕鬆開發構件:SCA提供了一套註解,例如用於把POJO轉換爲服務、會話管理、異步通信等。
構件和組裝元數據對於SCA來說,其實現是不限制的、可擴展的。
註解1:構件與裝配元數據對實現不可知且可擴展的,所以能很方便的擴展對C#或其他你想用來實現服務的語言/模形的支持。
註解2:SCA包括了這樣的一個binding的概念:它允許multiple services在被組裝起來時,不要求需要SOAP(SCA能提供殊如:REST binding, Java Binding, JMS binding。)這些都是對WSIF的進一步的改進。
2 JBI和SCA的區別
SCA的一個亮點就是它只聚焦於SOA開發人員所見到的和所接觸到的東西。SCA並不關注於SCA的module在被組裝後是如何執行的。執行可以是以單服務器的方式來運行,服務器把SCA服務組件編譯成Java類; 或者執行能被實現成modular的引擎集(每個組件類型是一個引擎)通過ESB來使得它們之間進行交互。
JBI在另一個角度來說是一些聚焦於建立一個開放、可擴展、模塊化的ESB的API集。所以SCA和JBI在覈心上說是很少重疊的。相反,我認爲他們之間是相互補充的。
假如它們之間是相互補充的,爲什麼不把它們集成起來呢?這裏有2個原因,1)JBI聚焦於把同一個JVM內運行的引擎組裝起來;而在別一方面,SCA並不限制於在一個JVM中,它能使引擎集在不同的進程中很好的交叉運行,甚至可以在不同的Nodes上。2)JCA不僅支持Java,還支持服務的其他語言的實現如C,在將來還將支持C#,PHP等。所以說JBI是實現SCA系統的一種方式,不是唯一的方式。
我爲什麼喜歡SCA?
WSDL隱藏於概念接口下
擴展了傳統的接口的概念,從而支持異步交互。
松耦合的Modular,內心中孕藏着多語言的支持
以開發者爲中心
將來的發展:
SCA規範將進一步成熟。(當然要保持簡單)
JBI 2.0認可了SCA,並且做爲其服務組件和集成模式。
SCA認可了JBI,JBI將做爲基於Java的SCA系統中提供新組件和binding類形的方式