gembin

OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

HBase, Hadoop, ZooKeeper, Cassandra

Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

About Me

 

Apache Tuscany SCA Java 架构指南

  • 概况
    • 内核
    • 扩展
    • 运行时
  • 内部高层视图
  • Bootstrap
  • 装配模型
  • 分发包
  • 绑定扩展
  • 构件实现扩展
  • 数据绑定扩展
  • 复合激活
  • 加载SCA组件
  • 与Spring集成
    • Spring作为构件实现
    • Spring作为IOC容器

概况

SCA JAVA 运行时是由内核和扩展两部分组成。内核本质上是一个连接多个VM的引擎,使用依赖注入(Dependency Injection)和控制反转( Inversion of Control)将构件连接在一起。

内核

其核心是设计简单和功能有限的。它将不同的功能单元连接到一起,并且提供SPIs以让扩展之间可以互动,例如服务发现,可靠性,支持透明协议,等等。这些功能都以扩展的方式提供。

扩展

扩展提高了SCA运行时的功能型。扩展类型并不固定,Tuscany的核心通过提供一个可调整的模型的设计使其尽可能的灵活。现在,已知的扩展类型有:

  • 组件实现类型:例如,spring、Groovy、Javascript
  • 绑定类型:例如:Axis、CXF、AMQP、ActiveMQ、JXTA
  • 数据绑定类型:例如,JAXB、SDO、XmlBeans
  • 接口绑定类型:例如,WSDL、Java

具体细节可参考扩展开发向导

JAVA SCA 运行时高层次概览

下图是Java SCA运行时的一个高层次概览,其中包括以下关键模块:

  1. SCA规格API:SCA JAVA客户端的API和执行规格
  2. API:实现SCA规格API的Tuscany API
  3. 接口绑定:支持服务定义的类型,例如WSDL、Java……
  4. 数据绑定:实现数据支持,例如SDO、JAXB……
  5. 主机平台:提供Tuscany运行时的环境

bootsrap

Bootstrap 进程受主机环境控制。默认进程是由DefaultBootstrapper实现的。运行时进程服务使用SCA XML形式进行集成,也可以采用其他形式:

  • 加载阶段处理SCDL,并在内存中创建一个对应的运行时对象(例如:组件、服务、引用)
  • 连接线将引用连接到服务

 

集成模型

SCA的装配模型在Tuscany中是通过一系列接口实现的。以下是一些关键件:

  • SCA组件是由SCA实现的实例配置而成,它提供和销毁服务
  • SCA服务用以声明外部可访问的服务实现
  • SCA引用表示一个对其他服务实现的引用,这里被使用的服务通过配置指定
  • 一种实现表示一种软件技术,例如Java类、BPEL流程、XSLT转换、或者C++类,用以在SOA应用中实现一个或多个服务。一个SCA集成也是一个实现。
  • 组件类型指的是可配置的实现方式
  • 接口定义了一个或多个业务功能,这些业务功能的实现由服务提供,通过引用为组件所使用,服务是由实现的接口所定义的,SCA目前支持两种类型的接口:
    •   Java接口
    • WSDL portTypes
  • 一个SCA Composite十一个SCA域中的基本单元,它由组件、服务、引用、它们之间的连线组成。
  • SCA联结了服务引用和服务
  • 服务和引用之间使用绑定联结。引用使用绑定描述服务之间相互访问的机制,服务使用绑定描述客户端访问服务的机制
  • 属性允许在外部实现的配置进行设值,数据通过组件也可能源自于一个组合件的属性提供。

发布

Tuscany运行时提供了一个框架,以支持SCA发布。该框架可针对以下扩展点进行扩展:

PackageProcessorExtensionPoint:负责处理不同的包或者档案格式,例如:文件夹、JAR包、osgi包、EAR、WAR以及ZIP。

ArtifactProcessorExtensionPoint:负责处理具体类型的服务,例如:WSDL、XSD、构件、JAVA类、BPEL。

  • 包处理器在安装时扫描发布包,并且创建一个待处理列表,目前支持文件夹/文件系统和jar发布包,为了对发布包可用,包处理器程序需要通过包处理器扩展点进行自我注册。
  • 组件处理器被用来处理发布包中的组件,为了保持对发布服务可用,组件处理器需要使用组件处理扩展进行自我注册,组件处理器会在以下两个步骤进行调用:
    • 读 取:  在这里你可以读取一个组件(一个文档、XML、类等等),实例化一个代表组件的模型并销毁它。SCA发布服务对注册了ArtifactProcessor 的组件调用ArtifactProcessor.read() 方法,如果你的模型对另外一个模型有引用,不要试图也立即实例化另一个模型,你应该只保留 引用信息,在处理阶段这将变成一个指针,注意现在你没必要完全读取并实例化你的模型,可以延迟实例化。
    • 处理:本阶段给你机会使你可以处理对其他模型的引用(WSDL,类,其他复合组件,或者一个组件类型(componentType))。这时,所有代表发布包里组件的模型被全部读取出来,并且在发布的 ArtifactResolver进行注册,准备处理。
  • 所有可以部署的复合组件都应该部署在SCA域

实现扩展

实现扩展负责支持实现方式的类型:比如Java、Script、BPEL等。

绑定扩展

绑定扩展负责支持绑定方式的类型:Web服务、JMS、JSON-RPC以及RMI。

接口扩展

接口扩展负责支持接口的类型,例如Java接口和WSDL1.1 portType。

数据绑定扩展

请参考Tuscany Databinding Guide

复合组件激活

在一个复合组件在配置好以后,它可以在SCA域进行激活,Tuscany运行时通过以下步骤去激活它:

1、构建:在此阶段,复合组件被进一步常态化,以更容易和运行时互动,元数据在服务/引用升级以后进行合并。基于扁平的模型,我们可以在构建级获取全部的信息。

2、配置:在此阶段,复合组件的层次被引导到配置一个组件的实现,在组件间以及组件和外部服务之间,引用绑定和服务绑定会在以后的步骤中用来创建运行时连接。

3、创建运行时连接: 在此阶段,通过选定的绑定方式,创建了组件引用和组件服务的运行时连接。运行时连接是调用链的集合。每个执行链包含一组执行器和拦截器。执行器为绑定协议 和实现技术提供调用的逻辑,拦截器是一种特殊的执行器,它为方法执行提供了附加的逻辑,例如数据转换以及交易控制。对于一个组件引用来说,我们创建运行时 连接来表示通过绑定的对外执行;对于组件服务呢,我们创建运行时连接表示对实现类型的向内连接。回调连接可以被附加到组件服务之上,表示来自服务的回调执 行。

4、启动服务组件:在这个阶段,ImplementationProvider, ReferenceBindingProvider和ServiceBindingProvider 定义的start() 回调方法将被调用,最后,组件、组件引用以及组件服务被初始化去服务组件间的互动。服务监听器被启动已接受从绑定层来的连接请求。

调用概况

1、调用被分派到WireInvocationHandler

2、WireInvocationHandler 寻找正确的InvocationChain

3、创建一条消息,设值payload,设值TargetInvoker,然后将消息通过链向下传递

4、当消息到达链的底部后,TargetInvoker 会被调用,它按顺序对目标进行调度

5、当将TargetInvoker 存储后,当连接源的可视范围等于或小于目标时(例如:request-》composite),外向端允许将目标实例进行缓存。

运行时提供具有InboundWires 和OutboundWires的构件。InvocationChains 被构件连接所持有,因此它是无状态的,允许引入新的拦截器以及重新连接等动态事件的发生。

加载SCA部件

组件处理器

组件处理器被用来处理发布包中的组件,为了保持对发布服务可用,组件处理器需要使用组件处理扩展进行自我注册,组件处理器会在以下两个步骤进行调用:

  • 读取:  在这里你可以读取一个组件(一个文档、XML、类等等),实例化一个代表组件的模型并销毁它。SCA发布服务对注册了ArtifactProcessor 的组件调用ArtifactProcessor.read() 方法,如果你的模型对另外一个模型有引用,不要试图也立即实例化另一个模型,你应该只保留 引用信息,在处理阶段这将变成一个指针,注意现在你没必要完全读取并实例化你的模型,可以延迟实例化。
  • 处理:本阶段给你机会使你可以处理对其他模型的引用(WSDL,类,其他复合组件,或者一个组件类型(componentType))。这时,所有代表发布包里组件的模型被全部读取出来,并且在发布的 ArtifactResolver进行注册,准备处理。

加载JAVA SCA

SCA服务部件在SCA里以SCDL文件的形式进行部署,Tuscany运行时组件处理器加载这些SCDL到模型对象,这些对象包含了元数据。

有两种主要的加载器:

1、StAXElementLoader:从StAX 事件加载XML

2、ComponentTypeLoader:为一个实现加载组件类别或者处理一个文件

加载组件类别

为实现规范加载组件类型定义

1、如何实现是实现规范

运行时组件的类图

posted on 2008-04-27 22:58 gembin 阅读(1111) 评论(0)  编辑  收藏 所属分类: SCASOA


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(6)

随笔分类(440)

随笔档案(378)

文章档案(6)

新闻档案(1)

相册

收藏夹(9)

Adobe

Android

AS3

Blog-Links

Build

Design Pattern

Eclipse

Favorite Links

Flickr

Game Dev

HBase

Identity Management

IT resources

JEE

Language

OpenID

OSGi

SOA

Version Control

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

free counters