Author: sebb
Date: Mon Sep 19 00:53:31 2011
New Revision: 1172403
URL: http://svn.apache.org/viewvc?rev=1172403&view=rev
Log:
Bug 51840 - JMS : Cache of InitialContext has some issues
Modified:
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/client/InitialContextFactory.java
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/PublisherSampler.java
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/client/InitialContextFactory.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/client/InitialContextFactory.java?rev=1172403&r1=1172402&r2=1172403&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/client/InitialContextFactory.java
(original)
+++
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/client/InitialContextFactory.java
Mon Sep 19 00:53:31 2011
@@ -18,9 +18,10 @@
package org.apache.jmeter.protocol.jms.client;
-import java.util.HashMap;
import java.util.Iterator;
+import java.util.Map;
import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
import javax.naming.Context;
import javax.naming.InitialContext;
@@ -35,8 +36,7 @@ import org.apache.log.Logger;
*/
public class InitialContextFactory {
- //GuardedBy("this")
- private static final HashMap<String, Context> MAP = new HashMap<String,
Context>();
+ private static final ConcurrentHashMap<String, Context> MAP = new
ConcurrentHashMap<String, Context>();
private static final Logger log = LoggingManager.getLoggerForClass();
@@ -51,7 +51,7 @@ public class InitialContextFactory {
* @return the context, never null
* @throws NamingException
*/
- public static synchronized Context lookupContext(String
initialContextFactory,
+ public static Context lookupContext(String initialContextFactory,
String providerUrl, boolean useAuth, String securityPrincipal,
String securityCredentials) throws NamingException {
String cacheKey = createKey(initialContextFactory ,providerUrl,
securityPrincipal, securityCredentials);
Context ctx = MAP.get(cacheKey);
@@ -72,7 +72,8 @@ public class InitialContextFactory {
} catch (Exception e) {
throw new NamingException(e.toString());
}
- MAP.put(cacheKey, ctx);
+ // we want to return the context that is actually in the map
+ ctx = MAP.putIfAbsent(cacheKey, ctx);
}
return ctx;
}
@@ -131,13 +132,12 @@ public class InitialContextFactory {
return lookupContext(initialContextFactory, providerUrl, useAuth,
securityPrincipal, securityCredentials);
}
}
+
/**
* clear all the InitialContext objects.
*/
- public synchronized static void close() { // TODO - why is this not used?
- Iterator<?> itr = MAP.keySet().iterator();
- while (itr.hasNext()) {
- Context ctx = MAP.get(itr.next());
+ public static void close() {
+ for (Context ctx : MAP.values()) {
try {
ctx.close();
} catch (NamingException e) {
@@ -147,4 +147,4 @@ public class InitialContextFactory {
MAP.clear();
log.info("InitialContextFactory.close() called and Context instances
cleaned up");
}
-}
+}
\ No newline at end of file
Modified:
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/PublisherSampler.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/PublisherSampler.java?rev=1172403&r1=1172402&r2=1172403&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/PublisherSampler.java
(original)
+++
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/PublisherSampler.java
Mon Sep 19 00:53:31 2011
@@ -36,6 +36,7 @@ import org.apache.jmeter.engine.event.Lo
import org.apache.jmeter.protocol.jms.Utils;
import org.apache.jmeter.protocol.jms.control.gui.JMSPublisherGui;
import org.apache.jmeter.protocol.jms.client.ClientPool;
+import org.apache.jmeter.protocol.jms.client.InitialContextFactory;
import org.apache.jmeter.protocol.jms.client.Publisher;
import org.apache.jorphan.logging.LoggingManager;
@@ -84,7 +85,7 @@ public class PublisherSampler extends Ba
/**
* the implementation calls testEnded() without any parameters.
*/
- public void testEnded(String test) {
+ public void testEnded(String host) {
testEnded();
}
@@ -96,6 +97,7 @@ public class PublisherSampler extends Ba
public void testEnded() {
log.debug("PublisherSampler.testEnded called");
ClientPool.clearClient();
+ InitialContextFactory.close();
}
public void testStarted() {
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=1172403&r1=1172402&r2=1172403&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
Mon Sep 19 00:53:31 2011
@@ -25,11 +25,14 @@ import javax.jms.Message;
import javax.jms.TextMessage;
import javax.naming.NamingException;
+import org.apache.jmeter.engine.event.LoopIterationEvent;
import org.apache.jmeter.protocol.jms.Utils;
+import org.apache.jmeter.protocol.jms.client.InitialContextFactory;
import org.apache.jmeter.protocol.jms.client.ReceiveSubscriber;
import org.apache.jmeter.protocol.jms.control.gui.JMSSubscriberGui;
import org.apache.jmeter.samplers.Interruptible;
import org.apache.jmeter.samplers.SampleResult;
+import org.apache.jmeter.testelement.TestListener;
import org.apache.jmeter.testelement.ThreadListener;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.logging.LoggingManager;
@@ -48,7 +51,7 @@ import org.apache.log.Logger;
// Note: originally the code did use the ClientPool to "share" subscribers,
however since the
// key was "this" and each sampler is unique - nothing was actually shared.
-public class SubscriberSampler extends BaseJMSSampler implements
Interruptible, ThreadListener {
+public class SubscriberSampler extends BaseJMSSampler implements
Interruptible, ThreadListener, TestListener {
private static final long serialVersionUID = 240L;
@@ -375,4 +378,38 @@ public class SubscriberSampler extends B
setProperty(STOP_BETWEEN, selected, false);
}
+ /**
+ * {@inheritDoc}
+ */
+ public void testEnded() {
+ InitialContextFactory.close();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void testEnded(String host) {
+ testEnded();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void testIterationStart(LoopIterationEvent event) {
+ //NOOP
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void testStarted() {
+ //NOOP
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void testStarted(String host) {
+ // NOOP
+ }
}
Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1172403&r1=1172402&r2=1172403&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Mon Sep 19 00:53:31 2011
@@ -96,6 +96,7 @@ This can be overridden by setting the JM
<li>WebService(SOAP) request - add a connect timeout to get the wsdl used to
populate Web Methods when server doesn't response</li>
<li>Bug 51841 - JMS : If an error occurs in ReceiveSubscriber constructor or
Publisher, then Connections will stay open</li>
<li>Bug 51691 - Authorization does not work for JMS Publisher and JMS
Subscriber</li>
+<li>Bug 51840 - JMS : Cache of InitialContext has some issues</li>
</ul>
<h3>Controllers</h3>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]