DefinitionsFactoryException: XML error reading definitions under large load
---------------------------------------------------------------------------

                 Key: TILES-505
                 URL: https://issues.apache.org/jira/browse/TILES-505
             Project: Tiles
          Issue Type: Bug
          Components: tiles-core
    Affects Versions: 2.0.0
         Environment: Tomcat 5.5.27, Struts 2.0.6.
            Reporter: Boxiong Ding


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. 



-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to