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;
+ }
+ }
}