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