cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sylvain Wallez <>
Subject Re: [RT] Access to the object model
Date Fri, 23 May 2003 09:07:32 GMT
Marc Portier wrote:

> Sylvain Wallez wrote:


>> Hey, wait a bit ! We have to define first how the object model is to 
>> be accessed from the context.
>> I see two ways :
>> 1 - the object model as a whole is accessible as a context entry :
>>      Map objectModel = (Map)context.get(CTX_OBJECT_MODEL);
>> 2 - each of the element of the object model can be accessed separately :
>>      Request req = (Request)context.get(CTX_REQUEST);
>> I don't like solution 1, as it exposes the fact that object model 
>> elements are stored in a Map, which really is an implementation 
>> detail (remember discussions long ago about defining an ObjectModel 
>> class ?).
>> So my preference goes to solution 2, which exposes directly the 
>> elements of the object model, without caring if they are all gathered 
>> in a Map, or independently set in the context though ThreadLocals, or 
>> whatever implementation choice is made. Furtheremore, the Context 
>> being already analoguous to a Map, there's no need, from the user 
>> point of view, for an additional indirection (the map may however be 
>> kept under the hood for the implementation).
> with you all the way,
> on the side, don't know for sure but maybe it makes sense to introduce 
> at the mean time the pattern more formally so it gets used at more 
> places in future (Map return from Actions comes to mind)
> I've always liked the pattern of get- set- remove- Attribute and 
> getAttributeNames on the HttpSession, HttpRequest, and ServletContext
> (it's less hard to implement this then the full Map interface if you 
> have something specific in mind, e.g entrySet() ) 

Hehe, this is a thought that came recently to my fruitful mind ;-)
Considering that the various "scopes" of the servlet architecture 
(context, session, request) all share this ability to store attributes 
and that Cocoon has abstracted them from javax.servlet, I was thinking 
of an "AttributeHolder" interface that would provide the methods you 
mention, and have Context, Session and Request implement it.

What can it be used for ? Well, there are a lot of places where 
storing/getting a value is needed, but the storage scope of this value 
is not relevant and defined elsewhere. Using this AttributeHolder method 
could then be the needed abstraction.

>> Of course, if the object model is extended, e.g. with flow values, 
>> this will mean an additional entry in the context.
> IMHO I think the main thing is stepping away from Map for these things 
> in general, having this technique nested down on 
> child-object-attributes seems quite innevitable? 

Sorry, I don't get it...

>> And we will have a ContextHelper class, counter part of 
>> ObjectModelHelper.
> maybe overdoing it:  but, if the pattern comes up we might even push 
> up a Dynamic Proxy AttributeHelper for the general case and for reuse 
> in user apps

Isn't this the AttributeHolder I mentioned above ?

>> Thoughts ?
> yes :-)
> hope I made them clear

Not totally ;-)


Sylvain Wallez                                  Anyware Technologies 
{ XML, Java, Cocoon, OpenSource }*{ Training, Consulting, Projects }

View raw message