You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by ve...@apache.org on 2016/07/02 12:57:12 UTC

svn commit: r1751057 - in /axis/axis2/java/core/trunk/modules/kernel: src/org/apache/axis2/classloader/ src/org/apache/axis2/deployment/ src/org/apache/axis2/deployment/util/ test/org/apache/axis2/classloader/

Author: veithen
Date: Sat Jul  2 12:57:12 2016
New Revision: 1751057

URL: http://svn.apache.org/viewvc?rev=1751057&view=rev
Log:
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. 

Removed:
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/classloader/AbstractResourceHandle.java
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/classloader/AbstractUrlResourceLocation.java
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/classloader/DirectoryResourceHandle.java
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/classloader/DirectoryResourceLocation.java
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/classloader/IoUtil.java
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/classloader/JarFileClassLoader.java
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/classloader/JarFileUrlConnection.java
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/classloader/JarFileUrlStreamHandler.java
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/classloader/JarResourceHandle.java
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/classloader/JarResourceLocation.java
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/classloader/JarStreamHandlerFactory.java
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/classloader/ResourceEnumeration.java
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/classloader/ResourceFinder.java
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/classloader/ResourceHandle.java
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/classloader/ResourceLocation.java
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/classloader/UrlResourceFinder.java
    axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/classloader/
Modified:
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
    axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java

Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java?rev=1751057&r1=1751056&r2=1751057&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java (original)
+++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java Sat Jul  2 12:57:12 2016
@@ -22,7 +22,6 @@ package org.apache.axis2.deployment;
 
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
-import org.apache.axis2.classloader.JarFileClassLoader;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.deployment.repository.util.ArchiveReader;
 import org.apache.axis2.deployment.repository.util.DeploymentFileData;
@@ -47,6 +46,7 @@ import org.apache.commons.logging.LogFac
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import java.io.BufferedReader;
+import java.io.Closeable;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -1156,19 +1156,23 @@ public abstract class DeploymentEngine i
         return (extensionMap != null) ? extensionMap.get(extension) : null;
     }
 
+    private static void destroyClassLoader(ClassLoader classLoader) {
+        if (classLoader instanceof DeploymentClassLoader && classLoader instanceof Closeable) {
+            try {
+                ((Closeable)classLoader).close();
+            } catch (IOException ex) {
+                log.warn("Failed to destroy class loader " + classLoader, ex);
+            }
+        }
+    }
+
     /**
      * Clean up the mess
      */
     public void cleanup() {
-        if (axisConfig.getModuleClassLoader() instanceof JarFileClassLoader) {
-            ((JarFileClassLoader) axisConfig.getModuleClassLoader()).destroy();
-        }
-        if (axisConfig.getServiceClassLoader() instanceof JarFileClassLoader) {
-            ((JarFileClassLoader) axisConfig.getServiceClassLoader()).destroy();
-        }
-        if (axisConfig.getSystemClassLoader() instanceof JarFileClassLoader) {
-            ((JarFileClassLoader) axisConfig.getSystemClassLoader()).destroy();
-        }
+        destroyClassLoader(axisConfig.getModuleClassLoader());
+        destroyClassLoader(axisConfig.getServiceClassLoader());
+        destroyClassLoader(axisConfig.getSystemClassLoader());
         if (scheduler != null) {
             scheduler.cleanup(schedulerTask);
         }

Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java?rev=1751057&r1=1751056&r2=1751057&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java (original)
+++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java Sat Jul  2 12:57:12 2016
@@ -25,7 +25,6 @@ import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.soap.SOAP11Constants;
 import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axis2.AxisFault;
-import org.apache.axis2.classloader.JarFileClassLoader;
 import org.apache.axis2.Constants;
 import org.apache.axis2.jaxrs.JAXRSModel;
 import org.apache.axis2.context.ConfigurationContext;
@@ -348,11 +347,7 @@ public class Utils {
             classLoader = (URLClassLoader)AccessController
                     .doPrivileged(new PrivilegedAction() {
                         public Object run() {
-                            if (useJarFileClassLoader()) {
-                                return new JarFileClassLoader(urllist, parent);
-                            } else {
-                                return new DeploymentClassLoader(urllist, null, parent, isChildFirstClassLoading);
-                            }
+                            return new DeploymentClassLoader(urllist, null, parent, isChildFirstClassLoading);
                         }
                     });
             return classLoader;
@@ -361,20 +356,6 @@ public class Utils {
         }
     }
 
-    private static boolean useJarFileClassLoader() {
-        // The JarFileClassLoader was created to address a locking problem seen only on Windows platforms.
-        // It carries with it a slight performance penalty that needs to be addressed.  Rather than make
-        // *nix OSes carry this burden we'll engage the JarFileClassLoader for Windows or if the user 
-        // specifically requests it.
-        boolean useJarFileClassLoader;
-        if (System.getProperty("org.apache.axis2.classloader.JarFileClassLoader") == null) {
-            useJarFileClassLoader = System.getProperty("os.name").startsWith("Windows");
-        } else {
-            useJarFileClassLoader = Boolean.getBoolean("org.apache.axis2.classloader.JarFileClassLoader");
-        }
-        return useJarFileClassLoader;
-    }
-
     private static boolean addFiles(ArrayList urls, final File libfiles)
             throws MalformedURLException {
         Boolean exists = (Boolean)org.apache.axis2.java.security.AccessController