cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sylvain Wallez <sylv...@apache.org>
Subject Re: Nasty flowscript issue - nailed
Date Tue, 06 Jul 2004 16:24:00 GMT
Vadim Gritsenko wrote:

> Sylvain Wallez wrote:
>
>> Gianugo Rabellino wrote:
>>
>>> On Jul 6, 2004, at 12:26 PM, Sylvain Wallez wrote:
>>>
>>>>>> There is a solution, though: there's a different FlowIntepreter 
>>>>>> for  each Processor instance (they are SingleThreaded), and so 
>>>>>> each  interpreter instance could produce a unique identifier and

>>>>>> use it as  the result of getSitemapPath (which should therefore 
>>>>>> be renamed).
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Any suggestions for a good unique identifier?
>>>>>
>>>>> Thanks so much,
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Since ID uniqueness doesn't have to survive JVM restart, a 
>>>> date-based generator like this should do the job (sorry, no time to 
>>>> commit it myself):
>>>
>>>
>>>
>>>
>>> Uhm, I might be missing something here. I understood that scope 
>>> should be reused (resurrected?) when inside the same sitemap: in 
>>> this case, your IDGenerator would yield a different result every 
>>> time, hence a new scope. Is this what is needed? If that's the case, 
>>> well, fair enough. :-)
>>
>>
>>
>>
>> Sorry, I wasn't clear in my explanation (I was hungry and ready to 
>> run for lunch, which isn't good for clarity ;-)
>>
>> JavaScriptInterpreter should have an id attribute intialized once, 
>> whose value is used instead of getSitemapPath(), e.g.
>>    private String interpreterID = IDGenerator.getNewID();
>
>
>
> System.identityHashCode(this) is much simpler than suggested before 
> IDgenerator.


Mmmh... The javadoc states that uniqueness cannot be guaranteed, 
although most JVMs implement it by returning the object pointer. That's 
why using an ID generator looks safer to me.

Thinking further, we actually don't need a time-based ID (I copy/pasted 
this from some code I have here): a simple counter is enough to do the job.

> But, it was mentioned that some component is single threaded - this 
> means, for second (parallel) request, another component will get 
> created, with different ID - and different scope will be obtained, 
> breaking the flow again.


The interpreter is looked up by the sitemap engine (see FlowNode.java), 
so in that case SingleThreaded means a different instance for each 
sitemap, which handles all requests for that sitemap.

A bit hacky, but that's how it is since the origin to ensure proper 
isolation of flowscripts between different sitemaps.

So the unique ID attached to an interpreter instance is therefore also 
unique per sitemap, which is what we want to achieve here.

Sylvain

-- 
Sylvain Wallez                                  Anyware Technologies
http://www.apache.org/~sylvain           http://www.anyware-tech.com
{ XML, Java, Cocoon, OpenSource }*{ Training, Consulting, Projects }


Mime
View raw message