You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/09/14 13:03:43 UTC

svn commit: r1624833 - /tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java

Author: rmannibucau
Date: Sun Sep 14 11:03:42 2014
New Revision: 1624833

URL: http://svn.apache.org/r1624833
Log:
TOMEE-1344 closing classloader if possible

Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java?rev=1624833&r1=1624832&r2=1624833&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java Sun Sep 14 11:03:42 2014
@@ -29,7 +29,9 @@ import org.apache.openejb.util.classload
 import org.apache.xbean.recipe.ObjectRecipe;
 
 import java.beans.Introspector;
+import java.io.Closeable;
 import java.io.File;
+import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.ObjectStreamClass;
@@ -154,6 +156,14 @@ public class ClassLoaderUtil {
         for (final String jar : getClosedJarFiles(classLoader)) {
             clearSunJarFileFactoryCache(jar);
         }
+
+        if (Closeable.class.isInstance(classLoader)) {
+            try {
+                Closeable.class.cast(classLoader).close();
+            } catch (final IOException e) {
+                // no-op
+            }
+        }
     }
 
     /**
@@ -203,8 +213,6 @@ public class ClassLoaderUtil {
 
     @SuppressWarnings({"UseOfObsoleteCollectionType", "PMD.AvoidCallingFinalize"})
     public boolean finalizeNativeLibs(final ClassLoader cl) {
-
-        boolean res = false;
         final Class classClassLoader = ClassLoader.class;
         Field nativeLibraries = null;
 
@@ -215,7 +223,7 @@ public class ClassLoaderUtil {
         }
 
         if (nativeLibraries == null) {
-            return res;
+            return false;
         }
 
         nativeLibraries.setAccessible(true);
@@ -228,10 +236,9 @@ public class ClassLoaderUtil {
         }
 
         if (!(obj instanceof Vector)) {
-            return res;
+            return false;
         }
 
-        res = true;
         final Vector javaLangClassLoaderNativeLibrary = (Vector) obj;
         Method finalize;
 
@@ -245,7 +252,7 @@ public class ClassLoaderUtil {
                     finalize.setAccessible(true);
 
                     try {
-                        finalize.invoke(lib, new Object[0]);
+                        finalize.invoke(lib);
                     } catch (final Throwable e) {
                         //Ignore
                     }
@@ -254,7 +261,7 @@ public class ClassLoaderUtil {
                 //Ignore
             }
         }
-        return res;
+        return true;
     }
 
     public static void destroyClassLoader(final String appId) {