启动过程分析覆盖
Tuscany作为SCASpec1.0实现,现在已接近Release 1.0的尾声,在近期将发布。其结构相对7月份发布的0.91版本进行了较大的调整,优化了代码的结构并且增加了部分新功能。本文将针对其最新代码,通过对其启动过程进行分析,来了解Tuscany中对资源的加载及模型组装的处理。
一、启动前准备
1、 扩展点注册器实例化
Tuscany的实现采用了扩展点机制,所有的可重用对象都会在其中注册,因此把扩展点注册器作为参数来回传递,通过它可以从中拿到所有的已注册对象。
2、 注册对象到扩展点注册器
Tuscany的现有版本与以前版本进行了较大改进,由原来在代码中指定改为了由配置文件中指定,加载的方式也改为了Lazy Loading,在从注册器中取得对象时加载配置文件,然后把实例放入注册器的集合中,以便下次直接从中取得需要的对象,不再解析配置文件。
最先注册的对象有:WorkScheduler,ModelFactoryExtensionPoint,ContextFactoryExtensionPoint,ProxyFactory,InterfaceContractMapper。
3、加载ModuleActivator
遍历所有定义的ModuleActivator文件,解析其中的内容作为ModuleActivator接口的实现,然后执行其中的start方法。
ModuleActivator现有接口已经去掉了扩展点注册的方法。
4、解析策略配置文件l
策略配置文件配置了针对binding,implementation所使用的策略,其使用方式可参考其SCAspec中的Policy Framework一节。
二、资源加载
Tuscany对资源的划分是以Contribution为单位的,Contribution作为一组资源的集合,包含了SCA的配置文件如*.composite,*.componentType,l,以及用到的一些附加文件如*.wsdl等。
现在说明一下Tuscany对单个Contribution的资源加载处理。
1、资源查找
在Tuscany中定义了两种Processor,Dir Processor和Jar Processor,分别对目录及Jar中资源进行遍历,返回其中包含的资源列表。
2、资源解析
针对Contribution中的每一个资源都会生成DeployedArtifact对象,在其属性Model中保存着资源的元模型数据。
去年她种植的20亩玫瑰喜获丰收。“起初村民们调侃俺种的这些‘月季’没什么用 每个资源解析成元模型主要是依据针对每一资源有一对应的Processor,在其中包含有Read方法负责解析提供URL对应的资源。已提供的解析器有针对*.composite,*.componentType,*.wsdl,*.xsd类型文件的解析。同时针对文件中的不同结点也定义了相应的解析器,如对composite,reference,property,service等结点的解析。Tuscany中采用流XStream方式解析。
3、可发布资源解析
每一个Contribution中都可以定义对外发布的资源列表,通过META-INF/l进行定义。同时,在其中也可以定义对外引用和对外暴露的服务。
其Schema格式如下:
示例:4@5l@4@11@9@11@9@5xe\" o:preferrelative=\"t\" o:spt=\"75\" coordsize=\"21600,21600\"
4@5l@4@11@9@11@9@5xe\" o:preferrelative=\"t\" o:spt=\"75\" coordsize=\"21600,21600\"
4@5l@4@11@9@11@9@5xe\" o:preferrelative=\"t\" o:spt=\"75\" coordsize=\"21600,21600\"
4@5l@4@11@9@11@9@5xe\" o:preferrelative=\"t\" o:spt=\"75\" coordsize=\"21600,21600\"
4@5l@4@11@9@11@9@5xe\" o:preferrelative=\"t\" o:spt=\"75\" coordsize=\"21600,21600\"
Contribution的结构图如下:
三、资源组装
针对每个Contribution中的可发布资源,如果类型为composite,则进行各个composite,component之间的关联(Wire)。
组装的过程分为三个步骤:build, activate, start。
1、build过程
build主要完成Composite之间的关联,包括compoiste文件中Include元素的解析,Component实现为Compoiste的处理,以及Service,binding,Reference的处理等等。
2、activate过程
主要完成component的ImplementationProvider的赋值,同时针对component中Service的binding进行设置BindingProvider,并针对每一Service,设置其RuntimeWire。
3、start过程
主要完成Component对应的ServiceBindingProvider,ImplementationProvider,ScopeContainer完成启动,通过执行方法start完成。
形成RuntimeWire过程图如下:
8月22日 15:29:54
钦州医院哪白癜风好昆明医院男科治疗哪家好
小孩积食怎么办
- 06月21日女生网大丹犬多少钱一只大丹犬价格位置
- 06月21日女生网外媒说王思聪的狗是最放纵狗英国狗表示不服位置
- 06月21日女生网外出期间博美犬为什么不跟着我们位置
- 06月21日女生网给狗狗吃龙虾有什么坏处位置
- 06月21日女生网多伯曼平犬位置
- 06月21日女生网多一点关怀照料好妊娠期的雪纳瑞母犬位置
- 06月21日女生网夏季金毛犬饲养问题位置
- 06月20日女生网猫带铃铛好吗位置
- 06月20日女生网猫咪高空跳楼为什么不死呢位置
- 06月20日女生网猫咪饮食需求有哪些猫咪饲料中营养需求位置
- 06月20日女生网猫怎么养养猫注意事项有哪些位置
- 06月19日女生网刚生的孔雀鱼怎么养刚生孔雀鱼饲养注意地方位置