[ https://issues.apache.org/jira/browse/XALANJ-2439?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15490240#comment-15490240 ]
Thomas Scheffler commented on XALANJ-2439: ------------------------------------------ I notice the same problem as Eric. After transforming a few ten thousend documents, I get: {noformat} org.apache.xml.dtm.DTMException: Keine weiteren Dokumenttypmodell-IDs verfügbar at org.apache.xml.dtm.ref.DTMManagerDefault.addDTM(DTMManagerDefault.java:148) at org.apache.xml.dtm.ref.DTMManagerDefault.getDTM(DTMManagerDefault.java:326) at org.apache.xpath.XPathContext.getRTFDTM(XPathContext.java:1258) at org.apache.xalan.transformer.TransformerImpl.transformToRTF(TransformerImpl.java:1911) at org.apache.xalan.templates.ElemVariable.getValue(ElemVariable.java:312) at org.apache.xalan.templates.ElemVariable.execute(ElemVariable.java:248) at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:395) at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:178) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.transformer.TransformerImpl.transformToRTF(TransformerImpl.java:1990) at org.apache.xalan.transformer.TransformerImpl.transformToRTF(TransformerImpl.java:1912) at org.apache.xalan.templates.ElemVariable.getValue(ElemVariable.java:312) at org.apache.xalan.templates.ElemVariable.execute(ElemVariable.java:248) at org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.java:425) at org.apache.xalan.templates.ElemForEach.execute(ElemForEach.java:265) at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:395) at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:178) at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:395) at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:178) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.java:425) at org.apache.xalan.templates.ElemForEach.execute(ElemForEach.java:265) at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:395) at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:178) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2272) at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1358) at org.apache.xalan.transformer.TransformerImpl.run(TransformerImpl.java:3449) at org.apache.xalan.transformer.TransformerHandlerImpl.endDocument(TransformerHandlerImpl.java:408) at org.apache.xerces.parsers.AbstractSAXParser.endDocument(AbstractSAXParser.java:734) at org.apache.xerces.impl.XMLDocumentScannerImpl.endEntity(XMLDocumentScannerImpl.java:525) at org.apache.xerces.impl.XMLEntityManager.endEntity(XMLEntityManager.java:1938) at org.apache.xerces.impl.XMLEntityScanner.load(XMLEntityScanner.java:1773) at org.apache.xerces.impl.XMLEntityScanner.skipSpaces(XMLEntityScanner.java:1304) at org.apache.xerces.impl.XMLDocumentScannerImpl$TrailingMiscDispatcher.dispatch(XMLDocumentScannerImpl.java:1239) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:324) at org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:875) at org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:798) at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:108) at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1198) at [my custom code stack is here] {noformat} > [PATCH] XSLTC resource leak causes 'No more DTM IDs are available' error > ------------------------------------------------------------------------ > > Key: XALANJ-2439 > URL: https://issues.apache.org/jira/browse/XALANJ-2439 > Project: XalanJ2 > Issue Type: Bug > Components: XSLTC > Affects Versions: The Latest Development Code > Environment: Linux and Windows XP with Sun JRE 1.5.0_15 and 1.6.0_05 > Reporter: Helge Schulz > Priority: Minor > Fix For: The Latest Development Code > > Attachments: DOMLeak-4-NodeSetAndMultiDOM.xsl, > DOMLeak-XSLT-Test-1.0.jar, DOMLeak-Xalan-SVN-r584164.patch > > Original Estimate: 4h > Remaining Estimate: 4h > > The Xalan XSLT compiler (XSLTC) has several resource leaks in handling > result tree fragments in XSLT variables and parameters. If a variable > or parameter declaration contains XML elements, a new DOM tree is created > and a new internal integer id is reserved for it. The garbage collector can > never retrieve this DOM tree, because the id registration holds a reference > to it. This bug prevents the transformation of large input files, because > complex templates creates many result tree fragments and exceeds often the > absolute limit of possible DOM trees in XSLTC (2^16 = 65535). If this > limit is reached, XSLTC throws the following exception: > DTMException: No more DTM IDs are available > The attached patch adds a new release method to the DOM interface and calls > it, when the scope of a variable or parameter is leaved. > You can test this patch with the attached JAR file. This file can be > called with > java -Xmx800M -jar DOMLeak-XSLT-Test-X.Y.jar > This file contains four test style sheets with expected output files. > This bug exists also in *all* Sun JRE 1.5 and 1.6 versions, because the > Xalan XSLTC source code is used in the 'com.sun.org.apache.xalan.internal' > packages. The attached test JAR file contains also a patch for the current > Sun JRE version 1.6.0_5 and a fix JAR file to be installed into the > '../jre/lib/endorsed' directory of the JRE installation. > Please add the attached test files to the Xalan test suite. I have > released them under Apache license version 2.0. > Helge Schulz - http://OpenSHORE.org > ---------- > Here is the output of running my test cases with several Java version: > test: > apply-with-all-versions: > [apply] Buildfile: build.xml > [apply] test-java: > [apply] [echo] Test Sun Java 1.4.2_17 with integrated XSLT > [apply] [java] Testing DOMLeak-1-ResultTreeInVariable.xsl... Ok. > [apply] [java] Testing DOMLeak-2-ResultTreeInCallParameter.xsl... > Ok. > [apply] [java] Testing > DOMLeak-3-ResultTreeInApplyParameter.xsl... Ok. > [apply] [java] Testing DOMLeak-4-NodeSetAndMultiDOM.xsl... Ok. > [apply] [echo] > [apply] [echo] Test Sun Java 1.4.2_17 with latest Xalan (SVN > revision 584164) > [apply] [java] Testing DOMLeak-1-ResultTreeInVariable.xsl... > ERROR: 'No more DTM IDs are available' > [apply] [java] XSLT Exception: > org.apache.xml.dtm.DTMException: No more DTM IDs are available > [apply] [java] Testing DOMLeak-2-ResultTreeInCallParameter.xsl... > ERROR: 'No more DTM IDs are available' > [apply] [java] XSLT Exception: > org.apache.xml.dtm.DTMException: No more DTM IDs are available > [apply] [java] Testing > DOMLeak-3-ResultTreeInApplyParameter.xsl... ERROR: 'No more DTM IDs are > available' > [apply] [java] XSLT Exception: > org.apache.xml.dtm.DTMException: No more DTM IDs are available > [apply] [java] Testing DOMLeak-4-NodeSetAndMultiDOM.xsl... ERROR: > 'No more DTM IDs are available' > [apply] [java] XSLT Exception: > org.apache.xml.dtm.DTMException: No more DTM IDs are available > [apply] [echo] > [apply] [echo] Test Sun Java 1.4.2_17 with fixed Xalan > [apply] [java] Testing DOMLeak-1-ResultTreeInVariable.xsl... Ok. > [apply] [java] Testing DOMLeak-2-ResultTreeInCallParameter.xsl... > Ok. > [apply] [java] Testing > DOMLeak-3-ResultTreeInApplyParameter.xsl... Ok. > [apply] [java] Testing DOMLeak-4-NodeSetAndMultiDOM.xsl... Ok. > [apply] BUILD SUCCESSFUL > [apply] Total time: 1 minute 21 seconds > [apply] Buildfile: build.xml > [apply] test-java: > [apply] [echo] Test Sun Java 1.5.0_15 with integrated XSLT > [apply] [java] Testing DOMLeak-1-ResultTreeInVariable.xsl... > ERROR: 'No more DTM IDs are available' > [apply] [java] XSLT Exception: > com.sun.org.apache.xml.internal.dtm.DTMException: No more DTM IDs are > available > [apply] [java] Testing DOMLeak-2-ResultTreeInCallParameter.xsl... > ERROR: 'No more DTM IDs are available' > [apply] [java] XSLT Exception: > com.sun.org.apache.xml.internal.dtm.DTMException: No more DTM IDs are > available > [apply] [java] Testing > DOMLeak-3-ResultTreeInApplyParameter.xsl... ERROR: 'No more DTM IDs are > available' > [apply] [java] XSLT Exception: > com.sun.org.apache.xml.internal.dtm.DTMException: No more DTM IDs are > available > [apply] [java] Testing DOMLeak-4-NodeSetAndMultiDOM.xsl... ERROR: > 'No more DTM IDs are available' > [apply] [java] XSLT Exception: > com.sun.org.apache.xml.internal.dtm.DTMException: No more DTM IDs are > available > [apply] [echo] > [apply] [echo] Test Sun Java 1.5.0_15 with latest Xalan (SVN > revision 584164) > [apply] [java] Testing DOMLeak-1-ResultTreeInVariable.xsl... > ERROR: 'No more DTM IDs are available' > [apply] [java] XSLT Exception: > org.apache.xml.dtm.DTMException: No more DTM IDs are available > [apply] [java] Testing DOMLeak-2-ResultTreeInCallParameter.xsl... > ERROR: 'No more DTM IDs are available' > [apply] [java] XSLT Exception: > org.apache.xml.dtm.DTMException: No more DTM IDs are available > [apply] [java] Testing > DOMLeak-3-ResultTreeInApplyParameter.xsl... ERROR: 'No more DTM IDs are > available' > [apply] [java] XSLT Exception: > org.apache.xml.dtm.DTMException: No more DTM IDs are available > [apply] [java] Testing DOMLeak-4-NodeSetAndMultiDOM.xsl... ERROR: > 'No more DTM IDs are available' > [apply] [java] XSLT Exception: > org.apache.xml.dtm.DTMException: No more DTM IDs are available > [apply] [echo] > [apply] [echo] Test Sun Java 1.5.0_15 with fixed Xalan > [apply] [java] Testing DOMLeak-1-ResultTreeInVariable.xsl... Ok. > [apply] [java] Testing DOMLeak-2-ResultTreeInCallParameter.xsl... > Ok. > [apply] [java] Testing > DOMLeak-3-ResultTreeInApplyParameter.xsl... Ok. > [apply] [java] Testing DOMLeak-4-NodeSetAndMultiDOM.xsl... Ok. > [apply] BUILD SUCCESSFUL > [apply] Total time: 2 minutes 13 seconds > [apply] Buildfile: build.xml > [apply] test-java: > [apply] [echo] Test Sun Java 1.6.0_05 with integrated XSLT > [apply] [java] Testing DOMLeak-1-ResultTreeInVariable.xsl... > ERROR: 'No more DTM IDs are available' > [apply] [java] XSLT Exception: > com.sun.org.apache.xml.internal.dtm.DTMException: No more DTM IDs are > available > [apply] [java] Testing DOMLeak-2-ResultTreeInCallParameter.xsl... > ERROR: 'No more DTM IDs are available' > [apply] [java] XSLT Exception: > com.sun.org.apache.xml.internal.dtm.DTMException: No more DTM IDs are > available > [apply] [java] Testing > DOMLeak-3-ResultTreeInApplyParameter.xsl... ERROR: 'No more DTM IDs are > available' > [apply] [java] XSLT Exception: > com.sun.org.apache.xml.internal.dtm.DTMException: No more DTM IDs are > available > [apply] [java] Testing DOMLeak-4-NodeSetAndMultiDOM.xsl... ERROR: > 'No more DTM IDs are available' > [apply] [java] XSLT Exception: > com.sun.org.apache.xml.internal.dtm.DTMException: No more DTM IDs are > available > [apply] [echo] > [apply] [echo] Test Sun Java 1.6.0_05 with latest Xalan (SVN > revision 584164) > [apply] [java] Testing DOMLeak-1-ResultTreeInVariable.xsl... > ERROR: 'No more DTM IDs are available' > [apply] [java] XSLT Exception: > org.apache.xml.dtm.DTMException: No more DTM IDs are available > [apply] [java] Testing DOMLeak-2-ResultTreeInCallParameter.xsl... > ERROR: 'No more DTM IDs are available' > [apply] [java] XSLT Exception: > org.apache.xml.dtm.DTMException: No more DTM IDs are available > [apply] [java] Testing > DOMLeak-3-ResultTreeInApplyParameter.xsl... ERROR: 'No more DTM IDs are > available' > [apply] [java] XSLT Exception: > org.apache.xml.dtm.DTMException: No more DTM IDs are available > [apply] [java] Testing DOMLeak-4-NodeSetAndMultiDOM.xsl... ERROR: > 'No more DTM IDs are available' > [apply] [java] XSLT Exception: > org.apache.xml.dtm.DTMException: No more DTM IDs are available > [apply] [echo] > [apply] [echo] Test Sun Java 1.6.0_05 with fixed Xalan > [apply] [java] Testing DOMLeak-1-ResultTreeInVariable.xsl... Ok. > [apply] [java] Testing DOMLeak-2-ResultTreeInCallParameter.xsl... > Ok. > [apply] [java] Testing > DOMLeak-3-ResultTreeInApplyParameter.xsl... Ok. > [apply] [java] Testing DOMLeak-4-NodeSetAndMultiDOM.xsl... Ok. > [apply] BUILD SUCCESSFUL > [apply] Total time: 1 minute 42 seconds > BUILD SUCCESSFUL > Total time: 5 minutes 22 seconds -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@xalan.apache.org For additional commands, e-mail: dev-h...@xalan.apache.org