On Jan 30, 2008 6:33 PM, Raymond Feng <[EMAIL PROTECTED]> wrote:

> Hi,
>
> As of today, we can add multiple interceptors to the invocation chain, but
> we cannot control their ordering. When more policies are supported, I see
> a
> need to provide some simple ordering mechnisim for interceptors.
>
> SCA invocation may have three stages: reference, service and
> implementation.
> For example, a typical invocation chain for the reference side can be:
>
> reference: (SourceComponent) --> DataTransformation -->
> Suspend/PropagateTransaction --> ReferenceBindingInvoker --> ...
> service: (ServiceBindingListener) --> DataTransformation -->
> PropagateTransaction
> implementation: ManagedTransaction --> ImplementationInvoker -->
> (TargetComponent)
>
> Here is my proposal:
>
> We introduce a phase concept which groups a collection of interceptors to
> a
> relative position in the invocation chain for each stage. There are a list
> of system defined phases (such as reference.invoker or
> implementation.invoker) and it can be extended by Tuscany extensions.
>
> Each phase is uniquely identied by the name. Each phase can define its
> relative ordering using the 'before' and/or 'after' attributes. When an
> interceptor is added to the InvocationChain, we can specify a phase name.
> The Tuscany runtime will sort the phases by the partial order. SCA
> invocations will be dispatched in the order of phases. There is no
> ordering
> between interceptors in the same phase.
>
> To define a phase, we use the following simple syntax in the service
> provider file named as
> "META-INF/services/org.apache.tuscany.sca.core.invocation.Phase".
>
> name=PhaseName, stage=stageName, before=PhaseName4 PhaseName5,
> after=PhaseName3
>
> name: The name of the phase
> stage: The stage of the phase, it can be one of the values: reference,
> service, or implemention
> before: A list of phase names separated by spaces to denote this phase
> should be placed before
> after: A list of phase names separated by spaces to denote this phase
> should
> be placed after
>
> A special phase name '*' can be used for 'before' and 'after' attribute to
> represent all phases.
>
> For example,
>
> name=reference.invoker, stage=reference, after=*
> name=reference.databinding, stage=reference, before=reference.invoker
> name=reference.transaction, stage=reference, after=reference.databinding
>
> I already have a prototype under development. Your opinions are welcome.
>
> Thanks,
> Raymond
>
>
Sounds ok to me, its very similar to Axis2 phases, but i do share Venkat's
concern that it seems complex. Are there real use cases that require such
fine control  that we need to support imminently and if so could we hear a
bit more detail of what they are?

   ...ant

Reply via email to