Author: pmouawad
Date: Tue Oct 18 20:58:08 2011
New Revision: 1185853
URL: http://svn.apache.org/viewvc?rev=1185853&view=rev
Log:
Bug 52044 - JMS Subscriber used with many threads leads to
javax.naming.NamingException: Something already bound with ActiveMQ
Performances impact of No Caching of InitialContext are low.
Modified:
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/Utils.java
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/client/Publisher.java
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/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/Utils.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/Utils.java?rev=1185853&r1=1185852&r2=1185853&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/Utils.java
(original)
+++
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/Utils.java
Tue Oct 18 20:58:08 2011
@@ -39,6 +39,21 @@ import org.apache.log.Logger;
*/
public final class Utils {
+ /**
+ * Close context
+ * @param closeable {@link Context}
+ * @param log {@link Logger}
+ */
+ public static void close(Context closeable, Logger log) {
+ if (closeable != null){
+ try {
+ closeable.close();
+ } catch (Exception e) {
+ log.error("Error during close: ", e);
+ }
+ }
+ }
+
public static void close(MessageConsumer closeable, Logger log){
if (closeable != null){
try {
@@ -162,5 +177,4 @@ public final class Utils {
}
throw new NamingException("Expected javax.jms.ConnectionFactory, found
"+objfac.getClass().getName());
}
-
}
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=1185853&r1=1185852&r2=1185853&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
Tue Oct 18 20:58:08 2011
@@ -48,7 +48,9 @@ public class InitialContextFactory {
* @param securityCredentials used to set the property {@link
Context#SECURITY_CREDENTIALS}
* @return the context, never null
* @throws NamingException
+ * @{@link Deprecated} No more caching of {@link Context}s
*/
+ @Deprecated
public static Context lookupContext(String initialContextFactory,
String providerUrl, boolean useAuth, String securityPrincipal,
String securityCredentials) throws NamingException {
String cacheKey = createKey(initialContextFactory ,providerUrl,
securityPrincipal, securityCredentials);
@@ -88,13 +90,47 @@ public class InitialContextFactory {
}
/**
+ * Create context
+ *
+ * @param initialContextFactory used to set the property {@link
Context#INITIAL_CONTEXT_FACTORY}
+ * @param providerUrl used to set the property {@link Context#PROVIDER_URL}
+ * @param useAuth set true if security is to be used.
+ * @param securityPrincipal used to set the property {@link
Context#SECURITY_PRINCIPAL}
+ * @param securityCredentials used to set the property {@link
Context#SECURITY_CREDENTIALS}
+ * @return the context, never null
+ * @throws NamingException
+ */
+ private static Context lookupContextNoCache(String initialContextFactory,
+ String providerUrl, boolean useAuth, String securityPrincipal,
String securityCredentials) throws NamingException {
+ Properties props = new Properties();
+ props.setProperty(Context.INITIAL_CONTEXT_FACTORY,
initialContextFactory);
+ props.setProperty(Context.PROVIDER_URL, providerUrl);
+ if (useAuth && securityPrincipal != null && securityCredentials != null
+ && securityPrincipal.length() > 0 &&
securityCredentials.length() > 0) {
+ props.setProperty(Context.SECURITY_PRINCIPAL, securityPrincipal);
+ props.setProperty(Context.SECURITY_CREDENTIALS,
securityCredentials);
+ log.info("authentication properties set");
+ }
+ try {
+ return new InitialContext(props);
+ } catch (NoClassDefFoundError e){
+ throw new NamingException(e.toString());
+ } catch (Exception e) {
+ throw new NamingException(e.toString());
+ }
+ }
+
+
+ /**
* Create cache key
* @param initialContextFactory
* @param providerUrl
* @param securityPrincipal
* @param securityCredentials
* @return
+ *@deprecated No more caching of {@link Context}s
*/
+ @Deprecated
private static String createKey(String initialContextFactory,
String providerUrl, String securityPrincipal,
String securityCredentials) {
@@ -138,13 +174,15 @@ public class InitialContextFactory {
throw new NamingException(e.toString());
}
} else {
- return lookupContext(initialContextFactory, providerUrl, useAuth,
securityPrincipal, securityCredentials);
+ return lookupContextNoCache(initialContextFactory, providerUrl,
useAuth, securityPrincipal, securityCredentials);
}
}
/**
* clear all the InitialContext objects.
+ * @deprecated No more caching of {@link Context}s
*/
+ @Deprecated
public static void close() {
for (Context ctx : MAP.values()) {
try {
Modified:
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/client/Publisher.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/client/Publisher.java?rev=1185853&r1=1185852&r2=1185853&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/client/Publisher.java
(original)
+++
jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/client/Publisher.java
Tue Oct 18 20:58:08 2011
@@ -176,5 +176,6 @@ public class Publisher implements Closea
Utils.close(producer, log);
Utils.close(session, log);
Utils.close(connection, log);
+ Utils.close(ctx, log);
}
}
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=1185853&r1=1185852&r2=1185853&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
Tue Oct 18 20:58:08 2011
@@ -154,8 +154,9 @@ public class ReceiveSubscriber implement
String durableSubscriptionId, String clientId, String jmsSelector,
boolean useAuth,
String securityPrincipal, String securityCredentials, boolean
useMessageListener) throws NamingException, JMSException {
boolean initSuccess = false;
+ Context ctx = null;
try{
- Context ctx = InitialContextFactory.getContext(useProps,
+ ctx = InitialContextFactory.getContext(useProps,
initialContextFactory, providerUrl, useAuth,
securityPrincipal, securityCredentials);
CONN = Utils.getConnection(ctx, connfactory);
if(!isEmpty(clientId)) {
@@ -181,6 +182,7 @@ public class ReceiveSubscriber implement
if(!initSuccess) {
close();
}
+ Utils.close(ctx, log);
}
}
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=1185853&r1=1185852&r2=1185853&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
Tue Oct 18 20:58:08 2011
@@ -26,19 +26,16 @@ import javax.jms.JMSException;
import javax.jms.Message;
import javax.naming.NamingException;
-import org.apache.jorphan.io.TextFile;
-import org.apache.jmeter.samplers.SampleResult;
-import org.apache.jmeter.services.FileServer;
-import org.apache.jmeter.testelement.TestListener;
-import org.apache.jmeter.util.JMeterUtils;
import org.apache.jmeter.engine.event.LoopIterationEvent;
-
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.jmeter.protocol.jms.control.gui.JMSPublisherGui;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.jmeter.services.FileServer;
+import org.apache.jmeter.testelement.TestListener;
+import org.apache.jmeter.util.JMeterUtils;
+import org.apache.jorphan.io.TextFile;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;
@@ -97,7 +94,6 @@ 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=1185853&r1=1185852&r2=1185853&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 Oct 18 20:58:08 2011
@@ -27,7 +27,6 @@ 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;
@@ -415,7 +414,7 @@ public class SubscriberSampler extends B
* {@inheritDoc}
*/
public void testEnded() {
- InitialContextFactory.close();
+ // NOOP
}
/**
Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1185853&r1=1185852&r2=1185853&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Tue Oct 18 20:58:08 2011
@@ -97,6 +97,7 @@ Mirror server now uses default port 8081
<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>
+<li>Bug 52044 - JMS Subscriber used with many threads leads to
javax.naming.NamingException: Something already bound with ActiveMQ</li>
</ul>
<h3>Controllers</h3>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]