[GitHub] activemq-artemis pull request #2416: [ARTEMIS-2163]: Classloading issue if a...

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

[GitHub] activemq-artemis pull request #2416: [ARTEMIS-2163]: Classloading issue if a...

jbertram-2
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 <emmanuel.hugonnet+gitkraken@...>
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

----


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] activemq-artemis pull request #2416: [ARTEMIS-2163]: Classloading issue if a...

jbertram-2
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?


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] activemq-artemis pull request #2416: [ARTEMIS-2163]: Classloading issue if a...

jbertram-2
In reply to this post by jbertram-2
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



---
Reply | Threaded
Open this post in threaded view
|

[GitHub] activemq-artemis pull request #2416: [ARTEMIS-2163]: Classloading issue if a...

jbertram-2
In reply to this post by jbertram-2
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?


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] activemq-artemis pull request #2416: [ARTEMIS-2163]: Classloading issue if a...

jbertram-2
In reply to this post by jbertram-2
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


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] activemq-artemis pull request #2416: [ARTEMIS-2163]: Classloading issue if a...

jbertram-2
In reply to this post by jbertram-2
Github user asfgit closed the pull request at:

    https://github.com/apache/activemq-artemis/pull/2416


---