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.

-Adrian

Reply via email to