现在的位置: 首页 > 综合 > 正文

Apache Tuscany SCA Java 架构指南

2014年09月05日 ⁄ 综合 ⁄ 共 3668字 ⁄ 字号 评论关闭
文章目录

概况

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、如何实现是实现规范

运行时组件的类图

 

 ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

英文原文版权归原作者所有, 本译文转载请注明出处!

译者:abigfrog 联系:QQ:800736, MSN:J2EE@HOTMAIL.COM

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

抱歉!评论已关闭.