cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Christophe Fondacci" <>
Subject IncludeTransformer bug when including external URL in parallel ?
Date Thu, 11 Jun 2009 12:54:05 GMT
Hello all,

I work with Cocoon release 2.1.11.
I got a working test XSP with 4 includes.
The include transformer is defined to process inclusions in parallel.

It works fine when i reference the inclusions through the sitemap via "cocoon:/" URIs, I can
see 4 threads processing the inclusions in parallel.
When I switch this to external URLs (via "http://"), everything works, but inclusions are
now serially processed.

I digged and stepped into the Cocoon source and I can see that the problem is located in the
org.apache.cocoon.transformation.IncludeTransformer line 563 (Cocoon 2.1.11) : 

synchronized (validity) {
Each "external" inclusion after the first one is waiting for synch on the addSource method

When working with sitemap inclusions (cocoon://), the source.getValidity() performed by the
validity.addSource(...) method returns immediately without really generating the element.
There is no synchronization issue here. The generation is done outside of this synchronized

When working with external URL inclusions (http://), the source.getValidity(...) effectively
PERFORMS the remote call and waits for the element to be generated, thus creating synchronization
issues preventing the use of parallel inclusion of external URL. Each inclusion will wait
on the synchronize until the previous external call returns.

I am working on ways to overload the MutliSourceValidity class to avoid making the getValidity
call under specific circumstances.

Some questions now :

- Is it a bug ?

- Is there any workaround for this ?

- Is it safe to extend the MutliSourceValidity class to avoid performing the remote call in
the addSource method ?

Thank you very much for your time. I would be glad to give you some details, should you need


View raw message