Author: pmouawad
Date: Sat Oct 15 12:54:04 2011
New Revision: 1183631
URL: http://svn.apache.org/viewvc?rev=1183631&view=rev
Log:
Bug 52036 - Durable Subscription fails with ActiveMQ due to missing clientId
field
Modified:
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/client/ReceiveSubscriber.java
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/control/gui/JMSSubscriberGui.java
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/SubscriberSampler.java
jakarta/jmeter/trunk/xdocs/changes.xml
jakarta/jmeter/trunk/xdocs/images/screenshots/jms/jms_sub.png
jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
Modified:
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/client/ReceiveSubscriber.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/client/ReceiveSubscriber.java?rev=1183631&r1=1183630&r2=1183631&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/client/ReceiveSubscriber.java
(original)
+++
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/client/ReceiveSubscriber.java
Sat Oct 15 12:54:04 2011
@@ -82,24 +82,12 @@ public class ReceiveSubscriber implement
*/
public ReceiveSubscriber(boolean useProps,
String initialContextFactory, String providerUrl, String
connfactory, String destinationName,
- String durableSubscriptionId, boolean useAuth,
+ String durableSubscriptionId, String clientId, boolean useAuth,
String securityPrincipal, String securityCredentials) throws
NamingException, JMSException {
- boolean initSuccess = false;
- try{
- Context ctx = InitialContextFactory.getContext(useProps,
- initialContextFactory, providerUrl, useAuth,
securityPrincipal, securityCredentials);
- CONN = Utils.getConnection(ctx, connfactory);
- SESSION = CONN.createSession(false, Session.AUTO_ACKNOWLEDGE);
- Destination dest = Utils.lookupDestination(ctx, destinationName);
- SUBSCRIBER = createSubscriber(SESSION, dest,
durableSubscriptionId);
- queue = null;
- log.debug("<init> complete");
- initSuccess = true;
- } finally {
- if(!initSuccess) {
- close();
- }
- }
+ this(0, useProps,
+ initialContextFactory, providerUrl, connfactory,
destinationName,
+ durableSubscriptionId, clientId, useAuth,
+ securityPrincipal, securityCredentials, false);
}
/**
@@ -123,22 +111,60 @@ public class ReceiveSubscriber implement
*/
public ReceiveSubscriber(int queueSize, boolean useProps,
String initialContextFactory, String providerUrl, String
connfactory, String destinationName,
- String durableSubscriptionId, boolean useAuth,
+ String durableSubscriptionId, String clientId, boolean useAuth,
String securityPrincipal, String securityCredentials) throws
NamingException, JMSException {
+ this(queueSize, useProps,
+ initialContextFactory, providerUrl, connfactory, destinationName,
+ durableSubscriptionId, clientId, useAuth,
+ securityPrincipal, securityCredentials, true);
+ }
+
+
+ /**
+ * Constructor takes the necessary JNDI related parameters to create a
+ * connection and create an onMessageListener to prepare to begin
receiving messages.
+ * <br/>
+ * The caller must then invoke {@link #start()} to enable message
reception.
+ *
+ * @param queueSize maximum queue size <=0 == no limit
+ * @param useProps if true, use jndi.properties instead of
+ * initialContextFactory, providerUrl, securityPrincipal,
securityCredentials
+ * @param initialContextFactory
+ * @param providerUrl
+ * @param connfactory
+ * @param destinationName
+ * @param useAuth
+ * @param securityPrincipal
+ * @param securityCredentials
+ * @param useMessageListener if true create an onMessageListener to
prepare to begin receiving messages, otherwise queue will be null
+ * @throws JMSException if could not create context or other problem
occurred.
+ * @throws NamingException
+ */
+ private ReceiveSubscriber(int queueSize, boolean useProps,
+ String initialContextFactory, String providerUrl, String
connfactory, String destinationName,
+ String durableSubscriptionId, String clientId, boolean useAuth,
+ String securityPrincipal, String securityCredentials, boolean
useMessageListener) throws NamingException, JMSException {
boolean initSuccess = false;
try{
Context ctx = InitialContextFactory.getContext(useProps,
initialContextFactory, providerUrl, useAuth,
securityPrincipal, securityCredentials);
CONN = Utils.getConnection(ctx, connfactory);
+ if(!isEmpty(clientId)) {
+ CONN.setClientID(clientId);
+ }
SESSION = CONN.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination dest = Utils.lookupDestination(ctx, destinationName);
SUBSCRIBER = createSubscriber(SESSION, dest,
durableSubscriptionId);
- if (queueSize <=0) {
- queue = new LinkedBlockingQueue<Message>();
+ if(useMessageListener) {
+ if (queueSize <=0) {
+ queue = new LinkedBlockingQueue<Message>();
+ } else {
+ queue = new LinkedBlockingQueue<Message>(queueSize);
+ }
+ SUBSCRIBER.setMessageListener(this);
} else {
- queue = new LinkedBlockingQueue<Message>(queueSize);
+ queue = null;
}
- SUBSCRIBER.setMessageListener(this);
log.debug("<init> complete");
initSuccess = true;
}
Modified:
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/control/gui/JMSSubscriberGui.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/control/gui/JMSSubscriberGui.java?rev=1183631&r1=1183630&r2=1183631&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/control/gui/JMSSubscriberGui.java
(original)
+++
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/control/gui/JMSSubscriberGui.java
Sat Oct 15 12:54:04 2011
@@ -62,6 +62,9 @@ public class JMSSubscriberGui extends Ab
private final JLabeledTextField jmsDurableSubscriptionId =
new
JLabeledTextField(JMeterUtils.getResString("jms_durable_subscription_id")); //
$NON-NLS-1$
+ private final JLabeledTextField jmsClientId =
+ new JLabeledTextField(JMeterUtils.getResString("jms_client_id")); //
$NON-NLS-1$
+
private final JLabeledTextField jmsUser =
new JLabeledTextField(JMeterUtils.getResString("jms_user")); //
$NON-NLS-1$
@@ -136,6 +139,7 @@ public class JMSSubscriberGui extends Ab
sampler.setConnectionFactory(jndiConnFac.getText());
sampler.setDestination(jmsDestination.getText());
sampler.setDurableSubscriptionId(jmsDurableSubscriptionId.getText());
+ sampler.setClientID(jmsClientId.getText());
sampler.setUsername(jmsUser.getText());
sampler.setPassword(jmsPwd.getText());
sampler.setUseAuth(useAuth.isSelected());
@@ -169,6 +173,7 @@ public class JMSSubscriberGui extends Ab
mainPanel.add(jndiConnFac);
mainPanel.add(createDestinationPane());
mainPanel.add(jmsDurableSubscriptionId);
+ mainPanel.add(jmsClientId);
mainPanel.add(useAuth);
mainPanel.add(jmsUser);
mainPanel.add(jmsPwd);
@@ -199,6 +204,7 @@ public class JMSSubscriberGui extends Ab
jndiConnFac.setText(sampler.getConnectionFactory());
jmsDestination.setText(sampler.getDestination());
jmsDurableSubscriptionId.setText(sampler.getDurableSubscriptionId());
+ jmsClientId.setText(sampler.getClientId());
jmsUser.setText(sampler.getUsername());
jmsPwd.setText(sampler.getPassword());
iterations.setText(sampler.getIterations());
@@ -221,6 +227,7 @@ public class JMSSubscriberGui extends Ab
jndiConnFac.setText(""); // $NON-NLS-1$
jmsDestination.setText(""); // $NON-NLS-1$
jmsDurableSubscriptionId.setText(""); // $NON-NLS-1$
+ jmsClientId.setText(""); // $NON-NLS-1$
jmsUser.setText(""); // $NON-NLS-1$
jmsPwd.setText(""); // $NON-NLS-1$
iterations.setText("1"); // $NON-NLS-1$
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=1183631&r1=1183630&r2=1183631&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
Sat Oct 15 12:54:04 2011
@@ -81,7 +81,9 @@ public class SubscriberSampler extends B
private static final String TIMEOUT = "jms.timeout"; // $NON-NLS-1$
private static final String TIMEOUT_DEFAULT = "";
private static final String DURABLE_SUBSCRIPTION_ID =
"jms.durableSubscriptionId"; // $NON-NLS-1$
+ private static final String CLIENT_ID = "jms.clientId"; // $NON-NLS-1$
private static final String DURABLE_SUBSCRIPTION_ID_DEFAULT = "";
+ private static final String CLIENT_ID_DEFAULT = ""; // $NON-NLS-1$
private static final String STOP_BETWEEN = "jms.stop_between_samples"; //
$NON-NLS-1$
private transient boolean START_ON_SAMPLE = false;
@@ -99,7 +101,7 @@ public class SubscriberSampler extends B
private void initListenerClient() throws JMSException, NamingException {
SUBSCRIBER = new ReceiveSubscriber(0, getUseJNDIPropertiesAsBoolean(),
getJNDIInitialContextFactory(),
getProviderUrl(), getConnectionFactory(),
getDestination(), getDurableSubscriptionId(),
- isUseAuth(), getUsername(), getPassword());
+ getClientId(), isUseAuth(), getUsername(), getPassword());
log.debug("SubscriberSampler.initListenerClient called");
}
@@ -111,7 +113,7 @@ public class SubscriberSampler extends B
private void initReceiveClient() throws NamingException, JMSException {
SUBSCRIBER = new ReceiveSubscriber(getUseJNDIPropertiesAsBoolean(),
getJNDIInitialContextFactory(), getProviderUrl(),
getConnectionFactory(), getDestination(),
- getDurableSubscriptionId(), isUseAuth(), getUsername(),
getPassword());
+ getDurableSubscriptionId(), getClientId(), isUseAuth(),
getUsername(), getPassword());
log.debug("SubscriberSampler.initReceiveClient called");
}
@@ -362,11 +364,25 @@ public class SubscriberSampler extends B
public String getDurableSubscriptionId(){
return getPropertyAsString(DURABLE_SUBSCRIPTION_ID);
}
+
+ /**
+ * @return JMS Client ID
+ */
+ public String getClientId() {
+ return getPropertyAsString(CLIENT_ID);
+ }
public void setDurableSubscriptionId(String durableSubscriptionId){
setProperty(DURABLE_SUBSCRIPTION_ID, durableSubscriptionId,
DURABLE_SUBSCRIPTION_ID_DEFAULT);
}
+ /**
+ * @param clientId JMS CLient id
+ */
+ public void setClientID(String clientId) {
+ setProperty(CLIENT_ID, clientId, CLIENT_ID_DEFAULT);
+ }
+
// 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=1183631&r1=1183630&r2=1183631&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Sat Oct 15 12:54:04 2011
@@ -96,6 +96,7 @@ Mirror server now uses default port 8081
<ul>
<li>Bug 51996 - JMS Initial Context leak newly created Context when Multiple
Thread enter InitialContextFactory#lookupContext at the same time</li>
<li>Bug 51691 - Authorization does not work for JMS Publisher and JMS
Subscriber</li>
+<li>Bug 52036 - Durable Subscription fails with ActiveMQ due to missing
clientId field</li>
</ul>
<h3>Controllers</h3>
Modified: jakarta/jmeter/trunk/xdocs/images/screenshots/jms/jms_sub.png
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/images/screenshots/jms/jms_sub.png?rev=1183631&r1=1183630&r2=1183631&view=diff
==============================================================================
Binary files - no diff available.
Modified: jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=1183631&r1=1183630&r2=1183631&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml (original)
+++ jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml Sat Oct 15
12:54:04 2011
@@ -1307,6 +1307,8 @@ The following table shows some values wh
<property name="Destination" required="Yes">the message destination (topic
or queue name)</property>
<property name="Durable Subscription ID" required="No">The ID to use for a
durable subscription. On first
use the respective queue will automatically be generated by the JMS provider
if it does not exist yet.</property>
+ <property name="Client ID" required="No">The Client ID to use when you you
use a durable subscription.
+ Be sure to add a variable like ${__threadNum} when you have more than one
Thread.</property>
<property name="Setup" required="Yes">The destination setup type. With At
startup, the destination name is static (i.e. always same name during the
test), with Each sample, the destination name is dynamic and is evaluate at
each sample (i.e. the destination name may be a variable)</property>
<property name="Authentication" required="Yes">Authentication requirement
for the JMS provider</property>
<property name="User" required="No">User Name</property>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]