Re: svn commit: r1185853 - in /jakarta/jmeter/trunk: src/protocol/jms/org/apache/jmeter/protocol/jms/ src/protocol/jms/org/apache/jmeter/protocol/jms/client/ src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/ xdocs/

sebb <[email protected]> Wed, 19 Oct 2011 06:52:44 +0100
Newsgroups gmane.comp.jakarta.cactus.devel
Message-ID <CAOGo0Va-txXKf=K0+qoEseViz3j1HuT75qrn9CtMMKODTb03dw@mail.gmail.com>
On 18 October 2011 21:58,  <[email protected]> wrote:
> Author: pmouawad
> Date: Tue Oct 18 20:58:08 2011
> New Revision: 1185853
>
> URL: http://svn.apache.org/viewvc?rev=3D1185853&view=3Drev
> Log:
> Bug 52044 - JMS Subscriber used with many threads leads to javax.naming.N=
amingException: Something already bound with ActiveMQ
>
> Performances impact of No Caching of InitialContext are low.

-1

I now think this is the wrong solution, and could have a negative impact.

Please revert these changes; we need to discuss further on the dev list.

> Modified:
> =A0 =A0jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/j=
ms/Utils.java
> =A0 =A0jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/j=
ms/client/InitialContextFactory.java
> =A0 =A0jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/j=
ms/client/Publisher.java
> =A0 =A0jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/j=
ms/client/ReceiveSubscriber.java
> =A0 =A0jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/j=
ms/sampler/PublisherSampler.java
> =A0 =A0jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/j=
ms/sampler/SubscriberSampler.java
> =A0 =A0jakarta/jmeter/trunk/xdocs/changes.xml
>
> Modified: jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protoco=
l/jms/Utils.java
> URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jms/o=
rg/apache/jmeter/protocol/jms/Utils.java?rev=3D1185853&r1=3D1185852&r2=3D11=
85853&view=3Ddiff
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> --- 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;
> =A0*/
> =A0public final class Utils {
>
> + =A0 =A0/**
> + =A0 =A0 * Close context
> + =A0 =A0 * @param closeable {@link Context}
> + =A0 =A0 * @param log {@link Logger}
> + =A0 =A0 */
> + =A0 =A0public static void close(Context closeable, Logger log) {
> + =A0 =A0 =A0 =A0if (closeable !=3D null){
> + =A0 =A0 =A0 =A0 =A0 =A0try {
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0closeable.close();
> + =A0 =A0 =A0 =A0 =A0 =A0} catch (Exception e) {
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0log.error("Error during close: ", e);
> + =A0 =A0 =A0 =A0 =A0 =A0}
> + =A0 =A0 =A0 =A0}
> + =A0 =A0}
> +
> =A0 =A0 public static void close(MessageConsumer closeable, Logger log){
> =A0 =A0 =A0 =A0 if (closeable !=3D null){
> =A0 =A0 =A0 =A0 =A0 =A0 try {
> @@ -162,5 +177,4 @@ public final class Utils {
> =A0 =A0 =A0 =A0 }
> =A0 =A0 =A0 =A0 throw new NamingException("Expected javax.jms.ConnectionF=
actory, found "+objfac.getClass().getName());
> =A0 =A0 }
> -
> =A0}
>
> Modified: jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protoco=
l/jms/client/InitialContextFactory.java
> URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jms/o=
rg/apache/jmeter/protocol/jms/client/InitialContextFactory.java?rev=3D11858=
53&r1=3D1185852&r2=3D1185853&view=3Ddiff
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> --- 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 {
> =A0 =A0 =A0* @param securityCredentials used to set the property {@link C=
ontext#SECURITY_CREDENTIALS}
> =A0 =A0 =A0* @return the context, never null
> =A0 =A0 =A0* @throws NamingException
> + =A0 =A0 * @{@link Deprecated} =A0No more caching of {@link Context}s
> =A0 =A0 =A0*/
> + =A0 =A0@Deprecated
> =A0 =A0 public static Context lookupContext(String initialContextFactory,
> =A0 =A0 =A0 =A0 =A0 =A0 String providerUrl, boolean useAuth, String secur=
ityPrincipal, String securityCredentials) throws NamingException {
> =A0 =A0 =A0 =A0 String cacheKey =3D createKey(initialContextFactory ,prov=
iderUrl, securityPrincipal, securityCredentials);
> @@ -88,13 +90,47 @@ public class InitialContextFactory {
> =A0 =A0 }
>
> =A0 =A0 /**
> + =A0 =A0 * Create context
> + =A0 =A0 *
> + =A0 =A0 * @param initialContextFactory used to set the property {@link =
Context#INITIAL_CONTEXT_FACTORY}
> + =A0 =A0 * @param providerUrl used to set the property {@link Context#PR=
OVIDER_URL}
> + =A0 =A0 * @param useAuth set true if security is to be used.
> + =A0 =A0 * @param securityPrincipal used to set the property {@link Cont=
ext#SECURITY_PRINCIPAL}
> + =A0 =A0 * @param securityCredentials used to set the property {@link Co=
ntext#SECURITY_CREDENTIALS}
> + =A0 =A0 * @return the context, never null
> + =A0 =A0 * @throws NamingException
> + =A0 =A0 */
> + =A0 =A0private static Context lookupContextNoCache(String initialContex=
tFactory,
> + =A0 =A0 =A0 =A0 =A0 =A0String providerUrl, boolean useAuth, String secu=
rityPrincipal, String securityCredentials) throws NamingException {
> + =A0 =A0 =A0 =A0Properties props =3D new Properties();
> + =A0 =A0 =A0 =A0props.setProperty(Context.INITIAL_CONTEXT_FACTORY, initi=
alContextFactory);
> + =A0 =A0 =A0 =A0props.setProperty(Context.PROVIDER_URL, providerUrl);
> + =A0 =A0 =A0 =A0if (useAuth && securityPrincipal !=3D null && securityCr=
edentials !=3D null
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0&& securityPrincipal.length() > 0 && sec=
urityCredentials.length() > 0) {
> + =A0 =A0 =A0 =A0 =A0 =A0props.setProperty(Context.SECURITY_PRINCIPAL, se=
curityPrincipal);
> + =A0 =A0 =A0 =A0 =A0 =A0props.setProperty(Context.SECURITY_CREDENTIALS, =
securityCredentials);
> + =A0 =A0 =A0 =A0 =A0 =A0log.info("authentication properties set");
> + =A0 =A0 =A0 =A0}
> + =A0 =A0 =A0 =A0try {
> + =A0 =A0 =A0 =A0 =A0 =A0return new InitialContext(props);
> + =A0 =A0 =A0 =A0} catch (NoClassDefFoundError e){
> + =A0 =A0 =A0 =A0 =A0 =A0throw new NamingException(e.toString());
> + =A0 =A0 =A0 =A0} catch (Exception e) {
> + =A0 =A0 =A0 =A0 =A0 =A0throw new NamingException(e.toString());
> + =A0 =A0 =A0 =A0}
> + =A0 =A0}
> +
> +
> + =A0 =A0/**
> =A0 =A0 =A0* Create cache key
> =A0 =A0 =A0* @param initialContextFactory
> =A0 =A0 =A0* @param providerUrl
> =A0 =A0 =A0* @param securityPrincipal
> =A0 =A0 =A0* @param securityCredentials
> =A0 =A0 =A0* @return
> + =A0 =A0 *@deprecated No more caching of {@link Context}s
> =A0 =A0 =A0*/
> + =A0 =A0@Deprecated
> =A0 =A0 private static String createKey(String initialContextFactory,
> =A0 =A0 =A0 =A0 =A0 =A0 String providerUrl, String securityPrincipal,
> =A0 =A0 =A0 =A0 =A0 =A0 String securityCredentials) {
> @@ -138,13 +174,15 @@ public class InitialContextFactory {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 throw new NamingException(e.toString());
> =A0 =A0 =A0 =A0 =A0 =A0 }
> =A0 =A0 =A0 =A0 } else {
> - =A0 =A0 =A0 =A0 =A0 =A0return lookupContext(initialContextFactory, prov=
iderUrl, useAuth, securityPrincipal, securityCredentials);
> + =A0 =A0 =A0 =A0 =A0 =A0return lookupContextNoCache(initialContextFactor=
y, providerUrl, useAuth, securityPrincipal, securityCredentials);
> =A0 =A0 =A0 =A0 }
> =A0 =A0 }
>
> =A0 =A0 /**
> =A0 =A0 =A0* clear all the InitialContext objects.
> + =A0 =A0 * @deprecated No more caching of {@link Context}s
> =A0 =A0 =A0*/
> + =A0 =A0@Deprecated
> =A0 =A0 public static void close() {
> =A0 =A0 =A0 =A0 for (Context ctx : MAP.values()) {
> =A0 =A0 =A0 =A0 =A0 =A0 try {
>
> Modified: jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protoco=
l/jms/client/Publisher.java
> URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jms/o=
rg/apache/jmeter/protocol/jms/client/Publisher.java?rev=3D1185853&r1=3D1185=
852&r2=3D1185853&view=3Ddiff
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> --- 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
> =A0 =A0 =A0 =A0 Utils.close(producer, log);
> =A0 =A0 =A0 =A0 Utils.close(session, log);
> =A0 =A0 =A0 =A0 Utils.close(connection, log);
> + =A0 =A0 =A0 =A0Utils.close(ctx, log);
> =A0 =A0 }
> =A0}
>
> Modified: jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protoco=
l/jms/client/ReceiveSubscriber.java
> URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jms/o=
rg/apache/jmeter/protocol/jms/client/ReceiveSubscriber.java?rev=3D1185853&r=
1=3D1185852&r2=3D1185853&view=3Ddiff
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> --- 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
> =A0 =A0 =A0 =A0 =A0 =A0 String durableSubscriptionId, String clientId, St=
ring jmsSelector, boolean useAuth,
> =A0 =A0 =A0 =A0 =A0 =A0 String securityPrincipal, String securityCredenti=
als, boolean useMessageListener) throws NamingException, JMSException {
> =A0 =A0 =A0 =A0 boolean initSuccess =3D false;
> + =A0 =A0 =A0 =A0Context ctx =3D null;
> =A0 =A0 =A0 =A0 try{
> - =A0 =A0 =A0 =A0 =A0 =A0Context ctx =3D InitialContextFactory.getContext=
(useProps,
> + =A0 =A0 =A0 =A0 =A0 =A0ctx =3D InitialContextFactory.getContext(useProp=
s,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 initialContextFactory, providerUr=
l, useAuth, securityPrincipal, securityCredentials);
> =A0 =A0 =A0 =A0 =A0 =A0 CONN =3D Utils.getConnection(ctx, connfactory);
> =A0 =A0 =A0 =A0 =A0 =A0 if(!isEmpty(clientId)) {
> @@ -181,6 +182,7 @@ public class ReceiveSubscriber implement
> =A0 =A0 =A0 =A0 =A0 =A0 if(!initSuccess) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 close();
> =A0 =A0 =A0 =A0 =A0 =A0 }
> + =A0 =A0 =A0 =A0 =A0 =A0Utils.close(ctx, log);
> =A0 =A0 =A0 =A0 }
> =A0 =A0 }
>
>
> Modified: jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protoco=
l/jms/sampler/PublisherSampler.java
> URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jms/o=
rg/apache/jmeter/protocol/jms/sampler/PublisherSampler.java?rev=3D1185853&r=
1=3D1185852&r2=3D1185853&view=3Ddiff
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> --- 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;
> =A0import javax.jms.Message;
> =A0import 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;
> =A0import org.apache.jmeter.engine.event.LoopIterationEvent;
> -
> =A0import org.apache.jmeter.protocol.jms.Utils;
> -import org.apache.jmeter.protocol.jms.control.gui.JMSPublisherGui;
> =A0import org.apache.jmeter.protocol.jms.client.ClientPool;
> -import org.apache.jmeter.protocol.jms.client.InitialContextFactory;
> =A0import 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;
> =A0import org.apache.jorphan.logging.LoggingManager;
> =A0import org.apache.log.Logger;
>
> @@ -97,7 +94,6 @@ public class PublisherSampler extends Ba
> =A0 =A0 public void testEnded() {
> =A0 =A0 =A0 =A0 log.debug("PublisherSampler.testEnded called");
> =A0 =A0 =A0 =A0 ClientPool.clearClient();
> - =A0 =A0 =A0 =A0InitialContextFactory.close();
> =A0 =A0 }
>
> =A0 =A0 public void testStarted() {
>
> Modified: jakarta/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protoco=
l/jms/sampler/SubscriberSampler.java
> URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/jms/o=
rg/apache/jmeter/protocol/jms/sampler/SubscriberSampler.java?rev=3D1185853&=
r1=3D1185852&r2=3D1185853&view=3Ddiff
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> --- 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;
>
> =A0import org.apache.jmeter.engine.event.LoopIterationEvent;
> =A0import org.apache.jmeter.protocol.jms.Utils;
> -import org.apache.jmeter.protocol.jms.client.InitialContextFactory;
> =A0import org.apache.jmeter.protocol.jms.client.ReceiveSubscriber;
> =A0import org.apache.jmeter.protocol.jms.control.gui.JMSSubscriberGui;
> =A0import org.apache.jmeter.samplers.Interruptible;
> @@ -415,7 +414,7 @@ public class SubscriberSampler extends B
> =A0 =A0 =A0* {@inheritDoc}
> =A0 =A0 =A0*/
> =A0 =A0 public void testEnded() {
> - =A0 =A0 =A0 =A0InitialContextFactory.close();
> + =A0 =A0 =A0 =A0// NOOP
> =A0 =A0 }
>
> =A0 =A0 /**
>
> Modified: jakarta/jmeter/trunk/xdocs/changes.xml
> URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?=
rev=3D1185853&r1=3D1185852&r2=3D1185853&view=3Ddiff
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> --- 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
> =A0<li>Bug 51996 - JMS Initial Context leak newly created Context when Mu=
ltiple Thread enter InitialContextFactory#lookupContext at the same time</l=
i>
> =A0<li>Bug 51691 - Authorization does not work for JMS Publisher and JMS =
Subscriber</li>
> =A0<li>Bug 52036 - Durable Subscription fails with ActiveMQ due to missin=
g clientId field</li>
> +<li>Bug 52044 - JMS Subscriber used with many threads leads to javax.nam=
ing.NamingException: Something already bound with ActiveMQ</li>
> =A0</ul>
>
> =A0<h3>Controllers</h3>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>