软件频道>程序开发>JavaVBVCDelphiC/C++Web开发微软专栏移动数据库程序人生软件工程|开发客
您现在的位置: 天极网 > 开发频道 > Tuscany SCA 服务调用过程分析
全文

Tuscany SCA 服务调用过程分析

2007-12-11 14:46作者:王锋出处:论坛整理责任编辑:方舟

  摘要:Tuscany于8月31日发布了0.99版本,此版本较之前发布的0.91版本在结构上做了较大的调整,其服务的调用方式又重新进行了规划,本文就其服务调用过程进行探讨。

  1 调用接口

  public <B> getService(Class <b>businessInterface, String serviceName)

  根据提供Component中定义的Service名称,以及要转换的类型取得要调用的Service接口。

  参数描述:businessInterface

  当前版本的businessInterface定义对Version 0.91进行了扩充,不仅支持接口,而且支持实现类,这主要是在生成代理时做了扩充,对接口类型采用JDK的ProxyFactory生成代理,而对实现类采用Cglib生成代理。

  参数描述:serviceName

  定义Service的名称,采用ComponentName/ServiceName的方式来表明哪个Component下的具体Service,如果Compnent下仅定义了一个Service,则此ServiceName可以省略,仅保留CompnentName。但是如果Component下定义了多个Service,则必须指明ServiceName,以标明具体的Service。这种方式与以前实现有点不同,在上一版本中对ServiceName不限制,即使Component下包含多个Service,默认取第一个Service,因为在组装是已经定义好了。

  2 调用原理

  Tuscany对Service的调用都会委派到RuntimeComponentContext中,把Component中的每个Service都生成Component中定义的SelfReference,然后在Reference中调用其Service,根据接口的名称生成代理。

  对应的序列图如下:

  

  业务接口调用:

  在调用业务接口时会调用Proxy中的Invoke方法,在模型的组装过程中都会为每个Component的Service和Reference生成一个RuntimeWire对象,记录Service和Reference的模型组装信息。而在业务接口调用过程中,会针对Service和Reference中的每个方法生成一个InvocationChain对象,来记录调用的链。这与以前版本也有一点微小的区别,当前版本充分利用了Lazy Loading的思想,仅当调用的时候才会针对每个方法生成InvocationChain,而不象以前在组装的时候就已经把InvocationChain组装好了。

  对服务的调用采用链式结构有一个比较大的好处是可以支持异步调用,如果调用的过程支持异步方式,则会在调用链的头部添加一下NonBlockingInterceptor,启动一线程进行服务的调用而不是采用阻塞的方式直接返回。同时,采用链式结构就给用户提供了一种扩展,可以在服务调用的时候添加用户自己的Interceptor,比如在调用过程中用户自己的上下文切换及调用过程的日志记录等。而且在Tuscany中针对不同类型的匹配及转换也是采用Interceptor来实现的,通过在链中添加DataBinding Interceptor,来把类型转换为需要的类型,比如字符串与XML的相互转换等。

  3 结束语

  Tuscany的服务调用过程给了我们许多的启示,怎样在调用中实现类型的实现转换以及采用链式调用的优点等,这可以给我们在实现的开发设计过程中提供借鉴。

相关搜索:
关注此文读者还看过
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众