On Tue, 2004-01-27 at 16:14, Subbareddy Kalakota wrote:

Have replied to Subbareddy off-line to the effect that his
problem might be one of thread-safety. 

He has several class variables (eventMappings, factory,
driver and log) that must be thread-safe in order for the 
servlet to work. 

I suspect that the Driver class isn't thread-safe, leading to
his problem.

> Hi,
> I am using FOP to generate PDF reports from servlet. I am generating and
> storing the pdf report into file and serving that file so that I am avoiding
> repeating calls from browser. every thing going fine, I am able to generate
> pdf reports in development env(windows) and testing (AIX) but when a load
> test is performed on application(AIX, Websphere 5), pdf reports are failing
> after some time(like 20 users concurrently accessing the reports ) but all
> other functions of applicaiton running fine. Here is the exception I am
> getting and followed by the pdf code segment that causing this exception.
> 
> Please let me know if I am doing wrong any where.
> 
> I am guessing ,Driver has some problem, like hanging or not getting
> destroyed.
> 
> Thanks
> subbareddy.
> 
> 
> org.apache.fop.apps.FOPException: root must be root element
>         at
> org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java(Compiled
> Code))
>         at
> org.apache.xalan.transformer.ResultTreeHandler.flushElem(ResultTreeHandler.j
> ava(Compiled Code))
>         at
> org.apache.xalan.transformer.ResultTreeHandler.flushPending(ResultTreeHandle
> r.java(Compiled Code))
>         at
> org.apache.xalan.transformer.ResultTreeHandler.endElement(ResultTreeHandler.
> java(Compiled Code))
>         at
> org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java(
> Compiled Code))
>         at
> org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApp
> lyTemplates.java(Compiled Code))
>         at
> org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.jav
> a(Compiled Code))
>         at
> org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Transform
> erImpl.java(Compiled Code))
>         at
> org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(Transformer
> Impl.java:2081)
>         at
> org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.j
> ava:1137)
>         at
> org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:
> 600)
>         at
> org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:
> 1054)
>         at
> org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:
> 1032)
>         at
> com.verizon.wbtt.components.servlet.controller.ControllerServlet.outputXML2P
> dfFile(ControllerServlet.java(Com
> piled Code))
>         at
> com.verizon.wbtt.components.servlet.controller.ControllerServlet.doProcess(C
> ontrollerServlet.java(Compiled Co
> de))
> 
> 
> ********************** Code Segment *******************
> 
> 
> public class ControllerServlet extends HttpServlet {
> 
>  private HashMap eventMappings;
>  private TransformerFactory factory =null;
>  Driver driver=null;
>  private org.apache.avalon.framework.logger.Logger log= new ConsoleLogger
> (ConsoleLogger.LEVEL_FATAL);
> 
>  public void init() {
>      String eventMappingsURL = null;
>   try{
> 
>    factory=TransformerFactory.newInstance();
>    MessageHandler.setScreenLogger(log);
>    driver = new Driver();
>    driver.setLogger(log);
>    driver.setRenderer(Driver.RENDER_PDF);
>  }
>  protected void outputXML2PdfFile (Source xml, String xslt,
> HttpServletRequest request, HttpServletResponse response) throws
> javax.servlet.ServletException, IOException, FOPException,
> TransformerException {
>   String id = getServletConfig().getServletContext().getRealPath("/");
>   org.apache.fop.configuration.Configuration.put("baseDir", id);
> 
>   HttpSession session = request.getSession();
>   CacheDir pdfDir = (CacheDir) session.getAttribute("__PDFFILEDIR__");
> 
>   if (pdfDir == null) {
>    CacheDir tempDir = (CacheDir)
> getServletContext().getAttribute("__TEMPFILEDIR__");
>    if (tempDir == null) {
>     //tempDir = new CacheDir (WbtsPdfDir, "temp");
>     tempDir = new CacheDir (id, "temp");
>     tempDir.mkdir();
>     getServletContext().setAttribute("__TEMPFILEDIR__", tempDir);
>    }
> 
>    pdfDir = new CacheDir (tempDir, session.getId());
>    pdfDir.mkdir();
>    session.setAttribute("__PDFFILEDIR__", pdfDir);
>   }
>   // end of cache directory
> 
>   String pdfName = String.valueOf(System.currentTimeMillis()) + ".pdf";
>   OutputStream out = new FileOutputStream(new File(pdfDir, pdfName));
>   driver.setOutputStream (out);
> 
>   TransformerFactory factory = TransformerFactory.newInstance();
>   factory.setURIResolver(defaultURIResolver());
>   StreamSource slt = new
> StreamSource(getServletConfig().getServletContext().getResourceAsStream(xslt
> ));
>   slt.setSystemId(id);
>   Transformer transformer = factory.newTransformer(slt);
> 
>   SAXResult res = new SAXResult(driver.getContentHandler());
>   res.setSystemId(id);
>   xml.setSystemId(id);
>   transformer.transform(xml, res);
>   out.flush(); out.close();
> 
> Logger.trace(Logger.SERVLET_LOGGING,"ControllerServlet().outputXML2PdfFile()
> -- Forwarding to pdf file :"+File.separator + pdfDir.getContextName() +
> File.separator + pdfName);
>   RequestDispatcher dispatcher =
> getServletContext().getRequestDispatcher(File.separator +
> pdfDir.getContextName() + File.separator + pdfName);
>   dispatcher.forward(request, response);
> 
> 
>   //response.sendRedirect (File.separator + pdfDir.getContextName() +
> File.separator + pdfName);
>  }
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
-- 
John Austin <[EMAIL PROTECTED]>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to