I must be missing something .. what's the diff between this and
dispatchers?
Sanjiva.
On Fri, 2006-07-21 at 12:41 +0100, David Illsley wrote:
> I'm trying to embed Axis2 into a clustered environment and have found that
> the code doesn't neatly fit into the existing extensible handler chain.
>
> The scenario I'm trying to support is non-Axis2 code which can decide to
> override the target address which is dispatched to based on some
> clustering information. This could either recognise that the address is
> local, allowing a local optimisation or decide to workload balance to
> another member of the defined cluster.
>
> This doesn't really fit into the handler chain because the decision on
> which transport to use is (and should be) taken before the handler chain
> is selected and invoked. This is important because it allows different
> chains to be executed depending on the transport - e.g.a local-only
> transport might not need to encrypt the message.
>
> In order to support this scenario I'm proposing that we add pluggable
> TargetResolvers. They would be registered in axis2.xml and be available
> from the AxisConfiguration object. The OperationClient would then invoke
> the chain prior to selecting the transport and invoking the AxisEngine
> (and hence the handler chain). This would also be done in the
> MessageReceivers prior to the AxisEngine.send() so any non-anonymous
> ReplyTo is treated properly.
>
> A TargetResolver would simply be passed the MessageContext which it could
> then modify appropriately.
>
> Thus we'd have:
>
> interface TargetResolver{
> /**
> * resolveTarget examines the MessageContext and updates the
> MessageContext
> * in order to resolve the target.
> */
> void resolveTarget(MessageContext mc);
> }
>
> an additional section in axis2.xml looking like:
>
> <targetResolvers>
> <targetResolver name="LocalOptimisationResolver" class="..."/>
> ...
> </targetResolvers>
>
> and a new method on AxisConfiguration:
> /**
> * getTargetResolverChain returns and instance of
> * TargetResolver which iterates over the registered
> * TargetResolvers, calling each one in turn when
> * resolveTarget is called
> */
> public TargetResolver getTargetResolverChain();
>
> I'll have code for this ready in a few days.
> Questions/Comments?
> David
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]