tuscany 架构与应用加载机制

28
Tuscany 架架架架架架架架架

Upload: corbin

Post on 04-Jan-2016

164 views

Category:

Documents


0 download

DESCRIPTION

Tuscany 架构与应用加载机制. 目录. 概述 Tuscany 内核加载 示例 Tuscany 应用加载. 概述. Extension Point Registry(EPR). Tuscany 以 E xtension 的方式扩展它的功能 Extension Point 是内核与 Extension 之间的桥梁. Extension Point Registry(EPR). 以 ContributionScanner 为例. FolderContributionScanner. JarContributionScanner. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Tuscany 架构与应用加载机制

Tuscany架构与应用加载机制

Page 2: Tuscany 架构与应用加载机制

目录• 概述• Tuscany内核加载• 示例• Tuscany应用加载

Page 3: Tuscany 架构与应用加载机制

概述

Page 4: Tuscany 架构与应用加载机制

Extension Point Registry(EPR)

• Tuscany以 Extension的方式扩展它的功能• Extension Point是内核与 Extension之间的桥梁

Page 5: Tuscany 架构与应用加载机制

Extension Point Registry(EPR)

• 以 ContributionScanner为例

FolderContributionScanner

JarContributionScanner

ZipContributionScanner

Page 6: Tuscany 架构与应用加载机制

Extension Point Registry(EPR)

• 实现 ContributionScanner接口的类用于扫描特定的打包格式并构建一个 artifacts列表–如 JarContributionScanner则用于读取解析 Jar

contribution• 每个 ContributionScanner接口实现均通过

ContributionScannerExtensionPoint向Tuscany运行时注册

Page 7: Tuscany 架构与应用加载机制

Extension Point Registry(EPR)

• 内核查找 Extension Point Registry,获取Extension Point

//创建 EPRExtensionPointRegistry registry = new Default ExtensionPointRegistry ();

//查找ContributionScannerExtensionPoint factories = registry.getExtensionPoint(ContributionScannerExtensionPoint .class);

Page 8: Tuscany 架构与应用加载机制

内核加载• 内核加载流程

Page 9: Tuscany 架构与应用加载机制

Create Extension Point Registry

• 实例化 Extension Point Registry

//实例化 EPRExtensionPointRegistry registry = new Default ExtensionPointRegistry ();

Page 10: Tuscany 架构与应用加载机制

Create Extension Point Registry

• 创建必需的 Extension Point– UtilityExtensionPoint– ModelFactoryExtensionPoint– ProxyFactoryExtensionPoint

//查找 UtilityExtensionPoint,若不存在则创建之UtilityExtensionPoint utilities = registry.getExtensionPoint(UtilityExtensionPoint.class);

Page 11: Tuscany 架构与应用加载机制

Discover Module Activators

• 读取“META-INF/services/”目录下与ModuleActivator相关的属性文件

• 部分内容

Page 12: Tuscany 架构与应用加载机制

Discover Module Activators

• 上述类均实现了ModuleActivator接口

Page 13: Tuscany 架构与应用加载机制

Start Module Activators

• 对上一阶段发现的各个Module Activator,分别调用 start()方法,启动相关服务

• e.g., CorbaRuntimeModuleActivator–向 EPR注册 CorbaHostExtensionPoint–启动 Corba服务器

Page 14: Tuscany 架构与应用加载机制

Create Contribution Service

• 创建 ContributionServiceImpl对象并注册EPR

Page 15: Tuscany 架构与应用加载机制

Create Scope Registry

• 定义的几种 Scope– Stateless– Request– Session– Conversation– Composite– System– Undefined

Page 16: Tuscany 架构与应用加载机制

Create Composite Builder

• CompositeBuilder接口

• 此阶段实例化一些该接口的实现类

Page 17: Tuscany 架构与应用加载机制

Create Composite Builder

• CompositeBuilder接口的实现类

Page 18: Tuscany 架构与应用加载机制

Create Composite Activator

• 实例化 CompositeActivatorImpl

Page 19: Tuscany 架构与应用加载机制

Load System SCA Definitions

Page 20: Tuscany 架构与应用加载机制

示例• 在线水果商店

Page 21: Tuscany 架构与应用加载机制

Load Contributions

• 找到 contributions的路径并加载它们

Page 22: Tuscany 架构与应用加载机制

Resolve Composite

• 将 composite文件( XML格式)中的元素解析出来– <include>– <component>– <service>

Page 23: Tuscany 架构与应用加载机制

Build Composite

• 执行相关的 CompositeBuilder的 build()方法

Page 24: Tuscany 架构与应用加载机制

Build Composite

• 若 binding的方式是WSDL,当对ComponentServiceBindingBuilderImpl执行其build()方法时,则生成WSDL文档

Page 25: Tuscany 架构与应用加载机制

Activate Composite

• 对 composite中定义的每一个构件,为其增加 implementation provider、 service binding provider、 reference binding provider

Page 26: Tuscany 架构与应用加载机制

Activate Composite

• HelloWorld示例中– store构件的实现方式是 widget,那么需要为其增加一个WidgetImplementationProvider

– shoppingcart构件的实现方式是 Java,则需要为其增加 JavaImplementationProvider

– store构件的 binding是 HTTP协议,需要为其增加一个 HTTPBindingProvider

Page 27: Tuscany 架构与应用加载机制

Start Composite

• 调用上一阶段的 provider的 start()方法• 具体来看,完成 .composite文件定义的

binding,启动相关的 implementation provider等

Page 28: Tuscany 架构与应用加载机制

Start Composite

• HelloWorld示例中– Store构件启动WidgetImplementationProvider– shoppingcart构件 JavaImplementationProvider– store构件的 HTTP binding– Catalog构件的 Jsonrpc binding