On 21.09.2005 11:21:50 ALi wrote: > this is my code ... > xml is in resultstr (<?xml ...........>) > xslt is the name of the file (/name.file.xsl) > long tiempo1 = System.currentTimeMillis(); > long tiempo2 = 0; > // Construct fop with desired output format > Driver driver = new Driver(); > driver.setRenderer(Driver.RENDER_PDF); > // Setup output > try { > java.io.ByteArrayOutputStream out = new java.io.ByteArrayOutputStream(); > //out = new java.io.BufferedOutputStream(out); > try { > driver.setOutputStream(out); > // Setup XSLT > TransformerFactory factory = TransformerFactory.newInstance(); > Transformer transformer = factory > .newTransformer(new StreamSource(xsltfile));
That's exactly it. You reload the stylesheet every time. If you create a stylesheet cache, you can simply reuse Templates instances. //Create the Templates object and store it in the cache Templates templates = factory.newTemplates(new StreamSource(xsltfile)); //To create the Transformer with the Templates objects from the cache Transformer transformer = templates.newTransformer(); > // Set the value of a <param> in the stylesheet > transformer.setParameter("versionParam", "2.0"); > // Setup input for XSLT transformation > Source src = new StreamSource(new StringReader(resultStr)); > // Resulting SAX events (the generated FO) must be piped through to FOP > Result res = new SAXResult(driver.getContentHandler()); > // Start XSLT transformation and FOP processing > transformer.transform(src, res); > tiempo2 = System.currentTimeMillis(); > response.setContentType("application/pdf"); > byte[] cont = out.toByteArray(); > response.setContentLength(cont.length); > response.getOutputStream().write(cont); > response.getOutputStream().flush(); > } catch (TransformerException e) { > logger.warn("Error generando pdf :" + e.getMessage()); > } finally { > out.close(); > } > } catch (FileNotFoundException e) { > e.printStackTrace(); > } catch (IOException e) { > logger.debug("Error cerrando el fichero " + e.getMessage()); > } > logger.info("Tiempo 1:" + tiempo1); > logger.info("Tiempo 2:" + tiempo2); > logger.info("Total :" + (tiempo2 - tiempo1)); > > On 9/21/05, Jeremias Maerki <[EMAIL PROTECTED]> wrote: > > > > I assume the operating system has very little influence on the time here. > > The fact that ALi has a big difference in the first couple of > > invocations is a clear indicator that he experiences the effect of class > > loading and just-in-time compiling by the JavaVM. And yes, ALi, the > > stylesheets have to be "compiled" (or at least parsed) but I guess from > > your code that this happens each time in your case. Unfortunately, we > > don't see the code of your makePDF() method. > > > > You can reuse the "pre-compiled" XSLT stylesheet if you use the JAXP > > Templates object. Please note that it's not FOP that compiles the XSLT > > stylesheet. It's probably you in makePDF() by using JAXP. FOP only > > processes the output of the XSL transformation. There are lots of > > articles on the web (like the following) that demonstrate how to cache > > Templates instances: > > http://www.javaworld.com/javaworld/jw-05-2003/jw-0502-xsl.html > > > > On 21.09.2005 10:22:22 Manuel Mall wrote: > > > Are you sure its not your operating system which causes the time > > > differences. Even OSes tend to warm up, ie. the first time around > > > existing stuff gets swapped out and the new code loaded. Next time > > > around this is not required any more. > > > > > > Manuel > > > > > > On Wed, 21 Sep 2005 04:07 pm, ALi wrote: > > > > Hello i have problems with times in generating pdf > > > > I want to know why the times are so different between one invocation > > > > and two > > > > > > > > > > > > for example i have the class makePDF > > > > > > > > main () { > > > > time1 > > > > makePDF(xml,xsl); > > > > time2 > > > > println(time2-time1) > > > > } > > > > the times are over 8 seconds > > > > more or less (with my xsl) > > > > > > > > if i have > > > > main () { > > > > for (1-10) { > > > > time1 > > > > makePDF(xml,xsl); > > > > time2 > > > > println(time2-time1) > > > > } > > > > } > > > > > > > > the first time is 8 seconds, but the seconds ones are less but much > > > > less the second is 3 seconds the third 1500 miliseconds and after > > > > over 300 miliseconds ..... > > > > why is these? is it because the fop need to compile the xsl? Are any > > > > form to force to cache the compilation of xsl? (in order to always > > > > take the same time. > > > > > > > > We have different xsl and one class that makes alls > > > > > > > > > > > > thx for your help > > > > > > > > Jeremias Maerki > > > > many thx for the url jeremias Jeremias Maerki --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]