BTW, the WebServiceSampler bug is vaguely related to bug 33940, reported by
someone else in my organization. We have found that when there's an
unsuccessful result, the throughput reported by the GUI drops to nearly 0,
because org.apache.jmeter.visualizers.SamplingStatCalculator.setStartTime()
sets firstTime to 0 at or around line 314 (which means elapsed time suddenly
becomes very large). It seems to me that perhaps the test preceding the
assignment should be something like "if ((firstTime > startTime) &&
(startTime > 0))", but I'm not familiar enough with JMeter to assume what
the calculations should do when there's an unsuccessful result (and in fact,
perhaps a more comprehensive solution would be to skip a portion of
org.apache.jmeter.visualizers.SamplingStatCalculator.addSample() for
unsuccessful results).

-- KiYun

-----Original Message-----
From: Peter Lin [mailto:[EMAIL PROTECTED] 
Sent: Friday, April 01, 2005 5:02 PM
To: JMeter Developers List
Subject: Re: WebSerivceSampler not thread safe

the fail silently slipped by. It's suppose to log to jmeter's log, but
due to oversight on my part, it doesn't. I'll patch it tonight. rather
than make it threadlocal, I think I will just make it non static.

peter

On Apr 1, 2005 3:43 PM, KiYun Roe <[EMAIL PROTECTED]> wrote:
> Sure. The errors I saw manifested themselves as unsuccessful results in
View
> Results Tree, etc. The statement
> 
>         openDocument(null).getDocumentElement();
> 
> at about line 405 in WebServiceSampler.jar was throwing a null pointer
> exception, because the call to XDB.parse() was failing inside
openDocument()
> (because document builders are not thread safe). The null pointer
exception
> was caught at line 595 of WebServiceSampler.java, resulting in a call to
> RESULT.setSuccessful(false)--hence, the unsuccessful result.
> 
> I personally found it easier to reproduce the problem by hitting a very
> simple web service on another machine from a basic multi-threaded test
plan.
> I guess the key is to spend as little time as possible invoking the web
> service, so that proportionally more time is spent preparing the
call--thus
> increasing the odds of finding more than one thread in the problematic
code.
> 
> I have to say that I'm mystified by the practice of catching exceptions
and
> failing silently as demonstrated in openDocument(). I hope that's just
> temporary.
> 
> -- KiYun
> 
> -----Original Message-----
> From: Peter Lin [mailto:[EMAIL PROTECTED]
> Sent: Thursday, March 31, 2005 10:53 PM
> To: JMeter Developers List
> Subject: Re: WebSerivceSampler not thread safe
> 
> thanks for the patch, i'll take a look this weekend when I get a
> chance. Out of curiousity, what kind of errors are you seeing. I've
> tested and profiled the sampler on several occasions using OptimizeIt
> and wasn't able to see any errors. any additional information you can
> provide would help make sure the bug is really fixed.
> 
> thanks
> 
> peter
> 
> On Mar 31, 2005 9:38 PM, KiYun Roe <[EMAIL PROTECTED]> wrote:
> > 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]

Reply via email to