Tuscany SCA扩展机制研究(1)
Tuscany作为Apache的孵化项目,提供了对 SOA的支持,包含的模块有 SCA, SDO,DAS三大块,本节仅对其 SCA实现进行一些探讨。 SCA实现的目前的版本为0.91,是在Tuscany1.0M2的基础上演化而来的,对于 SCA规范的支持也由0.96 Spec发展到了1.0Spec。其项目也是相当活跃的,从其Mail List中可见一斑。而对于其分化版本fabric3,显得相对冷清一些。
Tuscany作为Apache的孵化项目,提供了对 SOA 的支持,包含的模块有 SCA , SDO,DAS三大块,本节仅对其 SCA实现进行一些探讨。 SCA实现的目前的版本为0.91,是在Tuscany1.0M2的基础上演化而来的,对于 SCA规范的支持也由0.96 Spec发展到了1.0Spec。其项目也是相当活跃的,从其Mail List中可见一斑。而对于其分化版本fabric3,显得相对冷清一些。
Tuscany0.91相对于1.0M2,在结构上做了较大的调整,在功能处理上更加模块化了,其扩展也相对容易一些,仅需要实现较少的接口,就能达到目的,下图为Tuscany的运行期结构图:
SCA扩展机制包含了4个方面的扩展,有implementaion扩展,binding扩展,interface扩展,databinding扩展,下面就对其扩展机制分别作一下分析。
1、 Implementaion扩展
Implementation作为component的实现而存在,是作为component服务的提供者,component服务调用时,调用的就是implementaion提供的功能。Tuscany目前已实现的implementaion类型有java,script,spring,bpel,这些类型已能基本满足客户的需要,但有些情况还是需要用户自己定义一些特殊的实现。其扩展步骤如下:
a. 定义组装模型扩展(Implementation接口)
b. 定义接口及实现组装模型扩展
c. 定义实现的解析器(扩展StAXArtifactProcessor中的read,write,resolve方法)
d. 定义实现的提供者(扩展ImplementationProvider接口,生成调用Invoker)
e. 注册解析器及提供者(扩展ModuleActivator)
f. 发布ModuleActivator到系统中(在文件META-INF/loaders/com.primeton.sca.runtime.IModelLoader文件中注册)
扩展CRUD示例:
a. 在composite文件中定义component实现
<crud:implementation.crud directory =“/tmp” >
</ component >
对应的schema为:
substitutionGroup ="sca:implementation" />
< complexType name ="CRUDImplementation" >
< complexContent >
< extension base ="sca:Implementation" >
< attribute name ="directory" type ="string" use ="optional" />
</ extension >
</ complexContent >
</ complexType >
b. 接口定义
a) CRUDImplementation interface 扩展 org.apache.tuscany.sca.assembly.Implementation
b) CRUDImplementationFactory interface 定义 createImplementation() 方法
c) 定义实现接口CRUDImplementation
d) 定义实现工厂类CRUDImplementationFactory
c. 实现解析器StAXArtifactProcessor,对定义的implementation.crud directory=“/tmp”进行解析
d. 实现调用提供者ImplementationProvider,生成Invoker,通过方法createCallbackInvoker,createInvoker来完成
e. 在ModuleActivator中注册,在其start方法中注册,stop方法中销毁
f. 系统注册(在com.primeton.sca.runtime.IModelLoade文件中注册ModuleActivator)
其实现的类图如下:(待续)