如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
TuscnaySCA源码分析报告
整体架构
HYPERLINK"http://search.yesky.com/search.do?stype=0&wd=SCA"\t"_blank"\o"sca"SCAJava运行时由core和extension组成。Core本质上来说是一个多VM的wiring引擎。该引擎使用IOC(控制反转)和DI(依赖注入)原则来连接组件。
Core
Core在性能方面是简单而有限的。它将功能单元连接在一起,并提供可以和extension交互的SPI机制。例如象服务发现,可靠性,对传输协议的支持等特性都是通过extension来做的。
Extension
Extension增强SCA运行时的功能。Extesion类型不是固定的。而core则是通过提供对extension模块开放支持来使得设计尽量灵活。
组件实现类型,例如:Spring,Groovy和Javascript
绑定类型,比如:Axis,CXF,AMQP,ActiveMQ,JXTA
数据绑定类型,比如:JAXB,SDO,XmlBean
接口绑定类型,比如:WSDL,Java
运行时
Core是设计得可以嵌入于许多不同的主机环境下的。例如,core也许用于OSGI容器、单独的运行时环境、serlvet引擎或J2EE应用服务器中。运行时的性能根据主机环境不同而不同。
JavaSCA运行时的高层概述:
下图是由关键的模块/包组成的SCA运行时高层视图
SCASpecAPI:由SCAJavaClientandImplementation定义的API
API:扩展了SCASpecAPI的TuscanyAPI
Core:运行时实现和SPI扩展机制
Extension:
Componentimplementation–扩展语言支持:例如BPEL,Python,C++,Ruby等
Binding–扩展协议支持:例如Axis2,CXF等
InterfaceBinding–扩展服务定义类型:比如SWDL,Java等
Databinding–扩展数据支持:比如SDO,JAXB等
Hostplatforms:Tuscany运行时的主机环境
引导及装配过程分析
主要分成三个步骤:
载入(load)阶段从SCDL读取配置信息处理后,生成内存中的模型。
创建(build)阶段评估模型并将模型组成单独的组件元素,如Service,Reference,Component。
连接(connect)阶段连接Reference到相应的Service。
装配过程由部署发起,按照顺序逐步执行,三个步骤包含在部署当中,由部署发起。
1.1Loader通过Loader接口实现。
有两种类型的loader:ComponentTypeLoader和StAXElementTypeLoader,通过Loader接口来实现对两中类型的loaer进行载入。
1、ComponentTypeLoader类型loader负责载入和运行环境相关的信息,即系统环境的实现
2、StAXElementLoader类型loader负责载入在系统环境运行的应用相关的信息
1.2Builder
从配置的元模型中进行组装,形成运行期的组件模型。包括关联implementation及binding。
1.3Connector
根据元模型配置,对Wire进行关联。
2.Component实例的创建
环境的引导
SCA是在主机环境下引导,默认的引导过程是在DefaultBootstrapper中实现的,过程如下:
服务调用过程分析
TuscanySCA的服务调用过程主要采用了动态代理模式(DynamicProxy)及方法调用(Invocation)。
Java动态代理基础知识
Java动态代理类位于Java.lang.reflect包下,一般主要涉及到以下两个类:InvocationHandler和Proxy。
InvocationHandler必须被实现,实现这个接口的invoke(Objectobj,Methodmethod,Object[]args),第一个参数obj一般是指代理类,method是被代理的方法,args为该方法的参数数组。这个invoke方法的内容主要是在调用被代理的方法前后方便地加上你自己的逻辑,如下例子
publicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{
System.out.println(“调用前你要插入的逻辑,如验证权限”);
//实际调用被代理类的方法
Objectresult=method.invoke(this.target,args);
System.out.print
as****16
实名认证
内容提供者
最近下载