You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2013/03/09 02:06:07 UTC

svn commit: r1454631 - /tomee/tomee/branches/tomee-1.5.x/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java

Author: dblevins
Date: Sat Mar  9 01:06:06 2013
New Revision: 1454631

URL: http://svn.apache.org/r1454631
Log:
LinkageError protection

Modified:
    tomee/tomee/branches/tomee-1.5.x/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java

Modified: tomee/tomee/branches/tomee-1.5.x/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
URL: http://svn.apache.org/viewvc/tomee/tomee/branches/tomee-1.5.x/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java?rev=1454631&r1=1454630&r2=1454631&view=diff
==============================================================================
--- tomee/tomee/branches/tomee-1.5.x/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java (original)
+++ tomee/tomee/branches/tomee-1.5.x/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java Sat Mar  9 01:06:06 2013
@@ -78,7 +78,7 @@ public class LazyStopWebappClassLoader e
                 final ClassLoader old = system;
                 system = NoClassClassLoader.INSTANCE;
                 try {
-                    return super.loadClass(name);
+                    return _loadClass(name);
                 } finally {
                     system = old;
                 }
@@ -88,14 +88,30 @@ public class LazyStopWebappClassLoader e
         // avoid to redefine classes from server in this classloader is it not already loaded
         if (URLClassLoaderFirst.shouldSkip(name)) {
             try {
-                return OpenEJB.class.getClassLoader().loadClass(name);
+                return load(OpenEJB.class.getClassLoader(), name);
             } catch (ClassNotFoundException e) {
-                return super.loadClass(name);
+                return _loadClass(name);
             } catch (NoClassDefFoundError ncdfe) {
-                return super.loadClass(name);
+                return _loadClass(name);
             }
         }
-        return super.loadClass(name);
+        return _loadClass(name);
+    }
+
+    private Class<?> _loadClass(String name) throws ClassNotFoundException {
+        try {
+            return super.loadClass(name);
+        } catch (LinkageError e) {
+            return super.loadClass(name);
+        }
+    }
+
+    private static Class<?> load(final ClassLoader loader, final String name) throws ClassNotFoundException {
+        try {
+            return loader.loadClass(name);
+        } catch (LinkageError e) {
+            return loader.loadClass(name);
+        }
     }
 
     public void internalStop() throws LifecycleException {