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