xmlxsltxalanexslt

EXSLT: No more DTM IDs are available


I've been searching for an answer to this problem all day long. I'm creating a stylesheet for a moderate-sized XML document (~1.5MB, ~1000 elements), which is giving me a lot of trouble. It's about creating an event-time line graph for different processing plant equipments. The XML is generated through the SAP MII QueryTempalte thingy, and is in an /Rowsets/Rowset/Row-format. All this data is processed and stored in a local node-set, in a /Equipments/Equipment/Event format. This node-set is then processed into HTML, and then rendered in the browser. Now, I'm starting to run into some trouble. I can easily pull data for the past 5 days, which result in ~900 rows of data from MII, and is processed to my node-format, resulting in just under 900 rows. But the second i hit 1017 rows fetched from MII, the stylesheet will only render about half-ways, and then stops and the "No more DTM IDs are available" exception. Now, the MII server only runs JDK 1.5.x, and I've read, that that might be a problem - only thing is, I can't do anything about that. So now I'm asking here: Is there a way to optimize my code?? I've attached some links for my XSL and a sample XML.

XSL: http://pastie.org/1566517 Samlpe XML: http://pastie.org/1566522

Now, the sample XML might not yield any "fun" visual results, and won't be able to replicate the error. But if anyone could spot an obvoius optimization, I'd love to know :) I've been thinking, that it would be nice to replace/move the calculations for startOffset, endOffset, etc, but i can't figure out how.

Hope someone can help me! :)


Solution

  • Know this question is old but just hit the same question myself, for those who also find this issue looks like there is a SAP Note detailing a JVM patch which may resolve this:

    Note#1604623

    https://websmp130.sap-ag.de/sap(bD1lbiZjPTAwMQ==)/bc/bsp/spn/sapnotes/index2.htm?numm=1604623

    One of the fixes in the note is:

    Improved resource consumption for XSLT transformation. We fixed a resource leak in the XSLT processing that will result in error "DTMException: No more DTM IDs are available" for complex XSLs using (recursive) templates. The reason for the problem is, that intermediate results of the processing step are stored in DTMs and the number of DTMs is limited to 65536.

    With this change, there is a new system property "com.sap.jvm.xsltc.enableResourceOptimization". If this property is set to "true", the XSLT compiler will release intermediate results and therefore will need less resources. Processing of complex XSLs should be possible. Note that this system property is not set per default.