Tuscany 作为SCA的实现,其设计采用了扩展点的实现,在服务调用上也采用了类似的机制,本例对服务调用过程中的机制进行介绍,并提供一种实现扩展的机制。
Tuscany所服务调用中的每个Service作为一个RunTimeWire进行实现,而针对Service中的方法在调用时形成一个Invocation Chain,其中每个Chain采用了链式调用机制,这有点类似Servelet 中的Filter,在Tuscany中我们称之为Interceptor,在服务调用时从Chain的头Interceptor起开始执行。Tuscany在服务调用中支持异步调用就是在chain的头部加上一线程Interceptor 名字叫NonBlockingInterceptor,来执行其后的Intercetpor。其调用的流程图如下:
同样的方式也应用到Service的回调(Callback)当中。
Interceptor的接口也很简单,只有两个方法定义其链式调用。
publicinterface Interceptor extends Invoker {
/**
*Setsthenextinvoker
*@paramnextThenextinvoker
*/
void setNext(Invoker next);
/**
*Returnsthenextinvokerornull
*@returnThenextInvoker
*/
Invoker getNext();
}
经过上面的介绍,我想如果想在服务调用过程当中添加自己的动作是再简单不过的事情了,只是简单在实现Interceptor接口,然后注入到Invocation Chain中去罢了。