Uploaded image for project: 'Tiles'
  1. Tiles
  2. TILES-505

DefinitionsFactoryException: XML error reading definitions under large load

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Incomplete
    • 2.0.0
    • None
    • tiles-core
    • None
    • Tomcat 5.5.27, Struts 2.0.6.

    Description

      I am using Struts 2.0.6, Tiles 2.0 and Tomcat 5.5.27. The application runs fine in the past, but recently we did some load testing and get the following exception intermittently during load test:

      2010-04-08 05:51:09,970 ERROR [http-443-Processor22] ? - End event threw exception
      java.lang.NoSuchMethodException: No such accessible method: addAttribute() on object: org.apache.tiles.definition.digester.DigesterDefinitionsReader
      at org.apache.commons.beanutils.MethodUtils.invokeMethod(MethodUtils.java:250)
      at org.apache.commons.digester.SetNextRule.end(SetNextRule.java:208)
      at org.apache.commons.digester.Rule.end(Rule.java:228)
      at org.apache.commons.digester.Digester.endElement(Digester.java:1067)
      at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
      at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
      at org.apache.xerces.impl.dtd.XMLDTDValidator.emptyElement(Unknown Source)
      at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
      at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
      at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
      at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
      at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
      at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
      at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
      at org.apache.commons.digester.Digester.parse(Digester.java:1591)
      at org.apache.tiles.definition.digester.DigesterDefinitionsReader.read(DigesterDefinitionsReader.java:158)
      at org.apache.tiles.definition.UrlDefinitionsFactory.readDefinitions(UrlDefinitionsFactory.java:257)
      at org.apache.tiles.definition.UrlDefinitionsFactory.getComponentDefinitions(UrlDefinitionsFactory.java:116)
      at org.apache.tiles.definition.UrlDefinitionsFactory.getDefinition(UrlDefinitionsFactory.java:136)
      at org.apache.tiles.impl.BasicTilesContainer.getDefinition(BasicTilesContainer.java:463)
      at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:363)
      at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:345)
      at org.apache.struts2.views.tiles.TilesResult.doExecute(TilesResult.java:107)
      at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:178)
      at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:343)

      and immediately with the following exceptions:

      2010-04-08 05:51:09,970 ERROR [http-443-Processor38] ? - ApplicationSessionAwareInterceptor:
      org.apache.tiles.definition.DefinitionsFactoryException: XML error reading definitions.
      at org.apache.tiles.definition.digester.DigesterDefinitionsReader.read(DigesterDefinitionsReader.java:161)
      at org.apache.tiles.definition.UrlDefinitionsFactory.readDefinitions(UrlDefinitionsFactory.java:257)
      at org.apache.tiles.definition.UrlDefinitionsFactory.getComponentDefinitions(UrlDefinitionsFactory.java:116)
      at org.apache.tiles.definition.UrlDefinitionsFactory.getDefinition(UrlDefinitionsFactory.java:136)
      at org.apache.tiles.impl.BasicTilesContainer.getDefinition(BasicTilesContainer.java:463)
      at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:363)
      at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:345)
      at org.apache.struts2.views.tiles.TilesResult.doExecute(TilesResult.java:107)
      at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:178)
      at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:343)

      Both exceptions are from DigesterDefinitionsReader.java and root cause for the second one is "org.xml.sax.SAXException: FWK005 parse may not be called while parsing.".

      I am wondering if tiles is thread safe in reading xml definitions. What I understand is it is using Xerces parser to parse tiles.xml, but Xerces parser is not thread safe http://xerces.apache.org/xerces2-j/faq-dom.html, so there should be some synchronization.

      Attachments

        Activity

          People

            Unassigned Unassigned
            boxding Boxiong Ding
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: