From: "Adrian Crum" <[email protected]>
On 7/20/2012 10:13 AM, Jacopo Cappellato wrote:
On Jul 20, 2012, at 10:51 AM, Adrian Crum wrote:

On 7/20/2012 9:43 AM, Jacopo Cappellato wrote:
Thank you Adrian, it is of great help.

On Jul 20, 2012, at 10:07 AM, Adrian Crum wrote:

If you have a LocalDispatcher in your hand, then you can use it to get a DispatchContext. If you have a DispatchContext in your hand, you can use it to get a LocalDispatcher. Keep in mind the DispatchContext contains the objects related to a service invocation: The service dispatcher, delegator, and security. You need all three to write a service.
Well, actually the getDelegator and getSecurity methods of DispatchContext 
simply returns the objects from the LocalDispatcher.
It seems that the only real purpose of DispatchContext is as an helper to read (and cache) service definitions; there is also a useful makeValidContext method but that can be made static (I will probably commit this change later) and may in theory be moved in some other class.
If my understanding is correct, then the name of this class is misleading.
Do you agree?
No, I don't agree. If you look at a typical Java service method signature, you 
have something like:

public static Map<String, Object> myService(DispatchContext.dctx, Map<String, 
Object> context)...

The DispatchContext contains the objects common to all invocations of myService, and the context Map contains the objects specific to each invocation. In order to write a service, you will need the objects the DispatchContext contains. From my perspective, the class name accurately describes its purpose.
What I meant to say is that DispatchContext actually delegates the retrieval of the delegator and security to the LocalDispatcher; it is not the glue that keeps together a Delegator, a Security and a LocalDispatcher but it is instead an helper class to retrieve the Delegator and Security from the LocalDispatcher.

Correct. I was speaking from an API perspective, or from the client code's perspective: DispatchContext is a collection of objects needed for service execution.

I agree that it is used as a "context" in all service implementations.
The real added value of the DispatchContext object is that it compose a LocalDispatcher with a ClassLoader and a collection of localReaders (i.e. paths to service definitions).

I think of it as a convenience class that makes it easier to write services.

+1, it's very convenient...

Jacques

-Adrian

Reply via email to