Details

    • Type: Improvement Improvement
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 1.5.5, 1.6.0
    • Component/s: None
    • Labels:
      None

      Description

      Currently Axis2 follows the parent first class loading for service and module loading.

      The reason for this is it uses DeploymentClassLoader loader which is extended from the ClassLoader class.

      The loadClass method of the ClassLoader class looks like this.

      protected synchronized Class<?> loadClass(String name, boolean resolve)
      throws ClassNotFoundException
      {
      // First, check if the class has already been loaded
      Class c = findLoadedClass(name);
      if (c == null) {
      try {
      if (parent != null)

      { c = parent.loadClass(name, false); }

      else

      { c = findBootstrapClass0(name); }

      } catch (ClassNotFoundException e)

      { // If still not found, then invoke findClass in order // to find the class. c = findClass(name); }

      }
      if (resolve)

      { resolveClass(c); }

      return c;
      }

      it first check for parent class loader classes and then for its classes. So we can add child first class loading simply reversing this order in a override loadClass method as follows.

      protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {

      Class c = findLoadedClass(name);
      if (c == null) {
      try

      { c = findClass(name); }

      catch (Exception e)

      { c = super.loadClass(name, resolve); }

      }
      return c;
      }

      1. child_first_class_loading.patch
        0.7 kB
        Amila Chinthaka Suriarachchi
      2. classloaderpatch.txt
        20 kB
        Amila Chinthaka Suriarachchi

        Issue Links

          Activity

          Hide
          Amila Chinthaka Suriarachchi added a comment -

          patch for review.

          Show
          Amila Chinthaka Suriarachchi added a comment - patch for review.
          Hide
          Amila Chinthaka Suriarachchi added a comment -

          attach a patch so that child first class loading can be set using axis2.xml parameter level.

          Show
          Amila Chinthaka Suriarachchi added a comment - attach a patch so that child first class loading can be set using axis2.xml parameter level.
          Hide
          Deepal Jayasinghe added a comment -

          go for it.

          Show
          Deepal Jayasinghe added a comment - go for it.
          Hide
          Andreas Veithen added a comment -

          This was actually implemented by r776555 and r776612.

          Show
          Andreas Veithen added a comment - This was actually implemented by r776555 and r776612.
          Hide
          Andreas Veithen added a comment -

          Merged this to the 1.5 branch because it helps improving support of Axis2 on WAS 7.0.

          Show
          Andreas Veithen added a comment - Merged this to the 1.5 branch because it helps improving support of Axis2 on WAS 7.0.
          Hide
          Hudson added a comment -

          SUCCESS: Integrated in Axis2 #3571 (See https://builds.apache.org/job/Axis2/3571/)
          AXIS2-5792: Use the same class loaders on Windows as on Unix, to make EnableChildFirstClassLoading work (AXIS2-4349 only implementd that feature for Unix). This effectively reverts the change implemented in AXIS2-4072 and instead levarages the fact that on recent Java versions, URLClassLoader has a close() method. (veithen: rev 1751057)

          • axis2/modules/kernel/src/org/apache/axis2/classloader/AbstractResourceHandle.java
          • axis2/modules/kernel/src/org/apache/axis2/classloader/AbstractUrlResourceLocation.java
          • axis2/modules/kernel/src/org/apache/axis2/classloader/DirectoryResourceHandle.java
          • axis2/modules/kernel/src/org/apache/axis2/classloader/DirectoryResourceLocation.java
          • axis2/modules/kernel/src/org/apache/axis2/classloader/IoUtil.java
          • axis2/modules/kernel/src/org/apache/axis2/classloader/JarFileClassLoader.java
          • axis2/modules/kernel/src/org/apache/axis2/classloader/JarFileUrlConnection.java
          • axis2/modules/kernel/src/org/apache/axis2/classloader/JarFileUrlStreamHandler.java
          • axis2/modules/kernel/src/org/apache/axis2/classloader/JarResourceHandle.java
          • axis2/modules/kernel/src/org/apache/axis2/classloader/JarResourceLocation.java
          • axis2/modules/kernel/src/org/apache/axis2/classloader/JarStreamHandlerFactory.java
          • axis2/modules/kernel/src/org/apache/axis2/classloader/ResourceEnumeration.java
          • axis2/modules/kernel/src/org/apache/axis2/classloader/ResourceFinder.java
          • axis2/modules/kernel/src/org/apache/axis2/classloader/ResourceHandle.java
          • axis2/modules/kernel/src/org/apache/axis2/classloader/ResourceLocation.java
          • axis2/modules/kernel/src/org/apache/axis2/classloader/UrlResourceFinder.java
          • axis2/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
          • axis2/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java
          • axis2/modules/kernel/test/org/apache/axis2/classloader
          Show
          Hudson added a comment - SUCCESS: Integrated in Axis2 #3571 (See https://builds.apache.org/job/Axis2/3571/ ) AXIS2-5792 : Use the same class loaders on Windows as on Unix, to make EnableChildFirstClassLoading work ( AXIS2-4349 only implementd that feature for Unix). This effectively reverts the change implemented in AXIS2-4072 and instead levarages the fact that on recent Java versions, URLClassLoader has a close() method. (veithen: rev 1751057) axis2/modules/kernel/src/org/apache/axis2/classloader/AbstractResourceHandle.java axis2/modules/kernel/src/org/apache/axis2/classloader/AbstractUrlResourceLocation.java axis2/modules/kernel/src/org/apache/axis2/classloader/DirectoryResourceHandle.java axis2/modules/kernel/src/org/apache/axis2/classloader/DirectoryResourceLocation.java axis2/modules/kernel/src/org/apache/axis2/classloader/IoUtil.java axis2/modules/kernel/src/org/apache/axis2/classloader/JarFileClassLoader.java axis2/modules/kernel/src/org/apache/axis2/classloader/JarFileUrlConnection.java axis2/modules/kernel/src/org/apache/axis2/classloader/JarFileUrlStreamHandler.java axis2/modules/kernel/src/org/apache/axis2/classloader/JarResourceHandle.java axis2/modules/kernel/src/org/apache/axis2/classloader/JarResourceLocation.java axis2/modules/kernel/src/org/apache/axis2/classloader/JarStreamHandlerFactory.java axis2/modules/kernel/src/org/apache/axis2/classloader/ResourceEnumeration.java axis2/modules/kernel/src/org/apache/axis2/classloader/ResourceFinder.java axis2/modules/kernel/src/org/apache/axis2/classloader/ResourceHandle.java axis2/modules/kernel/src/org/apache/axis2/classloader/ResourceLocation.java axis2/modules/kernel/src/org/apache/axis2/classloader/UrlResourceFinder.java axis2/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java axis2/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java axis2/modules/kernel/test/org/apache/axis2/classloader

            People

            • Assignee:
              Unassigned
              Reporter:
              Amila Chinthaka Suriarachchi
            • Votes:
              1 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development