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