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

Reply via email to