Hi,
There's a comment at about line 108 of
org.apache.jmeter.protocol.http.sampler.WebServiceSampler.java expressing
concern that sharing a single DocumentBuilder might not be thread safe. Well,
it's not. This explains the intermittent, mysterious failures that I've seen
testing a web service from multiple JMeter threads.
Here's a possible patch using a ThreadLocal to allocate one DocumentBuilder per
thread. I'm new to Jakarta. How do I get this into the source distribution?
Thanks.
-- KiYun Roe
Index:
src/protocol/http/org/apache/jmeter/protocol/http/sampler/WebServiceSampler.java
===================================================================
RCS file:
/home/cvspublic/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/sampler/WebServiceSampler.java,v
retrieving revision 1.17
diff -b -u -w -r1.17 WebServiceSampler.java
---
src/protocol/http/org/apache/jmeter/protocol/http/sampler/WebServiceSampler.java
6 Jan 2005 01:11:43 -0000 1.17
+++
src/protocol/http/org/apache/jmeter/protocol/http/sampler/WebServiceSampler.java
1 Apr 2005 02:16:39 -0000
@@ -112,7 +112,14 @@
* consider using Apache commons pool to create a pool of document builders
* or make sure XMLParserUtils creates builders efficiently.
*/
- private static DocumentBuilder XDB = null;
+ private static ThreadLocal ThreadLocalXDB =
+ new ThreadLocal()
+ {
+ protected Object initialValue()
+ {
+ return XMLParserUtils.getXMLDocBuilder();
+ }
+ };
private String FILE_CONTENTS = null;
@@ -413,10 +420,7 @@
*/
protected Document openDocument(String key)
{
- if (XDB == null)
- {
- XDB = XMLParserUtils.getXMLDocBuilder();
- }
+ DocumentBuilder XDB = (DocumentBuilder) ThreadLocalXDB.get();
Document doc = null;
// if either a file or path location is given,
// get the file object.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]