You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2009/11/03 15:19:03 UTC
svn commit: r832426 - in /jakarta/jmeter/trunk:
src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/SubscriberSampler.java
xdocs/changes.xml
Author: sebb
Date: Tue Nov 3 14:19:03 2009
New Revision: 832426
URL: http://svn.apache.org/viewvc?rev=832426&view=rev
Log:
Bug 47900 - Allow JMS Subscriber Sampler to be interrupted
Modified:
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/SubscriberSampler.java
jakarta/jmeter/trunk/xdocs/changes.xml
Modified: jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/SubscriberSampler.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/SubscriberSampler.java?rev=832426&r1=832425&r2=832426&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/SubscriberSampler.java (original)
+++ jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/SubscriberSampler.java Tue Nov 3 14:19:03 2009
@@ -22,6 +22,7 @@
import javax.jms.MessageListener;
import javax.jms.TextMessage;
+import org.apache.jmeter.samplers.Interruptible;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.testelement.TestListener;
import org.apache.jmeter.util.JMeterUtils;
@@ -38,7 +39,7 @@
/**
* This class implements the JMS Subcriber sampler
*/
-public class SubscriberSampler extends BaseJMSSampler implements TestListener, MessageListener {
+public class SubscriberSampler extends BaseJMSSampler implements Interruptible, TestListener, MessageListener {
private static final long serialVersionUID = 233L;
@@ -52,6 +53,8 @@
//@GuardedBy("this")
private transient int counter = 0;
+
+ private transient volatile boolean interrupted = false;
// Don't change the string, as it is used in JMX files
private static final String CLIENT_CHOICE = "jms.client_choice"; // $NON-NLS-1$
@@ -93,6 +96,7 @@
*
*/
private OnMessageSubscriber initListenerClient() {
+ interrupted = false;
OnMessageSubscriber sub = (OnMessageSubscriber) ClientPool.get(this);
if (sub == null) {
sub = new OnMessageSubscriber(this.getUseJNDIPropertiesAsBoolean(), this.getJNDIInitialContextFactory(),
@@ -112,6 +116,7 @@
* Create the ReceiveSubscriber client for the sampler.
*/
private void initReceiveClient() {
+ interrupted = false;
this.SUBSCRIBER = new ReceiveSubscriber(this.getUseJNDIPropertiesAsBoolean(), this
.getJNDIInitialContextFactory(), this.getProviderUrl(), this.getConnectionFactory(), this.getTopic(),
this.isUseAuth(), this.getUsername(), this.getPassword());
@@ -148,7 +153,7 @@
int loop = this.getIterationCount();
result.sampleStart();
- while (this.count(0) < loop) {
+ while (this.count(0) < loop && interrupted == false) {
try {
Thread.sleep(0, 50);
} catch (InterruptedException e) {
@@ -156,7 +161,7 @@
}
}
result.sampleEnd();
- result.setResponseMessage(loop + " samples messages recieved");
+ result.setResponseMessage(loop + " samples messages received");
synchronized (this) {// Need to synch because buffer is shared with onMessageHandler
if (this.getReadResponseAsBoolean()) {
result.setResponseData(this.BUFFER.toString().getBytes());
@@ -165,7 +170,7 @@
}
}
result.setSuccessful(true);
- result.setResponseCode(loop + " message(s) recieved successfully");
+ result.setResponseCode(loop + " message(s) received successfully");
result.setSamplerData("Not applicable");
result.setSampleCount(loop);
@@ -190,7 +195,7 @@
this.SUBSCRIBER.setLoop(loop);
result.sampleStart();
- while (this.SUBSCRIBER.count(0) < loop) {
+ while (this.SUBSCRIBER.count(0) < loop && interrupted == false) {
try {
Thread.sleep(0, 50);
} catch (InterruptedException e) {
@@ -198,14 +203,14 @@
}
}
result.sampleEnd();
- result.setResponseMessage(loop + " samples messages recieved");
+ result.setResponseMessage(loop + " samples messages received");
if (this.getReadResponseAsBoolean()) {
result.setResponseData(this.SUBSCRIBER.getMessage().getBytes());
} else {
result.setBytes(this.SUBSCRIBER.getMessage().getBytes().length);
}
result.setSuccessful(true);
- result.setResponseCode(loop + " message(s) recieved successfully");
+ result.setResponseCode(loop + " message(s) received successfully");
result.setSamplerData("Not applicable");
result.setSampleCount(loop);
@@ -276,6 +281,16 @@
}
return choice;
}
+
+ /**
+ * Handle an interrupt of the test.
+ */
+ public boolean interrupt() {
+ boolean oldvalue = interrupted;
+ interrupted = true; // so we break the loops in SampleWithListener and SampleWithReceive
+ return !oldvalue;
+ }
+
// This was the old value that was checked for
private final static String RECEIVE_STR = JMeterUtils.getResString(JMSSubscriberGui.RECEIVE_RSC); // $NON-NLS-1$
}
Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=832426&r1=832425&r2=832426&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Tue Nov 3 14:19:03 2009
@@ -118,6 +118,7 @@
<h3>Other samplers</h3>
<ul>
<li>JUnit sampler now supports JUnit4 tests (using annotations)</li>
+<li>Bug 47900 - Allow JMS SubscriberSampler to be interrupted</li>
</ul>
<h3>Controllers</h3>
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org