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



---