You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by Christoph Gaffga <cg...@triplemind.com> on 2003/07/11 16:45:11 UTC

multithreading in Cocoon-2.1, multithreaded ContentAggregator

hi,
I had some difficulties making the ContentAggregator multithreaded. Now it
works, but there are still some open questions. One in dealing with
CocoonComponentManager, the other about the best design for the aggreagator.

(1) synchronization in CocoonComponentManager
---------------------------------------------
I always had null-pointer exceptions and index out of bound when processing
multiple parts for the aggregator in parallel in different threads.
It works when I declare the following methods in CocoonComponentManager as
synchronized:
  enterEnvironment,
  leaveEnvironment,
  startProcessing,
  endProcessing,
  addComponentForAutomaticRelease,
  removeFromAutomaticRelease,
  in EnvironmentDescription (same file) I also decleared
    addtoAutorelease and
    removeFromAutoRelease as synchronized

But I think this is only a workaround, so Im not realy sure what has to be
fixed to have a thread-safe implementation. I would apreciate any
information about how to go on.

(2) best practice for implementing aggregator
---------------------------------------------
What would be the best practice for the implementation of the multithreaded
ContentAggregator. I think there are to possibilities:

 a. Make it using IncludeCacheManager, that's the way the
CIncludeTransformer includes it's content, and it's the way my current
implementation works.

 b. Make it using SourceUtil.toSAX and MirrorRecorder. That would be a more
lightwight implementation than using all the CacheManagerSession stuff. But
it didn't work. With this way of implemeting it I had trouble with the
ComponentManager again.

So, does anybody know what exactly the IncludeCacheManagerSession does? I
could'n find something that seems to be so special, like creating a new
Environment/ComponentManager. Does anybody know anything about it?


How is the interest about having another implementation of ContentAggregator
within cocoon? And, is there anybody who could help me to get the
ComponentManager thread-safe?

Regards,
Christoph Gaffga
cgaffga@triplemind.com

P.S. If anybody is interested in the code, I'll send it over if requested.


RE: multithreading in Cocoon-2.1, multithreaded ContentAggregator

Posted by Carsten Ziegeler <cz...@s-und-n.de>.
Christoph Gaffga wrote:
>
> hi,
> I had some difficulties making the ContentAggregator multithreaded. Now it
> works, but there are still some open questions. One in dealing with
> CocoonComponentManager, the other about the best design for the
> aggreagator.
>
> (1) synchronization in CocoonComponentManager
> ---------------------------------------------
> I always had null-pointer exceptions and index out of bound when
> processing
> multiple parts for the aggregator in parallel in different threads.
> It works when I declare the following methods in CocoonComponentManager as
> synchronized:
>   enterEnvironment,
>   leaveEnvironment,
>   startProcessing,
>   endProcessing,
>   addComponentForAutomaticRelease,
>   removeFromAutomaticRelease,
>   in EnvironmentDescription (same file) I also decleared
>     addtoAutorelease and
>     removeFromAutoRelease as synchronized
>
> But I think this is only a workaround, so Im not realy sure what has to be
> fixed to have a thread-safe implementation. I would apreciate any
> information about how to go on.
>
This is really strange, I will have a look at it in the next days. Yes,
synchronizing is only a workaround.

> (2) best practice for implementing aggregator
> ---------------------------------------------
> What would be the best practice for the implementation of the
> multithreaded
> ContentAggregator. I think there are to possibilities:
>
>  a. Make it using IncludeCacheManager, that's the way the
> CIncludeTransformer includes it's content, and it's the way my current
> implementation works.
>
>  b. Make it using SourceUtil.toSAX and MirrorRecorder. That would
> be a more
> lightwight implementation than using all the CacheManagerSession
> stuff. But
> it didn't work. With this way of implemeting it I had trouble with the
> ComponentManager again.
>
Yes, I think a) is the way to go.

> So, does anybody know what exactly the IncludeCacheManagerSession does? I
> could'n find something that seems to be so special, like creating a new
> Environment/ComponentManager. Does anybody know anything about it?
>
Yes, I know (ok, I developed it...): Now the object holds the configuration
for the current request. This is used by the IncludeCacheManager, a
ThreadSafe
component. The CacheManager queries the session object, if the includes
should
processed in parallel, how the content is cached, when it expires etc.
So, it's just a data object.
>
> How is the interest about having another implementation of
> ContentAggregator
> within cocoon? And, is there anybody who could help me to get the
> ComponentManager thread-safe?
>
Yes, I will try :)

> P.S. If anybody is interested in the code, I'll send it over if requested.
>
Yes, please.

Carsten