Damn, I fixed it for Jetty, but didn't check Tomcat.
I've reopened the issue, and will fix it for 1.0.2. Hopefully, for good this time.
I cannot reproduce this with either Tomcat 6.0.14 and 5.5.23. I used Apache Bench (ab) to request the WDSL of the echo sample app a 1000 times, using 100 concurrent threads. From that test, I get the following:
Code:>ab -n 1000 -c 100 http://192.168.0.2:8080/echo/echo.wsdl This is ApacheBench, Version 1.3d <$Revision: 1.73 $> apache-1.3 Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.0.2 (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Finished 1000 requests Server Software: Apache-Coyote/1.1 Server Hostname: 192.168.0.2 Server Port: 8080 Document Path: /echo/echo.wsdl Document Length: 2060 bytes Concurrency Level: 100 Time taken for tests: 2.647 seconds Complete requests: 1000 Failed requests: 0 Broken pipe errors: 0 Total transferred: 2188186 bytes HTML transferred: 2062060 bytes Requests per second: 377.79 [#/sec] (mean) Time per request: 264.70 [ms] (mean) Time per request: 2.65 [ms] (mean, across all concurrent requests) Transfer rate: 826.67 [Kbytes/sec] received
I'll give it another try and double check my tests. If they still fail, I'll give it a try with ApaceBench.
Everything looks good. The last test failure was my fault. I hadn't cleaned everything up before testing the update.
Thank you very much for looking into this, and for resolving the problem so quickly.
I had hit the same issue.
The exact scenario to reproduce it is: Run a JMeter HTTP GET request test (NOT webservices test) for the wsdl url with thread size (users)=10; ramp-up period=0; loop-count=50
As already mentioned in this thread, when there are too many concurrent wsdl file requests, the spring app will die since the operations performed during wsdl file generation are not thread-safe.
The solution is to either cache the wsdl in the client end or better, to do away with the dynamic wsdl generation. The latter one is better if you consider the fact that anyone in your nw could use a jmeter test to down your services :-D
I would dynamically generate the wsdl file for code or environment change, and serve this file from the services. The spring xml config would change like:
Hope that helps..Code:<bean id="myservice" class="org.springframework.ws.wsdl.wsdl11.SimpleWsdl11Definition"> <constructor-arg value="/WEB-INF/myservice.wsdl.wsdl"/> </bean>