https://issues.apache.org/bugzilla/show_bug.cgi?id=47646

           Summary: NullPointerException in the "Random Variable" element
           Product: JMeter
           Version: 2.3.4
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: major
          Priority: P2
         Component: Main
        AssignedTo: jmeter-dev@jakarta.apache.org
        ReportedBy: mparr...@hp-cda.com


--- Comment #0 from Miguel Parreño <mparr...@hp-cda.com> 2009-08-05 03:24:57 
PDT ---
In a "Random Variable" element set true the "Per Thread(User)" option, and
launch test plan in distributed mode (Remote Start).

ERROR - jmeter.threads.JMeterThread: Test failed!
java.lang.NullPointerException

    at
org.apache.jmeter.config.RandomVariableConfig.iterationStart(RandomVariableConfig.java:90)

    at
org.apache.jmeter.control.GenericController.fireIterationStart(GenericController.java:318)

    at
org.apache.jmeter.control.GenericController.fireIterEvents(GenericController.java:308)

    at
org.apache.jmeter.control.GenericController.next(GenericController.java:128)

    at
org.apache.jmeter.control.GenericController.nextIsAController(GenericController.java:182)

    at
org.apache.jmeter.control.GenericController.next(GenericController.java:146)

    at
org.apache.jmeter.control.GenericController.nextIsAController(GenericController.java:185)

    at
org.apache.jmeter.control.GenericController.next(GenericController.java:146)

    at
org.apache.jmeter.control.GenericController.nextIsAController(GenericController.java:182)

    at
org.apache.jmeter.control.GenericController.next(GenericController.java:146)

    at
org.apache.jmeter.control.GenericController.nextIsAController(GenericController.java:182)

    at
org.apache.jmeter.control.GenericController.next(GenericController.java:146)

    at org.apache.jmeter.control.LoopController.next(LoopController.java:109)

    at org.apache.jmeter.threads.ThreadGroup.next(ThreadGroup.java:129)

    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:242)

    at java.lang.Thread.run(Unknown Source)

The method:

public void iterationStart(LoopIterationEvent iterEvent) {
        Random randGen=null;
        if (getPerThread()){
            randGen = (Random) perThreadRandom.get();          <------ At line
90, the perThreadRandom object IS NULL.
        } else {
            synchronized(this){
                if (globalRandom == null){
                    init();
                    globalRandom = new Random(getRandomSeedAsLong());
                }
                randGen=globalRandom;
            }
        }
        if (n <=0){
            return;
        }
       long nextRand = minimum + randGen.nextInt(n);
       // Cannot use getThreadContext() as we are not cloned per thread
       JMeterVariables variables =
JMeterContextService.getContext().getVariables();
       variables.put(getVariableName(), formatNumber(nextRand));
    }

The declaration:

private transient ThreadLocal perThreadRandom = new ThreadLocal() {
            protected Object initialValue() {
                init();
                return new Random(getRandomSeedAsLong());
            }};


¿Why transient? Javadoc says that ThreadLocal instances are typically private
static fields in classes that wish to associate state with a thread. However,
in this case not in possible, because init() and getRandomSeedAsLong() are
non-static methods in the class. I comment out these calls, set static the
declaration and work fine.

References: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ThreadLocal.html
I use: java version "1.6.0_14"

-- 
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: jmeter-dev-unsubscr...@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-h...@jakarta.apache.org

Reply via email to