I get IllegalStateExceptions in ECM with a custom source as soon I access it in parallel. I could reproduce this behaviour with webdav.
To reproduce:
Copy the cocoon-2.1.3 samples onto a webdav server and mount this directory with the webdav protocol in the webapp sitemap, like:
<map:match pattern="samples/**">
<map:mount check-reload="yes" src="webdav://davhost:8080/samples/{1}" uri-prefix="samples/{1}"/>
</map:match>
The samples page is now accessible and shows up correctly in the browser.
Apache Bench was used to test concurrency:
ab -n20 -c1 http://cocoonhost:8888/samples/ succeeds with no errors
ab -n20 -c2 http://cocoonhost:8888/samples/ fails with IllegalStateExceptions
Everything goes well with parallel execution if I do not mount the samples remote, but use the FileSource. Is there some concurrency problem in ECM, or is this related to the webdav block?
System is SMP RedHat 7.3 with latest RHSA 2.4.20 kernel.
Java VM is java version "1.4.2_02" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_02-b03) Java HotSpot(TM) Server VM (build 1.4.2_02-b03, mixed mode) with LD_ASSUME_KERNEL=2.2.5
The Servlet Container is Jetty/4.2.9, cocoon-2.1.3 default.
java.lang.IllegalStateException: You cannot lookup components on a disposed ComponentLocator
at org.apache.avalon.excalibur.component.ExcaliburComponentManager.lookup(ExcaliburComponentManager.java:201)
at org.apache.cocoon.components.CocoonComponentManager.lookup(CocoonComponentManager.java:324)
at org.apache.cocoon.components.treeprocessor.sitemap.ErrorHandlerHelper.invokeErrorHandler(ErrorHandlerHelper.java:100)
at org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:189)
at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:108)
at org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:152)
at org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:354)
at org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:307)
at org.apache.cocoon.Cocoon.process(Cocoon.java:656)
at org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:1112)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:360)
at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:294)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:558)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1714)
at org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:507)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1664)
at org.mortbay.http.HttpServer.service(HttpServer.java:863)
at org.mortbay.http.HttpConnection.service(HttpConnection.java:775)
at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:939)
at org.mortbay.http.HttpConnection.handle(HttpConnection.java:792)
at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:201)
at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:289)
at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:455)
-- lg, Chris
