https://issues.apache.org/bugzilla/show_bug.cgi?id=46264

Felix Schumacher <felix.schumac...@internetallee.de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
  Attachment #27755|0                           |1
        is obsolete|                            |

--- Comment #11 from Felix Schumacher <felix.schumac...@internetallee.de> 
2011-10-11 13:53:26 UTC ---
Created attachment 27759
  --> https://issues.apache.org/bugzilla/attachment.cgi?id=27759
starting contexts in parallel using an executor

In my testings, I have found that my patch sometimes throws exception deep
inside tomcat. Those seem to come from incorrect locking of the digester in
ContextConfig. I have corrected the initialization, so that findbugs is happy.

But while testing while writing this I got:
java.lang.NullPointerException
        at
org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1231)
        at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
        at
com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:179)
        at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1343)
        at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2755)
        at
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
        at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
        at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
        at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
        at
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
        at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
        at
com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
        at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1537)
        at
org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:650)
        at
org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:607)
        at
org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:845)
        at
org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:340)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at
org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
        at
org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:110)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
        at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:812)
        at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:787)
        at
org.apache.catalina.core.StandardHost.addChild(StandardHost.java:655)
        at
org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:653)
        at org.apache.catalina.startup.HostConfig$1.run(HostConfig.java:563)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)

after that the digester seems to be unusable and I get following:
org.xml.sax.SAXException: FWK005 parse may not be called while parsing.
        at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1245)
        at
com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
        at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1537)
        at
org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:650)
        at
org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:587)
        at
org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:845)
        at
org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:340)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at
org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
        at
org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:110)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
        at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:812)
        at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:787)
        at
org.apache.catalina.core.StandardHost.addChild(StandardHost.java:655)
        at
org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:653)
        at org.apache.catalina.startup.HostConfig$1.run(HostConfig.java:563)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)

After that I changed class variable digester in ContextConfig to an instance
variable.

I also implemented a simple "same thread executor" to be used when only one
thread is configured.

I renamed parallelDeployment to startupConcurrency as suggested by Rainer and
extended Host to expose getters and setters.

-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to