[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

[no subject]

[no subject]
transformer.transform(new DOMSource(doc), new StreamResult(baos));

and the difference is substantial. Running in eClipse the average time
taken is usually 60-80ms whereas within the app server its 700-800ms.

I'm at a loss to understand what could be causing a 10 fold increase
in the time taken for exactly the same code. Are there any JVM or
other settings that might be causing this ?

To be certain that the App Server (and eClipse) were picking up the
Saxon JARs and not some other parser I included in the output the
vendor name and version, which in both cases reported :-

<!--XSLT vendor: SAXON 9.1.0.6 from Saxonica, XSLT version: 2.0, XSLT
vendor URL: http://www.saxonica.com/-->

Some example code and outputs below ..

Regards

Fraser.

Example code perfroming the transform (including some timing output) :-

public String transformXml(String inputXml, String xslFilePath, Vector
paramsVector,) throws Exception {

       long transformstart = System.currentTimeMillis();

       long start = System.currentTimeMillis();
       long end = 0L;
       long totalTime = 0L;

               ByteArrayInputStream bais = new
ByteArrayInputStream(inputXml.getBytes(stringEncoding));

               InputSource in = new InputSource(bais);
               DocumentBuilderFactory dfactory =
DocumentBuilderFactory.newInstance();
               dfactory.setNamespaceAware(true);
               Document doc = dfactory.newDocumentBuilder().parse(in);

               end = System.currentTimeMillis();
               totalTime = end - start;
               System.out.println("Time to parse input: " + totalTime);
               start = System.currentTimeMillis();

               TransformerFactory tFactory = cachingTransformerFactory;
               Transformer transformer;

               transformer = tFactory.newTransformer(new
StreamSource(new File(xslFilePath)));

               transformer.clearParameters();

               end = System.currentTimeMillis();
               totalTime = end - start;
               System.out.println("Time to create transformer: " + totalTime);
               start = System.currentTimeMillis();


               // Create an instance of the wbimb URI Resolver
               URIResolver objResolver = new MessageBrokerURIResolver();
               transformer.setURIResolver(objResolver);

               end = System.currentTimeMillis();
               totalTime = end - start;
               System.out.println("Time to set URIResolver: " + totalTime);
               start = System.currentTimeMillis();

               ByteArrayOutputStream baos = new ByteArrayOutputStream();

               //set parameters
               for (int x = 0; x < paramsVector.size(); x++) {
                       Parameter param = (Parameter) paramsVector.get(x);
                       transformer.setParameter(param.name, param.value);
               }

               end = System.currentTimeMillis();
               totalTime = end - start;
               System.out.println("Time to parse params: " + totalTime);
               start = System.currentTimeMillis();

               /******* THIS IS WHERE MOST OF THE TIME TAKEN IS ********/
               transformer.transform(new DOMSource(doc), new
StreamResult(baos));

               end = System.currentTimeMillis();
               totalTime = end - start;
               System.out.println("Time to perform transform: " + totalTime);
               start = System.currentTimeMillis();

               baos.close();
               byte[] data = baos.toByteArray();
               String outputString = null;
               try {
                       outputString = new String(data, stringEncoding);
               } catch (Exception e) {
                       String message = "Got Exception converting the
output of transform to String using encoding: " + stringEncoding;
                       throw new Exception(message);
               }

               end = System.currentTimeMillis();
               totalTime = end - start;
               System.out.println("Time to convert the output of the
transform to a String: " + totalTime);

               long transformend = System.currentTimeMillis();
               long transformtotalTime = transformend - transformstart;
               System.out.println("Total time to run XSLT: " +
transformtotalTime);

               return outputString;

       }


... and this is some typical output from running in eClipse (I'm
running 20 iterations here) :-

===================================================
TEST : validResponse_CachedStylesheet
===================================================
Time to parse input: 172
Time to create transformer: 547
Time to set URIResolver: 0
Time to parse params: 0
Time to perform transform: 187
Time to convert the output of the transform to a String: 0
Total time to run XSLT: 906
Time to parse input: 0
Time to create transformer: 0
Time to set URIResolver: 0
Time to parse params: 0
Time to perform transform: 94
Time to convert the output of the transform to a String: 0
Total time to run XSLT: 94
Time to parse input: 0
Time to create transformer: 0
Time to set URIResolver: 0
Time to parse params: 0
Time to perform transform: 78
Time to convert the output of the transform to a String: 0
Total time to run XSLT: 78
Time to parse input: 0
Time to create transformer: 0
Time to set URIResolver: 0
Time to parse params: 0
Time to perform transform: 78
Time to convert the output of the transform to a String: 0
Total time to run XSLT: 78
...
Total time to run XSLT for (20) iterations : 2500
Average time to run XSLT for (20) iterations : 125

Heres some Log4j output from running the same code in the App Server
(note the LAST entry - 735ms) :-

<PrimaryLogText>CachingTransformerFactory: Entry for file [C:\Program
Files\IBM\MQSI\6.1\bin\..\config\flows\service\exceedinboundadapter\resources\retrievepolicysummarylistbyclientref\validation\validateResponse.xslt]
FOUND in CACHE..</PrimaryLogText>

<PrimaryLogText>CachingTransformerFactory: Using CACHED stylesheet
[C:\Program Files\IBM\MQSI\6.1\bin\..\config\flows\service\exceedinboundadapter\resources\retrievepolicysummarylistbyclientref\validation\validateResponse.xslt]..</PrimaryLogText>

<PrimaryLogText>eXSLTPerformance.EnhancedXMLTransformationNode: Time
to create transformer: 0.</PrimaryLogText>

<PrimaryLogText>eXSLTPerformance.EnhancedXMLTransformationNode: Time
to set URIResolver: 0.</PrimaryLogText>

<PrimaryLogText>eXSLTPerformance.EnhancedXMLTransformationNode: Time
to parse params: 0.</PrimaryLogText>

<PrimaryLogText>eXSLTPerformance.EnhancedXMLTransformationNode: Time
to perfrom transform: 735.</PrimaryLogText>

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2011 All Rights Reserved.