本文关注于SCA的几个基本概念:Component,Composite,Implemention,ComponentType,从规范、实现等不同的角度谈一下它们之间的区别。
也就是说,本文更多的是关注于它们之间的区别,至于它们每个是什么请参阅SCA集成规范。
Component
由上图可以看到,Component是SCA中可以提供业务功能的最小单元,Implemention是
Component提供服务的具体实现方式,可以是Java、C++、Bpel等等,没有Implemention那么Component就是个空壳,不
能提供任何有价值的服务,没有任何意义。Service是当前Component所能提供的服务列表,Reference则是该组件多引用的其他组件的服
务,Property起配置的作用。
Composite
从上图可以看到,Composite是由Component和Composite组成的,另外Composite也支持
整体对外提供服务,或者引用其他组件,因此还包括了Service、Reference以及配置它们的Property,Wire是Composite中
各个Component之间的关联关系,因此只有Composite中才会有Wire,Component中没有。
ComponentType
为什么把ComponentType单独拿出来呢,因为ComponentType容易让人混淆,带来理解上的困难,特
对它给与了比较多的精力,为了大家能看明白,也为了清理下自己的思路,为了理解它不知道翻了多少遍Assembly规范以及Tuscany的源代码,呵
呵,当然,现在的理解也不一定就是正确的,欢迎大家批评指正。
我们先来看下类图结构:
由此类图可以看到,Implemention和Composite都是ComponentType的子接口,ComponentType代表的其实是某种Implemention类型,比如Java、Bpel等等,比如Java的Implemention实现类如下:
BaseJavaImplementation是implementation.java的接口,其他还有implementation.bpel等等。
最后,对Service、Reference和Component、Composite等的关系结合类图做下介绍:
CompositeService和ComponentService正说明了可以提供服务的两种粒度,同理亦然,reference亦是如此:
而,Reference和Service有种共同的祖先:AbstractContract,如图: