Tuscany Core

org.apache.tuscany.core.wire
Class InvocationConfiguration

java.lang.Object
  extended by org.apache.tuscany.core.wire.InvocationConfiguration
Direct Known Subclasses:
SourceInvocationConfiguration, TargetInvocationConfiguration

public abstract class InvocationConfiguration
extends java.lang.Object

Contains a source- or target-side invocation pipeline for a service operation. The runtime framework creates invocation chains on a per-operation, per-service basis. Further, invocation chains are further distinguished by being part of the source or target sides of a wire. Chains are "bridged" together by the runtime by a set of WireBuilders with the source-side holding references to the target.

InvocationChains are managed by WireConfigurations, which are used by WireFactorys to buildSource wires and proxies.

Invocation configurations must contain at least one interceptor and may have 0 to N handlers. Handlers process a wire request or response in a one-way fashion. A typical wire sequence where interceptors and handlers are configured for both the source and target-side will proceed as follows:

 
  1. The first source interceptor will be called with a message, which will in turn invoke the next interceptor in the chain
  2. The last source interceptor, which must be of type RequestResponseInterceptor if there are handlers present, will be invoked. The RR interceptor will in turn pass the message to a MessageChannel which will invoke all source-side request handlers.
  3. The RR interceptor will then invoke the target-side request MessageChannel.
  4. The last source-side handler, an instance of MessageDispatcher, will invoke the first source-side interceptor, which in turn will pass the message down the target-side interceptor chain.
  5. If the target is a component instance the last target-side interceptor, an instance of InvokerInterceptor will retrieve the TargetInvoker from the message and call it to invoke the operation on a target instance. TargetInvokers are help by the source proxy to enable optimizations such as caching of target instances.
  6. The response is returned up the wire stack until it reaches the source-side RequestResponseInterceptor, which invokes the target and source-side response channels respectively.
  7. The response is then passed back up the rest of the wire stack.

The source-to-target bridge may be constructed in any of the following ways:

 
 

In some scenarios, a service proxy may only contain target-side invocaton chains, for example, when a service is resolved through a locate operation by a non-component client. In this case, there will be no source-side wire chains and the target invoker will be held by the target-side and passed down the pipeline.

Version:
$Rev: 396284 $ $Date: 2006-04-23 11:27:42 -0400 (Sun, 23 Apr 2006) $
See Also:
WireBuilder, WireFactory, TargetInvoker, MessageDispatcher

Field Summary
protected  Interceptor interceptorChainHead
           
protected  Interceptor interceptorChainTail
           
protected  java.lang.reflect.Method operation
           
protected  java.util.List<MessageHandler> requestHandlers
           
protected  java.util.List<MessageHandler> responseHandlers
           
protected  TargetInvoker targetInvoker
           
 
Constructor Summary
InvocationConfiguration(java.lang.reflect.Method operation)
           
 
Method Summary
 void addInterceptor(Interceptor interceptor)
          Adds an interceptor to the chain
 void addRequestHandler(MessageHandler handler)
          Adds an request handler to the invocation chain
 void addResponseHandler(MessageHandler handler)
          Adds an response handler to the invocation chain
abstract  void build()
          Signals to the chain that its configuration is complete.
 Interceptor getHeadInterceptor()
          Returns the first interceptor in the chain
 java.lang.reflect.Method getMethod()
          Returns the target operation for this invocation chain
 java.util.List<MessageHandler> getRequestHandlers()
          Returns the request handler chain
 java.util.List<MessageHandler> getResponseHandlers()
          Returns the response handler chain
 Interceptor getTailInterceptor()
          Returns the last interceptor in the chain
 TargetInvoker getTargetInvoker()
          Returns the target invoker that is passed down the chain
 void setTargetInvoker(TargetInvoker invoker)
          Sets the target invoker to pass down the chain
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

operation

protected java.lang.reflect.Method operation

targetInvoker

protected TargetInvoker targetInvoker

interceptorChainHead

protected Interceptor interceptorChainHead

interceptorChainTail

protected Interceptor interceptorChainTail

requestHandlers

protected java.util.List<MessageHandler> requestHandlers

responseHandlers

protected java.util.List<MessageHandler> responseHandlers
Constructor Detail

InvocationConfiguration

public InvocationConfiguration(java.lang.reflect.Method operation)
Method Detail

getMethod

public java.lang.reflect.Method getMethod()
Returns the target operation for this invocation chain


addRequestHandler

public void addRequestHandler(MessageHandler handler)
Adds an request handler to the invocation chain


addResponseHandler

public void addResponseHandler(MessageHandler handler)
Adds an response handler to the invocation chain


getRequestHandlers

public java.util.List<MessageHandler> getRequestHandlers()
Returns the request handler chain


getResponseHandlers

public java.util.List<MessageHandler> getResponseHandlers()
Returns the response handler chain


setTargetInvoker

public void setTargetInvoker(TargetInvoker invoker)
Sets the target invoker to pass down the chain


getTargetInvoker

public TargetInvoker getTargetInvoker()
Returns the target invoker that is passed down the chain


addInterceptor

public void addInterceptor(Interceptor interceptor)
Adds an interceptor to the chain


getTailInterceptor

public Interceptor getTailInterceptor()
Returns the last interceptor in the chain


getHeadInterceptor

public Interceptor getHeadInterceptor()
Returns the first interceptor in the chain


build

public abstract void build()
Signals to the chain that its configuration is complete. Implementations may use this callback to prepare there invocation chains.


Tuscany Core

-