首先,需要明確的是,SCA還沒有成為正式的標(biāo)準(zhǔn),盡管SCA目前已經(jīng)有比較穩(wěn)定的規(guī)范,有些文章錯誤地將SCA作為標(biāo)準(zhǔn)來看待。
SCA目標(biāo):基于組件的編程一直是軟件業(yè)簡化編程和提高效率和質(zhì)量的一個重要方法,但是往往對于不同語言我們有不同的組件模型,比如在J2EE技術(shù)領(lǐng)域,就有EJB,POJO,JDBC,JMS等。這對于項目初期分析和設(shè)計人員來說,是一個很大的挑戰(zhàn),導(dǎo)致在初期就需要選定具體的語言和技術(shù)。SCA的目的是使用戶在構(gòu)建企業(yè)應(yīng)用時有一個不再直接面對具體的技術(shù)細節(jié)的層次,而是通過服務(wù)組件的方式來構(gòu)建應(yīng)用。這種方式也使得客戶的企業(yè)應(yīng)用具有良好的分層架構(gòu),能夠很好的分離應(yīng)用的業(yè)務(wù)邏輯和IT邏輯,不但易于應(yīng)用的構(gòu)建,也易于應(yīng)用的更改和部署。
SCA和WSDL
WSDL是Web服務(wù)描述語言,但它只定義了服務(wù)接口,并不提供描述一個服務(wù)所依賴的其它服務(wù),以及這個服務(wù)所需要使用的配置策略和服務(wù)之間的依賴關(guān)系。單獨通過WSDL很難實現(xiàn)服務(wù)之間的組合調(diào)用。SCA比WSDL走的更遠,SCA定義了服務(wù)組件模型以及服務(wù)組裝模型。服務(wù)模型允許服務(wù)開發(fā)者不但定義服務(wù)的接口而且還定義了這個服務(wù)和其他服務(wù)的依賴關(guān)系,以及這些交互(事務(wù),安全,以及可靠 傳輸)之間的策略,還有服務(wù)潛在的配置等功能。服務(wù)組件是SCA中的基本組成元素和基本構(gòu)建單位,也是我們具體實現(xiàn)業(yè)務(wù)邏輯的地方。我們可以把它看成是構(gòu)建我們應(yīng)用的積木。
SCA和JBI
SCA和JBI其目的有很多相同之處:JBI在JSR 208中被定義,已經(jīng)成為使用Java語言把服務(wù)容器組裝為合成應(yīng)用的標(biāo)準(zhǔn);SCA是被推薦標(biāo)準(zhǔn),為在不同平臺不同語言解決組裝問題的提供了更廣泛的方法。SCA關(guān)注是的SOA開發(fā)者最初看到的和接觸到的,SCA并不關(guān)注SCA各個模塊最后是如何實現(xiàn)的。如果把SOA分成三個抽象層次的話:業(yè)務(wù)、服務(wù)、技術(shù)。那么SCA對應(yīng)的就是服務(wù)層的規(guī)范。JBI提供了一系列的API,用來建立開放、可擴展和模塊化的企業(yè)服務(wù)總線。可以說,JBI已經(jīng)觸及到具體的技術(shù)層面。SCA沒有局限于具體語言,而JBI僅限于用Java,因此JBI的應(yīng)用范圍更嚴(yán)格,在SOA未來的標(biāo)準(zhǔn)體系結(jié)構(gòu)中,可能成為其中的一部分Java實現(xiàn)標(biāo)準(zhǔn)。