Author: rmannibucau
Date: Wed Oct 17 07:27:04 2012
New Revision: 1399135

URL: http://svn.apache.org/viewvc?rev=1399135&view=rev
Log:
TOMEE-473 taking the feature into account for tempclassloader

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

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java?rev=1399135&r1=1399134&r2=1399135&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java
 Wed Oct 17 07:27:04 2012
@@ -37,6 +37,8 @@ import java.net.URLClassLoader;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.ConcurrentModificationException;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -291,9 +293,37 @@ public class ClassLoaderUtil {
         return new TempClassLoader(parent);
     }
 
-    public static URLClassLoader createTempClassLoader(String appId, URL[] 
urls, ClassLoader parent) {
-        URLClassLoader classLoader = createClassLoader(appId, urls, parent);
-        return new TempClassLoader(classLoader);
+    public static URLClassLoader createTempClassLoader(String appId, URL[] 
rawUrls, ClassLoader parent) {
+        String updatedAppId = appId;
+        if (appId != null) { // here we often get the full path of the app as 
id where later it is simply the name of the file/dir
+            final File file = new File(appId);
+            if (file.exists()) {
+                updatedAppId = file.getName();
+                if (updatedAppId.endsWith(".war") || 
updatedAppId.endsWith(".ear")) {
+                    updatedAppId = updatedAppId.substring(0, 
updatedAppId.length() - ".war".length());
+                }
+            }
+        }
+
+        final URL[] urls;
+        ClassLoaderConfigurer configurer = 
ClassLoaderUtil.configurer(updatedAppId);
+        if (configurer == null) { // try the complete path
+            configurer = ClassLoaderUtil.configurer(appId);
+        }
+        if (configurer != null) {
+            final Collection<URL> urlList = new ArrayList<URL>();
+            for (URL rawUrl : rawUrls) {
+                if (configurer.accept(rawUrl)) {
+                    urlList.add(rawUrl);
+                }
+            }
+            urlList.addAll(Arrays.asList(configurer.additionalURLs()));
+            urls = urlList.toArray(new URL[urlList.size()]);
+        } else {
+            urls = rawUrls;
+        }
+
+        return new TempClassLoader(createClassLoader(appId, urls, parent));
     }
 
     /**

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/classloader/DefaultClassLoaderConfigurer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/classloader/DefaultClassLoaderConfigurer.java?rev=1399135&r1=1399134&r2=1399135&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/classloader/DefaultClassLoaderConfigurer.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/classloader/DefaultClassLoaderConfigurer.java
 Wed Oct 17 07:27:04 2012
@@ -35,8 +35,9 @@ import java.util.Collection;
 public class DefaultClassLoaderConfigurer implements ClassLoaderConfigurer {
     private static final Logger LOGGER = 
Logger.getInstance(LogCategory.OPENEJB, DefaultClassLoaderConfigurer.class);
 
-    private URL[] added;
-    private Filter excluded;
+    // just some default if one is not set
+    private URL[] added = new URL[0];
+    private Filter excluded = FalseFilter.INSTANCE;
 
     @Override
     public URL[] additionalURLs() {
@@ -113,4 +114,13 @@ public class DefaultClassLoaderConfigure
             return true;
         }
     }
+
+    private static class FalseFilter implements Filter {
+        public static final FalseFilter INSTANCE = new FalseFilter();
+
+        @Override
+        public boolean accept(final String name) {
+            return true;
+        }
+    }
 }


Reply via email to