cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Fagerstrom <>
Subject Scoped Request Attributes (was: [Vote] POJOfied Environment)
Date Fri, 13 May 2005 11:03:31 GMT
Carsten Ziegeler wrote:

>Daniel Fagerstrom wrote:

>>>How above Request interface additions will relate to methods already 
>>>added to 2.2 interface:
>>>   Object getAttribute(String name, int scope);
>>>   Object searchAttribute(String name);
>>>   Enumeration getAttributeNames(int scope);
>>>   void setAttribute(String name, Object o, int scope);
>>>   void removeAttribute(String name, int scope);
>>>Can any of those be renamed / reworked to be consistent with the 
>>>proposed additions? As we had no single 2.2 release yet, it's good time 
>>>to review those additions.
>>I don't know why we need differnt scopes, maybe Carsten can comment.
>The discussion about scoped attributes is here:
>Basically, in 2.1.x the request attributes are shared between the global
>request and all its internal requests. So internal requests can
>overwrite attributes of the global request or of some parallel internal
>ones. And this can lead to very interesting results. So, scoped
>attributes are a way to solve this problewm.
>I recently added the searchAttribute() method that first looks in the
>local scope and then in the global scope for an attribute.
>I agree with Vadim, that we somehow should consider these things as well.
I missed that discussion. Anyway, IMO global request scope is nearly 
never a good idea. As discussed in that thread, people are into an 
unplesant suprise if they use global request scope for e.g. aggregation. 
Furthermore one introduce quite strange dependencies in the code if 
internal requests affects global request attributes. IMO, one should in 
most cases avoid letting internal requests having global side effects.

In the thread you seemed to agree about that it was best, due to 
compability reasons, to keep the old global scope as default for request 
attributes, and make local request scope available through an extra 
parameter. IMO this is one of thoose cases where it is better to be 
brave and introduce back incompabilities than to keep an obscure 
behaviour. I think we should have request scope as default in 2.2, it 
will break some code, but there is a good workaround with the scoped 
attributes. And we will save most users from unpleasant suprises by 
having the more sensible behaviour as default.

If we go this way, the Map getRequestAttributes(), will have local 
request scope, and we could have a Map getGlobalRequestAtributes() for 
giving access to the global ones. But as using global request parameters 
is a rather uncommon use case, I don't think we need to have POJOfied 
support for it.



View raw message