You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by imran <ip...@triplemind.com> on 2008/08/13 15:09:40 UTC

Re: Objects inherited in subrequests

imran wrote:
> Grzegorz Kossakowski wrote:
>> Grzegorz Kossakowski pisze:
>>>
>>> It's not thread-specific but request-specific but here request means 
>>> the one coming from browser and handled by servlet container and not 
>>> those internal requests that Cocoon is doing when cocoon: or 
>>> servlet: protocols are being used.
>>>
>>>> in the setup method of the generator class we replace the 
>>>> objectmodel injected by spring with the one passed with that method 
>>>> ... after doing this the errors are not that frequent .. but they 
>>>> are still there :( .. its still being modified by some other 
>>>> threads ...
>>>>
>>>>
>>>> Could you please let us know how do u intend to implement ur 
>>>> proposed solution
>>>
>>> The idea is to introduce a new implementation of a Spring scope that 
>>> will work in a following way:
>>> 1. if requested object (like OM) exists in current context then just 
>>> return it
>>> 2. if requested object does not yet exist in current context then 
>>> find out if this context is derived from root one:
>>>    a) if the context is derived then ask the root for the object, 
>>> clone it and store cloned version in current context
>>>    b) if the context is not derived one so itself is a root then 
>>> just ask Spring to create a new instance of requested object and 
>>> again store it in current context
>>>
>>> The introduction of new contexts should happen only in two cases:
>>> 1. new thread is being invoked (for multi-thread scenarios)
>>> 2. new internal request is being invoked (in case of using 
>>> servlet/cocoon protocols)
>>>
>>>
>>> Even if this may sound scary, the implementation of this idea should 
>>> be very simple. It's only a few lines of code are needed to handle 
>>> everything. Of course, the problem is where to inject this code.
>>> Actually, today I was so busy with other work that I hadn't enough 
>>> time to look into Cocoon itself but tomorrow I'll do so and give you 
>>> more detailed instructions how to implement this.
>>>
>>> Hopefully, proposed solution should fix this problem once and for 
>>> ever (at least I fail to imagine any situation when this wouldn't work)
>>
>> Imran, after taking a closer look at our code I can see that there 
>> are little bit more issues that need to be fixed before I can fix 
>> this one.
>>
>> I guess it's going to be much easier if I take care of a whole work 
>> because it's really non-trivial stuff and you really need to know all 
>> the internals of Cocoon in order to properly fix the problem you have.
>>
>> Therefore I suggest that you provide me a simple application that 
>> exhibits this problem so I can test my fixes and track the whole bug. 
>> I suggest creation of two different scenarios where one will use 
>> cocoon: protocol and another will use servlet: protocol.
>>
>> The most preferred way of providing me this test-cases would be to 
>> prepare two ITs as it's done in
>> http://svn.eu.apache.org/viewvc/cocoon/trunk/blocks/cocoon-it/
>> http://svn.eu.apache.org/viewvc/cocoon/trunk/core/cocoon-webapp/src/test/java/org/apache/cocoon/it/ 
>>
>>
>> In the first location you add sitemap entries and other resources 
>> that you usually at to your block, and in the webapp you create a 
>> test-case that tests expected behavior.
>>
>> As soon as you provide me such test-cases (as a patch in JIRA) I'll 
>> start working on this problem.
>>
>
> Grzegorz, i have attached the testcase to the issue
>
> https://issues.apache.org/jira/browse/COCOON-2216
>
> i have attached three files .. test-block is the main block .. webapp 
> is for running that block .. before that u will have to apply the 
> patch cocoon-trunk.patch to cocoon other wise it wont work at all ...
> for both the block perform mvn install .. and then from webapp block 
> mvn jetty:run
>
> so the page
>
> http://localhost:8888/test-block/index.html
>
> is generated using the parallel generator .. if ur lucky and dont get 
> the error the first time then just refresh and am sure the error will 
> be there .. there are five components included in that page ... out of 
> which 4 are normal jx components and the fifth one is cforms component 
> ... all the jx component have been assigned different instance of the 
> same object but still the properties displayed on the page shows the 
> same value(they should be different) .. if u execute query for these 
> components individually then they appear without any error .. links 
> for querying them individually
>
> [jx components .. shows xml output .. forgot to add the pipeline to 
> serialize it to html.. u can add one]
> http://localhost:8888/test-block/showjx
> http://localhost:8888/test-block/showjx1
> http://localhost:8888/test-block/showjx2
> http://localhost:8888/test-block/showjx3
>
> [cforms component]
> http://localhost:8888/test-block/form2bean.flow
>
> most of the time we get the error
> Caused by: org.apache.commons.jxpath.JXPathException: No value for 
> xpath: $cocoon/continuation/id
> its because the objectmodel is being changed by all the components 
> simultaneously ....the error is there on the logs not on the page .. 
> on the page it will just ignore that component
>
> u can change the line 427 in the class TestContentAggregator in the 
> main block ... this.parameters.setParameter("parallel", "true");  
> change that to false and it will execute them in sequential and then 
> the errors are gone ...
>
> Would greatly appreciate it if you could have a look and try to 
> resolve it ..
>
> Thanks and regards
>
> Imran
>
>
Hi Grzegorz,

Any luck with the implementation of the objectmodel for the new scope .. 
were u able to execute the sample application i provided if yes then 
were u able to reproduce the error ? .. please do let me know .. if you 
are busy with something else then can you please point me to the right 
direction with basic idea of how to implement a new objectmodel which is 
thread specific ..

thanks and regards