Upload
corbin
View
164
Download
0
Embed Size (px)
DESCRIPTION
Tuscany 架构与应用加载机制. 目录. 概述 Tuscany 内核加载 示例 Tuscany 应用加载. 概述. Extension Point Registry(EPR). Tuscany 以 E xtension 的方式扩展它的功能 Extension Point 是内核与 Extension 之间的桥梁. Extension Point Registry(EPR). 以 ContributionScanner 为例. FolderContributionScanner. JarContributionScanner. - PowerPoint PPT Presentation
Citation preview
Tuscany架构与应用加载机制
目录• 概述• Tuscany内核加载• 示例• Tuscany应用加载
概述
Extension Point Registry(EPR)
• Tuscany以 Extension的方式扩展它的功能• Extension Point是内核与 Extension之间的桥梁
Extension Point Registry(EPR)
• 以 ContributionScanner为例
FolderContributionScanner
JarContributionScanner
ZipContributionScanner
Extension Point Registry(EPR)
• 实现 ContributionScanner接口的类用于扫描特定的打包格式并构建一个 artifacts列表–如 JarContributionScanner则用于读取解析 Jar
contribution• 每个 ContributionScanner接口实现均通过
ContributionScannerExtensionPoint向Tuscany运行时注册
Extension Point Registry(EPR)
• 内核查找 Extension Point Registry,获取Extension Point
//创建 EPRExtensionPointRegistry registry = new Default ExtensionPointRegistry ();
//查找ContributionScannerExtensionPoint factories = registry.getExtensionPoint(ContributionScannerExtensionPoint .class);
内核加载• 内核加载流程
Create Extension Point Registry
• 实例化 Extension Point Registry
//实例化 EPRExtensionPointRegistry registry = new Default ExtensionPointRegistry ();
Create Extension Point Registry
• 创建必需的 Extension Point– UtilityExtensionPoint– ModelFactoryExtensionPoint– ProxyFactoryExtensionPoint
//查找 UtilityExtensionPoint,若不存在则创建之UtilityExtensionPoint utilities = registry.getExtensionPoint(UtilityExtensionPoint.class);
Discover Module Activators
• 读取“META-INF/services/”目录下与ModuleActivator相关的属性文件
• 部分内容
Discover Module Activators
• 上述类均实现了ModuleActivator接口
Start Module Activators
• 对上一阶段发现的各个Module Activator,分别调用 start()方法,启动相关服务
• e.g., CorbaRuntimeModuleActivator–向 EPR注册 CorbaHostExtensionPoint–启动 Corba服务器
Create Contribution Service
• 创建 ContributionServiceImpl对象并注册EPR
Create Scope Registry
• 定义的几种 Scope– Stateless– Request– Session– Conversation– Composite– System– Undefined
Create Composite Builder
• CompositeBuilder接口
• 此阶段实例化一些该接口的实现类
Create Composite Builder
• CompositeBuilder接口的实现类
Create Composite Activator
• 实例化 CompositeActivatorImpl
Load System SCA Definitions
示例• 在线水果商店
Load Contributions
• 找到 contributions的路径并加载它们
Resolve Composite
• 将 composite文件( XML格式)中的元素解析出来– <include>– <component>– <service>
Build Composite
• 执行相关的 CompositeBuilder的 build()方法
Build Composite
• 若 binding的方式是WSDL,当对ComponentServiceBindingBuilderImpl执行其build()方法时,则生成WSDL文档
Activate Composite
• 对 composite中定义的每一个构件,为其增加 implementation provider、 service binding provider、 reference binding provider
Activate Composite
• HelloWorld示例中– store构件的实现方式是 widget,那么需要为其增加一个WidgetImplementationProvider
– shoppingcart构件的实现方式是 Java,则需要为其增加 JavaImplementationProvider
– store构件的 binding是 HTTP协议,需要为其增加一个 HTTPBindingProvider
Start Composite
• 调用上一阶段的 provider的 start()方法• 具体来看,完成 .composite文件定义的
binding,启动相关的 implementation provider等
Start Composite
• HelloWorld示例中– Store构件启动WidgetImplementationProvider– shoppingcart构件 JavaImplementationProvider– store构件的 HTTP binding– Catalog构件的 Jsonrpc binding