You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by ehsavoie <gi...@git.apache.org> on 2018/11/05 15:49:08 UTC
[GitHub] activemq-artemis pull request #2416: [ARTEMIS-2163]: Classloading issue if a...
GitHub user ehsavoie opened a pull request:
https://github.com/apache/activemq-artemis/pull/2416
[ARTEMIS-2163]: Classloading issue if artemis-commons is not in the same classloader as artemis-client-* or artemis-server.
* Setting TCCL to be able to load classes via ClassLoadingUtil with artemis-commons in a different classloader.
JIRA: https://issues.apache.org/jira/browse/ARTEMIS-2163
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/ehsavoie/apache-activemq-artemis ARTEMIS-2163
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/activemq-artemis/pull/2416.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #2416
----
commit 10b75a8963fa440f2e16f0c28deefb22115e8b04
Author: Emmanuel Hugonnet <em...@...>
Date: 2018-11-05T15:42:21Z
[ARTEMIS-2163]: Classloading issue if artemis-commons is not in the same classloader as artemis-client-* or artemis-server.
* Setting TCCL to be able to load classes via ClassLoadingUtil with artemis-commons in a different classloader.
JIRA: https://issues.apache.org/jira/browse/ARTEMIS-2163
----
---
[GitHub] activemq-artemis pull request #2416: [ARTEMIS-2163]: Classloading issue if a...
Posted by asfgit <gi...@git.apache.org>.
Github user asfgit closed the pull request at:
https://github.com/apache/activemq-artemis/pull/2416
---
[GitHub] activemq-artemis pull request #2416: [ARTEMIS-2163]: Classloading issue if a...
Posted by clebertsuconic <gi...@git.apache.org>.
Github user clebertsuconic commented on a diff in the pull request:
https://github.com/apache/activemq-artemis/pull/2416#discussion_r233539372
--- Diff: artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionFactoryImpl.java ---
@@ -982,7 +982,13 @@ protected ConnectorFactory instantiateConnectorFactory(final String connectorFac
return AccessController.doPrivileged(new PrivilegedAction<ConnectorFactory>() {
@Override
public ConnectorFactory run() {
- return (ConnectorFactory) ClassloadingUtil.newInstanceFromClassLoader(connectorFactoryClassName);
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
--- End diff --
@ehsavoie can you amend it then?
---
[GitHub] activemq-artemis pull request #2416: [ARTEMIS-2163]: Classloading issue if a...
Posted by clebertsuconic <gi...@git.apache.org>.
Github user clebertsuconic commented on a diff in the pull request:
https://github.com/apache/activemq-artemis/pull/2416#discussion_r233483727
--- Diff: artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionFactoryImpl.java ---
@@ -982,7 +982,13 @@ protected ConnectorFactory instantiateConnectorFactory(final String connectorFac
return AccessController.doPrivileged(new PrivilegedAction<ConnectorFactory>() {
@Override
public ConnectorFactory run() {
- return (ConnectorFactory) ClassloadingUtil.newInstanceFromClassLoader(connectorFactoryClassName);
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
--- End diff --
Couldn't you change ClassLoadingUtil as
```java
public static Object newInstanceFromClassLoader(final String className) {
return newInstanceFromClassLoader(ClassloadingUtil.class, className);
}
public static Object newInstanceFromClassLoader(Class classOwner, final String className) {
ClassLoader loader = classOwner.getClassLoader();
try {
Class<?> clazz = loader.loadClass(className);
return clazz.newInstance();
} catch (Throwable t) {
if (t instanceof InstantiationException) {
System.out.println(INSTANTIATION_EXCEPTION_MESSAGE);
}
loader = Thread.currentThread().getContextClassLoader();
if (loader == null)
throw new RuntimeException("No local context classloader", t);
try {
return loader.loadClass(className).newInstance();
} catch (InstantiationException e) {
throw new RuntimeException(INSTANTIATION_EXCEPTION_MESSAGE + " " + className, e);
} catch (ClassNotFoundException e) {
throw new IllegalStateException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}
```
and pass in the class parameter on these cases?
Or would this have issues with Security on the JDK?
If there are no issues I would prefer the parameter added?
---
[GitHub] activemq-artemis pull request #2416: [ARTEMIS-2163]: Classloading issue if a...
Posted by ehsavoie <gi...@git.apache.org>.
Github user ehsavoie commented on a diff in the pull request:
https://github.com/apache/activemq-artemis/pull/2416#discussion_r233576260
--- Diff: artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionFactoryImpl.java ---
@@ -982,7 +982,13 @@ protected ConnectorFactory instantiateConnectorFactory(final String connectorFac
return AccessController.doPrivileged(new PrivilegedAction<ConnectorFactory>() {
@Override
public ConnectorFactory run() {
- return (ConnectorFactory) ClassloadingUtil.newInstanceFromClassLoader(connectorFactoryClassName);
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
--- End diff --
done
---
[GitHub] activemq-artemis pull request #2416: [ARTEMIS-2163]: Classloading issue if a...
Posted by ehsavoie <gi...@git.apache.org>.
Github user ehsavoie commented on a diff in the pull request:
https://github.com/apache/activemq-artemis/pull/2416#discussion_r233531108
--- Diff: artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionFactoryImpl.java ---
@@ -982,7 +982,13 @@ protected ConnectorFactory instantiateConnectorFactory(final String connectorFac
return AccessController.doPrivileged(new PrivilegedAction<ConnectorFactory>() {
@Override
public ConnectorFactory run() {
- return (ConnectorFactory) ClassloadingUtil.newInstanceFromClassLoader(connectorFactoryClassName);
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
--- End diff --
No problem there
---