本文關(guān)注于SCA的幾個(gè)基本概念:Component,Composite,Implemention,ComponentType,從規(guī)范、實(shí)現(xiàn)等不同的角度談一下它們之間的區(qū)別。
也就是說,本文更多的是關(guān)注于它們之間的區(qū)別,至于它們每個(gè)是什么請(qǐng)參閱SCA集成規(guī)范。
Component

由上圖可以看到,Component是SCA中可以提供業(yè)務(wù)功能的最小單元,Implemention是
Component提供服務(wù)的具體實(shí)現(xiàn)方式,可以是Java、C++、Bpel等等,沒有Implemention那么Component就是個(gè)空殼,不
能提供任何有價(jià)值的服務(wù),沒有任何意義。Service是當(dāng)前Component所能提供的服務(wù)列表,Reference則是該組件多引用的其他組件的服
務(wù),Property起配置的作用。
Composite
從上圖可以看到,Composite是由Component和Composite組成的,另外Composite也支持
整體對(duì)外提供服務(wù),或者引用其他組件,因此還包括了Service、Reference以及配置它們的Property,Wire是Composite中
各個(gè)Component之間的關(guān)聯(lián)關(guān)系,因此只有Composite中才會(huì)有Wire,Component中沒有。
ComponentType
為什么把ComponentType單獨(dú)拿出來呢,因?yàn)镃omponentType容易讓人混淆,帶來理解上的困難,特
對(duì)它給與了比較多的精力,為了大家能看明白,也為了清理下自己的思路,為了理解它不知道翻了多少遍Assembly規(guī)范以及Tuscany的源代碼,呵
呵,當(dāng)然,現(xiàn)在的理解也不一定就是正確的,歡迎大家批評(píng)指正。
我們先來看下類圖結(jié)構(gòu):

由此類圖可以看到,Implemention和Composite都是ComponentType的子接口,ComponentType代表的其實(shí)是某種Implemention類型,比如Java、Bpel等等,比如Java的Implemention實(shí)現(xiàn)類如下:

BaseJavaImplementation是implementation.java的接口,其他還有implementation.bpel等等。
最后,對(duì)Service、Reference和Component、Composite等的關(guān)系結(jié)合類圖做下介紹:

CompositeService和ComponentService正說明了可以提供服務(wù)的兩種粒度,同理亦然,reference亦是如此:

而,Reference和Service有種共同的祖先:AbstractContract,如圖:
