You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2009/03/11 20:47:15 UTC
svn commit: r752594 - in /geronimo/sandbox/djencks/framework/modules:
geronimo-deployment/src/main/java/org/apache/geronimo/deployment/
geronimo-deployment/src/test/java/org/apache/geronimo/deployment/
geronimo-kernel/src/main/java/org/apache/geronimo/...
Author: djencks
Date: Wed Mar 11 19:47:15 2009
New Revision: 752594
URL: http://svn.apache.org/viewvc?rev=752594&view=rev
Log:
more generics. Don't allow adding classes to configurations
Modified:
geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/Deployer.java
geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/DeploymentContext.java
geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/InPlaceResourceContext.java
geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/test/java/org/apache/geronimo/deployment/DeploymentContextTest.java
geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/JarFileClassLoader.java
geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/Configuration.java
geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/MultiParentClassLoader.java
geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/util/ClassLoaderDumper.java
geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/MultiParentClassLoaderTest.java
Modified: geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/Deployer.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/Deployer.java?rev=752594&r1=752593&r2=752594&view=diff
==============================================================================
--- geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/Deployer.java (original)
+++ geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/Deployer.java Wed Mar 11 19:47:15 2009
@@ -28,7 +28,6 @@
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
-import java.util.LinkedHashSet;
import java.util.List;
import java.util.Properties;
import java.util.Set;
@@ -317,7 +316,7 @@
Manifest manifest,
ConfigurationStore store,
DeploymentContext context) throws DeploymentException, IOException, Throwable {
- List<ConfigurationData> configurations = new ArrayList<ConfigurationData>();
+ List<ConfigurationData> configurationDatas = new ArrayList<ConfigurationData>();
boolean configsCleanupRequired = false;
@@ -331,35 +330,34 @@
thread.setContextClassLoader( context.getConfiguration().getConfigurationClassLoader());
try {
try {
- configurations.add(context.getConfigurationData());
+ configurationDatas.add(context.getConfigurationData());
} catch (DeploymentException e) {
Configuration configuration = context.getConfiguration();
if (configuration != null) {
ConfigurationData dumbConfigurationData = new ConfigurationData(null, null, null, null,
configuration.getEnvironment(), context.getBaseDir(), null, context.getNaming());
- configurations.add(dumbConfigurationData);
+ configurationDatas.add(dumbConfigurationData);
}
- configurations.addAll(context.getAdditionalDeployment());
+ configurationDatas.addAll(context.getAdditionalDeployment());
throw e;
}
- configurations.addAll(context.getAdditionalDeployment());
+ configurationDatas.addAll(context.getAdditionalDeployment());
- if (configurations.isEmpty()) {
+ if (configurationDatas.isEmpty()) {
throw new DeploymentException("Deployer did not create any configurations");
}
if (targetFile != null) {
- if (configurations.size() > 1) {
+ if (configurationDatas.size() > 1) {
throw new DeploymentException("Deployer created more than one configuration");
}
- ConfigurationData configurationData = (ConfigurationData) configurations.get(0);
+ ConfigurationData configurationData = configurationDatas.get(0);
ExecutableConfigurationUtil.createExecutableConfiguration(configurationData, manifest, targetFile);
}
if (install) {
- List deployedURIs = new ArrayList();
- for (Iterator iterator = configurations.iterator(); iterator.hasNext();) {
- ConfigurationData configurationData = (ConfigurationData) iterator.next();
+ List<String> deployedURIs = new ArrayList<String>();
+ for (ConfigurationData configurationData : configurationDatas) {
store.install(configurationData);
deployedURIs.add(configurationData.getId().toString());
}
@@ -385,12 +383,10 @@
throw e;
} finally {
thread.setContextClassLoader(oldCl);
- if (context != null) {
- context.close();
- }
+ context.close();
if (configsCleanupRequired) {
// We do this after context is closed so the module jar isn't open
- cleanupConfigurations(configurations);
+ cleanupConfigurations(configurationDatas);
}
}
}
Modified: geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/DeploymentContext.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/DeploymentContext.java?rev=752594&r1=752593&r2=752594&view=diff
==============================================================================
--- geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/DeploymentContext.java (original)
+++ geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/DeploymentContext.java Wed Mar 11 19:47:15 2009
@@ -17,7 +17,6 @@
package org.apache.geronimo.deployment;
-import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -42,9 +41,6 @@
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import org.apache.geronimo.common.DeploymentException;
import org.apache.geronimo.deployment.util.DeploymentUtil;
import org.apache.geronimo.gbean.AbstractName;
@@ -63,6 +59,8 @@
import org.apache.geronimo.kernel.config.NoSuchConfigException;
import org.apache.geronimo.kernel.repository.Artifact;
import org.apache.geronimo.kernel.repository.Environment;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* @version $Rev:385232 $ $Date$
@@ -589,17 +587,17 @@
}
}
- public void addClass(URI targetPath, String fqcn, byte[] bytes) throws IOException, URISyntaxException {
- if (!targetPath.getPath().endsWith("/"))
- throw new IllegalStateException("target path must end with a '/' character: " + targetPath);
-
- String classFileName = fqcn.replace('.', '/') + ".class";
-
- File targetFile = getTargetFile(new URI(targetPath.toString() + classFileName));
- addFile(targetFile, new ByteArrayInputStream(bytes));
-
- configuration.addToClassPath(targetPath.toString());
- }
+// public void addClass(URI targetPath, String fqcn, byte[] bytes) throws IOException, URISyntaxException {
+// if (!targetPath.getPath().endsWith("/"))
+// throw new IllegalStateException("target path must end with a '/' character: " + targetPath);
+//
+// String classFileName = fqcn.replace('.', '/') + ".class";
+//
+// File targetFile = getTargetFile(new URI(targetPath.toString() + classFileName));
+// addFile(targetFile, new ByteArrayInputStream(bytes));
+//
+// configuration.addToClassPath(targetPath.toString());
+// }
public void addFile(URI targetPath, ZipFile zipFile, ZipEntry zipEntry) throws IOException {
resourceContext.addFile(targetPath, zipFile, zipEntry);
Modified: geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/InPlaceResourceContext.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/InPlaceResourceContext.java?rev=752594&r1=752593&r2=752594&view=diff
==============================================================================
--- geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/InPlaceResourceContext.java (original)
+++ geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/InPlaceResourceContext.java Wed Mar 11 19:47:15 2009
@@ -22,7 +22,6 @@
import java.net.URISyntaxException;
import java.net.URL;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.Set;
import java.util.jar.JarFile;
import java.util.zip.ZipEntry;
@@ -38,7 +37,7 @@
private final Configuration configuration;
private final URI inPlaceBaseConfigurationUri;
- private final Set zipFilesToExpand = new HashSet();
+ private final Set<ZipFile> zipFilesToExpand = new HashSet<ZipFile>();
public InPlaceResourceContext(Configuration configuration, File inPlaceBaseConfigurationDir) throws DeploymentException {
this.configuration = configuration;
@@ -102,8 +101,7 @@
}
public void flush() throws IOException {
- for (Iterator iter = zipFilesToExpand.iterator(); iter.hasNext();) {
- ZipFile zipFile = (ZipFile) iter.next();
+ for (ZipFile zipFile : zipFilesToExpand) {
String name = zipFile.getName();
zipFile.close();
File srcFile = new File(name);
@@ -116,14 +114,14 @@
throw new AssertionError(e);
}
} else {
- targetFile = new File(name + PACKED_MODULED_SAVED_SUFFIX);
+ targetFile = new File(name + PACKED_MODULED_SAVED_SUFFIX);
}
boolean success = new File(name).renameTo(targetFile);
if (!success) {
- throw new IOException("Cannot rename file " +
+ throw new IOException("Cannot rename file " +
name + " to " + targetFile.getAbsolutePath());
}
-
+
DeploymentUtil.unzipToDirectory(new ZipFile(targetFile), srcFile);
}
}
Modified: geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/test/java/org/apache/geronimo/deployment/DeploymentContextTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/test/java/org/apache/geronimo/deployment/DeploymentContextTest.java?rev=752594&r1=752593&r2=752594&view=diff
==============================================================================
--- geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/test/java/org/apache/geronimo/deployment/DeploymentContextTest.java (original)
+++ geronimo/sandbox/djencks/framework/modules/geronimo-deployment/src/test/java/org/apache/geronimo/deployment/DeploymentContextTest.java Wed Mar 11 19:47:15 2009
@@ -53,40 +53,40 @@
public class DeploymentContextTest extends TestCase {
private byte[] classBytes;
- public void testAddClass() throws Exception {
- File basedir = File.createTempFile("car", "tmp");
- basedir.delete();
- basedir.mkdirs();
- try {
- basedir.deleteOnExit();
- Environment environment = new Environment();
- Artifact configId = new Artifact("foo", "artifact", "1", "car");
- environment.setConfigId(configId);
- ArtifactManager artifactManager = new DefaultArtifactManager();
- ArtifactResolver artifactResolver = new DefaultArtifactResolver(artifactManager, Collections.EMPTY_SET, null);
- SimpleConfigurationManager configurationManager = new SimpleConfigurationManager(Collections.EMPTY_SET, artifactResolver, Collections.EMPTY_SET);
- DeploymentContext context = new DeploymentContext(basedir, null, environment, null, ConfigurationModuleType.CAR, new Jsr77Naming(), configurationManager, Collections.EMPTY_SET);
- Enhancer enhancer = new Enhancer();
- enhancer.setInterfaces(new Class[]{DataSource.class});
- enhancer.setCallbackType(MethodInterceptor.class);
- enhancer.setStrategy(new DefaultGeneratorStrategy() {
- public byte[] transform(byte[] b) {
- classBytes = b;
- return b;
- }
- });
- enhancer.setClassLoader(new URLClassLoader(new URL[0], this.getClass().getClassLoader()));
- Class type = enhancer.createClass();
- URI location = new URI("cglib/");
- context.addClass(location, type.getName(), classBytes);
- ClassLoader cl = context.getClassLoader();
- Class loadedType = cl.loadClass(type.getName());
- assertTrue(DataSource.class.isAssignableFrom(loadedType));
- assertTrue(type != loadedType);
- } finally {
- recursiveDelete(basedir);
- }
- }
+// public void testAddClass() throws Exception {
+// File basedir = File.createTempFile("car", "tmp");
+// basedir.delete();
+// basedir.mkdirs();
+// try {
+// basedir.deleteOnExit();
+// Environment environment = new Environment();
+// Artifact configId = new Artifact("foo", "artifact", "1", "car");
+// environment.setConfigId(configId);
+// ArtifactManager artifactManager = new DefaultArtifactManager();
+// ArtifactResolver artifactResolver = new DefaultArtifactResolver(artifactManager, Collections.EMPTY_SET, null);
+// SimpleConfigurationManager configurationManager = new SimpleConfigurationManager(Collections.EMPTY_SET, artifactResolver, Collections.EMPTY_SET);
+// DeploymentContext context = new DeploymentContext(basedir, null, environment, null, ConfigurationModuleType.CAR, new Jsr77Naming(), configurationManager, Collections.EMPTY_SET);
+// Enhancer enhancer = new Enhancer();
+// enhancer.setInterfaces(new Class[]{DataSource.class});
+// enhancer.setCallbackType(MethodInterceptor.class);
+// enhancer.setStrategy(new DefaultGeneratorStrategy() {
+// public byte[] transform(byte[] b) {
+// classBytes = b;
+// return b;
+// }
+// });
+// enhancer.setClassLoader(new URLClassLoader(new URL[0], this.getClass().getClassLoader()));
+// Class type = enhancer.createClass();
+// URI location = new URI("cglib/");
+// context.addClass(location, type.getName(), classBytes);
+// ClassLoader cl = context.getClassLoader();
+// Class loadedType = cl.loadClass(type.getName());
+// assertTrue(DataSource.class.isAssignableFrom(loadedType));
+// assertTrue(type != loadedType);
+// } finally {
+// recursiveDelete(basedir);
+// }
+// }
private void recursiveDelete(File file) {
if (file.isDirectory()) {
Modified: geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/JarFileClassLoader.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/JarFileClassLoader.java?rev=752594&r1=752593&r2=752594&view=diff
==============================================================================
--- geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/JarFileClassLoader.java (original)
+++ geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/JarFileClassLoader.java Wed Mar 11 19:47:15 2009
@@ -29,6 +29,7 @@
import java.security.PrivilegedExceptionAction;
import java.security.cert.Certificate;
import java.util.Enumeration;
+import java.util.List;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
@@ -90,13 +91,13 @@
* @param urls the urls from which this class loader will classes and resources
* @param parents the parents of this class loader
*/
- public JarFileClassLoader(Artifact id, URL[] urls, ClassLoader[] parents) {
+ public JarFileClassLoader(Artifact id, URL[] urls, List<ClassLoader> parents) {
super(id, EMPTY_URLS, parents);
this.acc = AccessController.getContext();
addURLs(urls);
}
- public JarFileClassLoader(Artifact id, URL[] urls, ClassLoader[] parents, ClassLoadingRules classLoadingRules) {
+ public JarFileClassLoader(Artifact id, URL[] urls, List<ClassLoader> parents, ClassLoadingRules classLoadingRules) {
super(id, EMPTY_URLS, parents, classLoadingRules);
this.acc = AccessController.getContext();
addURLs(urls);
Modified: geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/Configuration.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/Configuration.java?rev=752594&r1=752593&r2=752594&view=diff
==============================================================================
--- geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/Configuration.java (original)
+++ geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/Configuration.java Wed Mar 11 19:47:15 2009
@@ -339,17 +339,16 @@
URL[] urls = buildClassPath(classPath);
// parents
- ClassLoader[] parentClassLoaders;
+ List<ClassLoader> parentClassLoaders;
if (parents.size() == 0 && classParents.size() == 0) {
// no explicit parent set, so use the class loader of this class as
// the parent... this class should be in the root geronimo classloader,
// which is normally the system class loader but not always, so be safe
- parentClassLoaders = new ClassLoader[] {getClass().getClassLoader()};
+ parentClassLoaders = Collections.singletonList(getClass().getClassLoader());
} else {
- parentClassLoaders = new ClassLoader[classParents.size()];
- for (ListIterator iterator = classParents.listIterator(); iterator.hasNext();) {
- Configuration configuration = (Configuration) iterator.next();
- parentClassLoaders[iterator.previousIndex()] = configuration.childrenConfigurationClassLoader;
+ parentClassLoaders = new ArrayList<ClassLoader>(classParents.size());
+ for (Configuration configuration : classParents) {
+ parentClassLoaders.add(configuration.childrenConfigurationClassLoader);
}
}
Modified: geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/MultiParentClassLoader.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/MultiParentClassLoader.java?rev=752594&r1=752593&r2=752594&view=diff
==============================================================================
--- geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/MultiParentClassLoader.java (original)
+++ geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/MultiParentClassLoader.java Wed Mar 11 19:47:15 2009
@@ -57,7 +57,7 @@
private static final Logger log = LoggerFactory.getLogger(MultiParentClassLoader.class);
private final Artifact id;
- private final ClassLoader[] parents;
+ private final List<ClassLoader> parents;
private final ClassLoadingRules classLoadingRules;
private boolean destroyed = false;
private Set<String> resourcesNotFound = new HashSet<String>();
@@ -101,7 +101,7 @@
super(urls);
this.id = id;
- parents = new ClassLoader[]{ClassLoader.getSystemClassLoader()};
+ parents = new ArrayList<ClassLoader>(Collections.singleton(ClassLoader.getSystemClassLoader()));
classLoadingRules = new ClassLoadingRules();
ClassLoaderRegistry.add(this);
}
@@ -115,11 +115,11 @@
* @param parent the parent of this class loader
*/
public MultiParentClassLoader(Artifact id, URL[] urls, ClassLoader parent) {
- this(id, urls, new ClassLoader[]{parent});
+ this(id, urls, Collections.singletonList(parent));
}
public MultiParentClassLoader(Artifact id, URL[] urls, ClassLoader parent, ClassLoadingRules classLoadingRules) {
- this(id, urls, new ClassLoader[]{parent}, classLoadingRules);
+ this(id, urls, Collections.singletonList(parent), classLoadingRules);
}
/**
@@ -132,7 +132,7 @@
* @param factory the URLStreamHandlerFactory used to access the urls
*/
public MultiParentClassLoader(Artifact id, URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory) {
- this(id, urls, new ClassLoader[]{parent}, factory);
+ this(id, urls, Collections.singletonList(parent), factory);
}
/**
@@ -142,19 +142,19 @@
* @param urls the urls from which this class loader will classes and resources
* @param parents the parents of this class loader
*/
- public MultiParentClassLoader(Artifact id, URL[] urls, ClassLoader[] parents) {
+ public MultiParentClassLoader(Artifact id, URL[] urls, List<ClassLoader> parents) {
super(urls);
this.id = id;
- this.parents = copyParents(parents);
+ this.parents = new ArrayList<ClassLoader>(parents);
classLoadingRules = new ClassLoadingRules();
ClassLoaderRegistry.add(this);
}
- public MultiParentClassLoader(Artifact id, URL[] urls, ClassLoader[] parents, ClassLoadingRules classLoadingRules) {
+ public MultiParentClassLoader(Artifact id, URL[] urls, List<ClassLoader> parents, ClassLoadingRules classLoadingRules) {
super(urls);
this.id = id;
- this.parents = copyParents(parents);
+ this.parents = new ArrayList<ClassLoader>(parents);
this.classLoadingRules = classLoadingRules;
ClassLoaderRegistry.add(this);
}
@@ -186,38 +186,25 @@
* @param parents the parents of this class loader
* @param factory the URLStreamHandlerFactory used to access the urls
*/
- public MultiParentClassLoader(Artifact id, URL[] urls, ClassLoader[] parents, URLStreamHandlerFactory factory) {
+ public MultiParentClassLoader(Artifact id, URL[] urls, List<ClassLoader> parents, URLStreamHandlerFactory factory) {
super(urls, null, factory);
this.id = id;
- this.parents = copyParents(parents);
+ this.parents = new ArrayList<ClassLoader>(parents);
classLoadingRules = new ClassLoadingRules();
ClassLoaderRegistry.add(this);
}
- private static ClassLoader[] copyParents(ClassLoader[] parents) {
- ClassLoader[] newParentsArray = new ClassLoader[parents.length];
- for (int i = 0; i < parents.length; i++) {
- ClassLoader parent = parents[i];
- if (parent == null) {
- throw new NullPointerException("parent[" + i + "] is null");
- }
- newParentsArray[i] = parent;
- }
- return newParentsArray;
- }
-
- private static ClassLoader[] deepCopyParents(ClassLoader[] parents) {
- ClassLoader[] newParentsArray = new ClassLoader[parents.length];
- for (int i = 0; i < parents.length; i++) {
- ClassLoader parent = parents[i];
+ private static List<ClassLoader> deepCopyParents(List<ClassLoader> parents) {
+ List<ClassLoader> newParentsArray = new ArrayList<ClassLoader>(parents.size());
+ for (ClassLoader parent : parents) {
if (parent == null) {
- throw new NullPointerException("parent[" + i + "] is null");
+ throw new NullPointerException("parent is null: " + parents);
}
if (parent instanceof MultiParentClassLoader) {
parent = ((MultiParentClassLoader) parent).copy();
}
- newParentsArray[i] = parent;
+ newParentsArray.add(parent);
}
return newParentsArray;
}
@@ -236,7 +223,7 @@
*
* @return the parents of this class loader
*/
- public ClassLoader[] getParents() {
+ public List<ClassLoader> getParents() {
return parents;
}
Modified: geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/util/ClassLoaderDumper.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/util/ClassLoaderDumper.java?rev=752594&r1=752593&r2=752594&view=diff
==============================================================================
--- geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/util/ClassLoaderDumper.java (original)
+++ geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/util/ClassLoaderDumper.java Wed Mar 11 19:47:15 2009
@@ -16,8 +16,9 @@
*/
package org.apache.geronimo.kernel.util;
-import java.net.URLClassLoader;
import java.net.URL;
+import java.net.URLClassLoader;
+
import org.apache.geronimo.kernel.config.MultiParentClassLoader;
/**
@@ -43,9 +44,8 @@
if(loader instanceof MultiParentClassLoader) {
MultiParentClassLoader mp = (MultiParentClassLoader) loader;
- ClassLoader[] parents = mp.getParents();
- for (int i = 0; i < parents.length; i++) {
- dumpIDs(prefix+" ", parents[i]);
+ for (ClassLoader parent: mp.getParents()) {
+ dumpIDs(prefix+" ", parent);
}
} else {
dumpIDs(prefix+" ", loader.getParent());
@@ -58,16 +58,14 @@
if(loader instanceof URLClassLoader) {
URLClassLoader url = (URLClassLoader) loader;
URL[] entries = url.getURLs();
- for (int i = 0; i < entries.length; i++) {
- URL entry = entries[i];
- System.out.println(prefix+" "+entry);
+ for (URL entry : entries) {
+ System.out.println(prefix + " " + entry);
}
}
if(loader instanceof MultiParentClassLoader) {
MultiParentClassLoader mp = (MultiParentClassLoader) loader;
- ClassLoader[] parents = mp.getParents();
- for (int i = 0; i < parents.length; i++) {
- dumpContents(prefix+" ", parents[i]);
+ for (ClassLoader parent: mp.getParents()) {
+ dumpContents(prefix+" ", parent);
}
} else {
dumpContents(prefix+" ", loader.getParent());
Modified: geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/MultiParentClassLoaderTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/MultiParentClassLoaderTest.java?rev=752594&r1=752593&r2=752594&view=diff
==============================================================================
--- geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/MultiParentClassLoaderTest.java (original)
+++ geronimo/sandbox/djencks/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/MultiParentClassLoaderTest.java Wed Mar 11 19:47:15 2009
@@ -28,6 +28,8 @@
import java.util.jar.JarEntry;
import java.util.Collections;
import java.util.Enumeration;
+import java.util.List;
+import java.util.ArrayList;
import junit.framework.TestCase;
import net.sf.cglib.proxy.Enhancer;
@@ -49,7 +51,7 @@
private File[] files;
private static final String NON_EXISTANT_RESOURCE = "non-existant-resource";
private static final String NON_EXISTANT_CLASS = "NonExistant.class";
- private URLClassLoader[] parents;
+ private List<ClassLoader> parents;
private MultiParentClassLoader classLoader;
private static final Artifact NAME = new Artifact("test", "fake", "1.0", "car");
@@ -101,11 +103,11 @@
* parents are in the same order.
*/
public void testGetParents() {
- ClassLoader[] actualParents = classLoader.getParents();
+ List<ClassLoader> actualParents = classLoader.getParents();
assertNotSame(parents, actualParents);
- assertEquals(parents.length, actualParents.length);
- for (int i = 0; i < actualParents.length; i++) {
- assertEquals(parents[i], actualParents[i]);
+ assertEquals(parents.size(), actualParents.size());
+ for (int i = 0; i < actualParents.size(); i++) {
+ assertEquals(parents.get(i), actualParents.get(i));
}
}
@@ -121,8 +123,8 @@
assertEquals(classLoader, clazz.getClassLoader());
// load class specific to each parent class loader
- for (int i = 0; i < parents.length; i++) {
- URLClassLoader parent = parents[i];
+ for (int i = 0; i < parents.size(); i++) {
+ ClassLoader parent = parents.get(i);
clazz = classLoader.loadClass(CLASS_NAME + i);
assertNotNull(clazz);
assertTrue(clazz instanceof Serializable);
@@ -133,7 +135,7 @@
clazz = classLoader.loadClass(CLASS_NAME);
assertNotNull(clazz);
assertTrue(clazz instanceof Serializable);
- assertEquals(parents[0], clazz.getClassLoader());
+ assertEquals(parents.get(0), clazz.getClassLoader());
}
public void testInverseClassLoading() throws Exception {
@@ -205,7 +207,7 @@
assertStreamContains("Should have found value from my file", ENTRY_VALUE + 33 + ENTRY_VALUE, in);
in.close();
- for (int i = 0; i < parents.length; i++) {
+ for (int i = 0; i < parents.size(); i++) {
in = classLoader.getResourceAsStream(ENTRY_NAME + i);
assertStreamContains("Should have found value from parent " + i, ENTRY_VALUE + i + ENTRY_VALUE, in);
in.close();
@@ -232,7 +234,7 @@
URL resource = classLoader.getResource(ENTRY_NAME + 33);
assertURLContains("Should have found value from my file", ENTRY_VALUE + 33 + ENTRY_VALUE, resource);
- for (int i = 0; i < parents.length; i++) {
+ for (int i = 0; i < parents.size(); i++) {
resource = classLoader.getResource(ENTRY_NAME + i);
assertURLContains("Should have found value from parent " + i, ENTRY_VALUE + i + ENTRY_VALUE, resource);
}
@@ -259,7 +261,7 @@
assertTrue(resources.hasMoreElements());
// there should be one entry for each parent
- for (int i = 0; i < parents.length; i++) {
+ for (int i = 0; i < parents.size(); i++) {
URL resource = (URL) resources.nextElement();
assertURLContains("Should have found value from parent " + i, ENTRY_VALUE + i, resource);
}
@@ -316,9 +318,9 @@
files[i] = createJarFile(i);
}
- parents = new URLClassLoader[3];
- for (int i = 0; i < parents.length; i++) {
- parents[i] = new URLClassLoader(new URL[]{files[i].toURL()});
+ parents = new ArrayList<ClassLoader>(3);
+ for (int i = 0; i < 3; i++) {
+ parents.add(new URLClassLoader(new URL[]{files[i].toURL()}) );
}
File myFile = createJarFile(33);