Repository: activemq-artemis Updated Branches: refs/heads/2.6.x 41e79470a -> b52f3afe8
[ARTEMIS-2163]: Classloading issue if artemis-commons is not in the same classloader as artemis-client-* or artemis-server. * Passing the owner class to define the classloader to load classes via ClassLoadingUtil with artemis-commons in a different classloader.. JIRA: https://issues.apache.org/jira/browse/ARTEMIS-2163 (cherry picked from commit 80525f1c9165fde93fd3b0c73b77ff66fd02d1cb) Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/b52f3afe Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/b52f3afe Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/b52f3afe Branch: refs/heads/2.6.x Commit: b52f3afe88d53ed084e83ea8347024310cd884c8 Parents: 41e7947 Author: Emmanuel Hugonnet <emmanuel.hugonnet+gitkra...@gmail.com> Authored: Mon Nov 5 16:42:21 2018 +0100 Committer: Clebert Suconic <clebertsuco...@apache.org> Committed: Thu Nov 15 09:59:42 2018 -0500 ---------------------------------------------------------------------- .../apache/activemq/artemis/utils/ClassloadingUtil.java | 12 ++++++++++-- .../core/client/impl/ClientSessionFactoryImpl.java | 2 +- .../artemis/core/client/impl/ServerLocatorImpl.java | 6 +++--- .../core/remoting/impl/TransportConfigurationUtil.java | 2 +- .../artemis/jms/client/ActiveMQConnectionFactory.java | 2 +- .../core/deployers/impl/FileConfigurationParser.java | 4 ++-- 6 files changed, 18 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b52f3afe/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/ClassloadingUtil.java ---------------------------------------------------------------------- diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/ClassloadingUtil.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/ClassloadingUtil.java index 9ea1b61..99c39e0 100644 --- a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/ClassloadingUtil.java +++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/ClassloadingUtil.java @@ -35,7 +35,11 @@ public final class ClassloadingUtil { private static final String INSTANTIATION_EXCEPTION_MESSAGE = "Your class must have a constructor without arguments. If it is an inner class, it must be static!"; public static Object newInstanceFromClassLoader(final String className) { - ClassLoader loader = ClassloadingUtil.class.getClassLoader(); + return newInstanceFromClassLoader(ClassloadingUtil.class, className); + } + + public static Object newInstanceFromClassLoader(final Class<?> classOwner, final String className) { + ClassLoader loader = classOwner.getClassLoader(); try { Class<?> clazz = loader.loadClass(className); return clazz.newInstance(); @@ -60,7 +64,11 @@ public final class ClassloadingUtil { } public static Object newInstanceFromClassLoader(final String className, Object... objs) { - ClassLoader loader = ClassloadingUtil.class.getClassLoader(); + return newInstanceFromClassLoader(ClassloadingUtil.class, className, objs); + } + + public static Object newInstanceFromClassLoader(final Class<?> classOwner, final String className, Object... objs) { + ClassLoader loader = classOwner.getClassLoader(); try { Class<?>[] parametersType = new Class<?>[objs.length]; for (int i = 0; i < objs.length; i++) { http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b52f3afe/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionFactoryImpl.java ---------------------------------------------------------------------- diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionFactoryImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionFactoryImpl.java index daac8f3..b135677 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionFactoryImpl.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionFactoryImpl.java @@ -982,7 +982,7 @@ public class ClientSessionFactoryImpl implements ClientSessionFactoryInternal, C return AccessController.doPrivileged(new PrivilegedAction<ConnectorFactory>() { @Override public ConnectorFactory run() { - return (ConnectorFactory) ClassloadingUtil.newInstanceFromClassLoader(connectorFactoryClassName); + return (ConnectorFactory) ClassloadingUtil.newInstanceFromClassLoader(ClientSessionFactoryImpl.class, connectorFactoryClassName); } }); } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b52f3afe/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ServerLocatorImpl.java ---------------------------------------------------------------------- diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ServerLocatorImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ServerLocatorImpl.java index 972c9c7..856affd 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ServerLocatorImpl.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ServerLocatorImpl.java @@ -278,8 +278,8 @@ public final class ServerLocatorImpl implements ServerLocatorInternal, Discovery AccessController.doPrivileged(new PrivilegedAction<Object>() { @Override public Object run() { - loadBalancingPolicy = (ConnectionLoadBalancingPolicy) ClassloadingUtil.newInstanceFromClassLoader(connectionLoadBalancingPolicyClassName); - return null; + loadBalancingPolicy = (ConnectionLoadBalancingPolicy) ClassloadingUtil.newInstanceFromClassLoader(ServerLocatorImpl.class, connectionLoadBalancingPolicyClassName); + return null; } }); } @@ -1888,7 +1888,7 @@ public final class ServerLocatorImpl implements ServerLocatorInternal, Discovery String[] arrayInterceptor = interceptorList.split(","); for (String strValue : arrayInterceptor) { - Interceptor interceptor = (Interceptor) ClassloadingUtil.newInstanceFromClassLoader(strValue.trim()); + Interceptor interceptor = (Interceptor) ClassloadingUtil.newInstanceFromClassLoader(ServerLocatorImpl.class, strValue.trim()); interceptors.add(interceptor); } return null; http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b52f3afe/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/TransportConfigurationUtil.java ---------------------------------------------------------------------- diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/TransportConfigurationUtil.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/TransportConfigurationUtil.java index c6d8a5f..33bfbac 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/TransportConfigurationUtil.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/TransportConfigurationUtil.java @@ -65,7 +65,7 @@ public class TransportConfigurationUtil { @Override public Object run() { try { - return ClassloadingUtil.newInstanceFromClassLoader(className); + return ClassloadingUtil.newInstanceFromClassLoader(TransportConfigurationUtil.class, className); } catch (IllegalStateException e) { return null; } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b52f3afe/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnectionFactory.java ---------------------------------------------------------------------- diff --git a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnectionFactory.java b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnectionFactory.java index 364862b..ac0f8eb 100644 --- a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnectionFactory.java +++ b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnectionFactory.java @@ -152,7 +152,7 @@ public class ActiveMQConnectionFactory extends JNDIStorable implements Connectio AccessController.doPrivileged(new PrivilegedAction<Object>() { @Override public Object run() { - ClientProtocolManagerFactory protocolManagerFactory = (ClientProtocolManagerFactory) ClassloadingUtil.newInstanceFromClassLoader(protocolManagerFactoryStr); + ClientProtocolManagerFactory protocolManagerFactory = (ClientProtocolManagerFactory) ClassloadingUtil.newInstanceFromClassLoader(ActiveMQConnectionFactory.class, protocolManagerFactoryStr); serverLocator.setProtocolManagerFactory(protocolManagerFactory); return null; } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/b52f3afe/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java index e8da069..3ffa6ed 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java @@ -707,7 +707,7 @@ public final class FileConfigurationParser extends XMLConfigurationUtil { ActiveMQServerPlugin serverPlugin = AccessController.doPrivileged(new PrivilegedAction<ActiveMQServerPlugin>() { @Override public ActiveMQServerPlugin run() { - return (ActiveMQServerPlugin) ClassloadingUtil.newInstanceFromClassLoader(clazz); + return (ActiveMQServerPlugin) ClassloadingUtil.newInstanceFromClassLoader(FileConfigurationParser.class, clazz); } }); @@ -910,7 +910,7 @@ public final class FileConfigurationParser extends XMLConfigurationUtil { SecuritySettingPlugin securitySettingPlugin = AccessController.doPrivileged(new PrivilegedAction<SecuritySettingPlugin>() { @Override public SecuritySettingPlugin run() { - return (SecuritySettingPlugin) ClassloadingUtil.newInstanceFromClassLoader(clazz); + return (SecuritySettingPlugin) ClassloadingUtil.newInstanceFromClassLoader(FileConfigurationParser.class, clazz); } });