On Thu, 20 Dec 2001, Marcus Crafter wrote: > Hi All, > > Hope all is well. > > On avalon-dev there's been a short discussion about the > Parameters object that is used in the generated sitemap > class. I thought I'd bring it up here so we can flesh out a > solution. > > Have a look at this snippet from a generated sitemap: > > ---------------------- > public class sitemap_xmap extends AbstractSitemap { > static final String LOCATION = "org.apache.cocoon.www.sitemap_xmap"; > > static { > dateCreated = 1007984808622L; > } > > /** An empty <code>Parameter</code> used to pass to the sitemap components */ > private Parameters emptyParam = new Parameters(); > > <snip>... > > if (isSelected("userstatus", "permitted", listOfMaps, > emptyParam, objectModel)) { > ---------------------- > > The problem is 2 fold, and has to do with the 'emptyParam' > reference when it's passed into the invocation of selectors and > actions, etc: > > 1. The Parameters class itself is not thread safe. Concurrent > updates to the one object may corrupt data. > > 2. There is only one parameter object across the whole sitemap, > accessed by all threads, and potentially many pipelines. > > The second point is the killer if a developer decides to set a > parameter in a selector, or action, etc, and read it back elsewhere. > The problem is that the one object is shared among all threads - if 2 > threads update the object (regardless of whether it's threadsafe > or not), results can be undefined if they use the same key. > > As far as I can see there's no real need to be able to set > parameters in this object in selectors and actions, etc, as the Request > object can handle sharing of data between pipeline components via > set/getAttribute (or is there some other use for it ?). > > If this is the case, we could make the parameters object read-only > before it's passed to selectors, etc, which would prevent this problem > from occuring (for example by wrapping it, or toggling its > read-only flag).
If we can vote +1 here I can commit an already patched sitemap.xsl which makes the emptyParam read-only. Giacomo > > Alternatively, we could change the generated sitemap code to > create a new Parameters object per thread. I'm not sure how much > this influences other uses of this object though. Perhaps > someone else a bit closer to that part of the code might be able to > comment better ? > > I'm wondering what everyone else's thoughts are on a solution > for this as it seems 'emptyParam' is used almost everywhere in > the generated sitemap class, and could be a touchy thing to > change. > > Any comments/thoughts ? > > Cheers, > > Marcus > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]