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 {


Reply via email to