Peter could be right. And there I thought I had this under control. But
with so many open Bugzilla issues, things get lost quickly. I've seen
multi-threading issues inside Batik myself in a production system and
haven't been able to put my finger on it since I though I had this fixed,
but it could be that I haven't really fixed it for all cases. I'll have
to look into it.

At any rate, FopFactory is supposed to be thread-safe. I always have one
FopFactory instance per configuration and that is usually one for the
whole JVM.

On 02.09.2010 10:08:19 Alexios Giotis wrote:
> Hi Peter,
> 
> Thanks for pointing this out. It differs in that the instance of 
> FOUserAgent was shared, but other than this, it's exactly the same case. 
> Finally, this leads to 
> https://issues.apache.org/bugzilla/show_bug.cgi?id=46360
> 
> which is still open.
> 
> As I read from the thread, this is a complex case and in batik they have 
> good reasons not to be thread-safe.
> 
> Finally, sorry for my other posting with the same title. I though that 
> only the subscribed email address can post.
> 
> Alexis
> 
> 
> 
> On 1-9-10 11:30 PM, Peter Coppens wrote:
> > Alexis,
> >
> > This reminds me of something similar I ran into a while ago. I can't 
> > remember the details nor how I eventually got around this and/or whether 
> > you run into the same but the (weird) behavior you describe does look very 
> > similar.
> >
> > See 
> > http://old.nabble.com/Batik-exception-when-using-fop-with-svg-images-in-threaded-environment-td20809049.html
> >
> > Perhaps it helps
> >
> > Peter
> >
> > On 01 Sep 2010, at 17:53, Alexios Giotis wrote:
> >
> >> Hello,
> >>
> >> The javadoc and the class name suggest that FopFactory should be 
> >> thread-safe although this is not explicitly written. If this is not 
> >> thread-safe then please ignore what follows.
> >>
> >> I am using FOP 1.0 to produce PDF documents concurrently from FOP 
> >> intermediate format. The PDF documents share a lot of common images, so I 
> >> decided to use a single instance of FopFactory to reduce memory 
> >> requirements. From the single FopFactory, I produce different instances 
> >> for different threads like this:
> >>
> >> FOUserAgent userAgent = fopFactory.newFOUserAgent();
> >> IFDocumentHandler targetHandler = 
> >> fopFactory.getRendererFactory().createDocumentHandler(userAgent,outputFormat);
> >> IFUtil.setupFonts(targetHandler);
> >> targetHandler.setResult(new StreamResult(outStream));
> >> IFConcatenator concatenator = new IFConcatenator(targetHandler, null);
> >> for (int i = 0; i<  numberOfDocumentsToConcatenate; i++) {
> >>   Source src = new SAXSource(myOwnApplicationXmlFilters, new 
> >> InputSource(myOwnInputStream));
> >> concatenator.appendDocument(src);
> >> }
> >>
> >> The problem is that even on my 2-core laptop, I frequently get exceptions 
> >> silently written in standard error. Different stacktraces are attached and 
> >> as you can see happen when batik parses the SVG files. For the same input 
> >> the strings read are corrupted. For example the overflow="visible" is read 
> >> as "vssible" and then later as "vissibll". Also the fill="#EC2227" is try 
> >> to parse "E7E8" as color.
> >>
> >> The workaround for my application is to have a new instance of FopFactory 
> >> per thread but I would like to fix it and create a patch. Since I am quite 
> >> new to FOP, I would like some advise on what should be the proper level. 
> >> The higher one would be the FopFactory (but it's too high and I could do 
> >> it externally in my code), then there is the 
> >> org.apache.xmlgraphics.image.loader.ImageManager and at the end we get to 
> >> the very low level org.apache.batik.css.engine.CSSEngine or 
> >> org.apache.batik.css.parser.Parser.
> >>
> >> Secondly, I think it's not a good practice that the exceptions are written 
> >> in STDERR instead of propagating to the application. What do you think ?
> >>
> >>
> >>
> >> This is my first post to fop-dev and hopefully this is the proper one.
> >>
> >> Thanks,
> >> Alexis
> >>
> >> <stacktraces.txt>
> >




Jeremias Maerki

Reply via email to