Author: vgritsenko Date: Fri Apr 15 08:54:05 2005 New Revision: 161488 URL: http://svn.apache.org/viewcvs?view=rev&rev=161488 Log: Merge NonStaticClassLoaderManager into ClassLoaderManagerImpl, deprecate NonStaticClassLoaderManager. See also http://marc.theaimsgroup.com/?t=104524385000003&r=1. Add Collection constructor to RepositoryClassLoader. Reformat code (4 space indent). Add dispose() to ClassLoaderManagerImpl.
Modified: cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/classloader/ClassLoaderManagerImpl.java cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/classloader/NonStaticClassLoaderManager.java cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/classloader/RepositoryClassLoader.java Modified: cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/classloader/ClassLoaderManagerImpl.java URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/classloader/ClassLoaderManagerImpl.java?view=diff&r1=161487&r2=161488 ============================================================================== --- cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/classloader/ClassLoaderManagerImpl.java (original) +++ cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/classloader/ClassLoaderManagerImpl.java Fri Apr 15 08:54:05 2005 @@ -1,12 +1,12 @@ /* - * Copyright 1999-2004 The Apache Software Foundation. - * + * Copyright 1999-2005 The Apache Software Foundation. + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,6 +15,7 @@ */ package org.apache.cocoon.components.classloader; +import org.apache.avalon.framework.activity.Disposable; import org.apache.avalon.framework.thread.ThreadSafe; import java.io.File; @@ -22,65 +23,68 @@ import java.util.Collections; import java.util.HashSet; import java.util.Set; -import java.util.Vector; /** * A singleton-like implementation of <code>ClassLoaderManager</code> * * @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a> - * @version CVS $Id$ + * @version $Id$ */ -public class ClassLoaderManagerImpl implements ClassLoaderManager, ThreadSafe { - /** - * The single class loader instance - */ - private static RepositoryClassLoader instance = null; - - protected final static Set fileSet = Collections.synchronizedSet(new HashSet()); - - /** - * A constructor that ensures only a single class loader instance exists - * - */ - public ClassLoaderManagerImpl() { - if (instance == null) { - this.reinstantiate(); +public class ClassLoaderManagerImpl implements ClassLoaderManager, ThreadSafe, Disposable { + + /** + * Set of class directories + */ + protected final Set fileSet = Collections.synchronizedSet(new HashSet()); + + /** + * The class loader instance + */ + private RepositoryClassLoader instance; + + /** + * A constructor that ensures only a single class loader instance exists + */ + public ClassLoaderManagerImpl() { + reinstantiate(); + } + + public void dispose() { + this.fileSet.clear(); + reinstantiate(); + } + + /** + * Add a directory to the proxied class loader + * + * @param directoryName The repository name + * @throws IOException If the directory is invalid + */ + public void addDirectory(File directoryName) throws IOException { + if (this.fileSet.add(directoryName)) { + this.instance.addDirectory(directoryName); + } } - } - /** - * Add a directory to the proxied class loader - * - * @param directoryName The repository name - * @exception IOException If the directory is invalid - */ - public void addDirectory(File directoryName) throws IOException { - if ( ! ClassLoaderManagerImpl.fileSet.contains(directoryName)) { - ClassLoaderManagerImpl.fileSet.add(directoryName); - ClassLoaderManagerImpl.instance.addDirectory(directoryName); + /** + * Load a class through the proxied class loader + * + * @param className The name of the class to be loaded + * @return The loaded class + * @throws ClassNotFoundException If the class is not found + */ + public Class loadClass(String className) throws ClassNotFoundException { + return this.instance.loadClass(className); } - } - /** - * Load a class through the proxied class loader - * - * @param className The name of the class to be loaded - * @return The loaded class - * @exception ClassNotFoundException If the class is not found - */ - public Class loadClass(String className) throws ClassNotFoundException { - return ClassLoaderManagerImpl.instance.loadClass(className); - } - - /** - * Reinstantiate the proxied class loader to allow for class reloading - * - */ - public void reinstantiate() { - if ( ClassLoaderManagerImpl.fileSet.isEmpty()) { - ClassLoaderManagerImpl.instance = new RepositoryClassLoader(); - } else { - ClassLoaderManagerImpl.instance = new RepositoryClassLoader(new Vector(ClassLoaderManagerImpl.fileSet)); + /** + * Reinstantiate the proxied class loader to allow for class reloading + */ + public void reinstantiate() { + if (this.fileSet.isEmpty()) { + this.instance = new RepositoryClassLoader(); + } else { + this.instance = new RepositoryClassLoader(this.fileSet); + } } - } } Modified: cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/classloader/NonStaticClassLoaderManager.java URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/classloader/NonStaticClassLoaderManager.java?view=diff&r1=161487&r2=161488 ============================================================================== --- cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/classloader/NonStaticClassLoaderManager.java (original) +++ cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/classloader/NonStaticClassLoaderManager.java Fri Apr 15 08:54:05 2005 @@ -1,12 +1,12 @@ /* - * Copyright 1999-2004 The Apache Software Foundation. - * + * Copyright 1999-2005 The Apache Software Foundation. + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,71 +15,9 @@ */ package org.apache.cocoon.components.classloader; -import java.io.File; -import java.io.IOException; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; -import java.util.Vector; - -import org.apache.avalon.framework.thread.ThreadSafe; - /** - * A singleton-like implementation of <code>ClassLoaderManager</code> - * - * @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a> - * @author <a href="mailto:[EMAIL PROTECTED]">Peter Royal</a> - * @version CVS $Id: NonStaticClassLoaderManager.java,v 1.2 2004/03/05 13:02:46 bdelacretaz Exp $ + * @deprecated Merged into ClassLoaderManagerImpl + * @version $Id$ */ -public class NonStaticClassLoaderManager implements ClassLoaderManager, ThreadSafe -{ - /** - * The single class loader instance - */ - private RepositoryClassLoader instance = new RepositoryClassLoader(); - - private Set fileSet = Collections.synchronizedSet( new HashSet() ); - - /** - * Add a directory to the proxied class loader - * - * @param directoryName The repository name - * @exception IOException If the directory is invalid - */ - public void addDirectory( File directoryName ) throws IOException - { - if( !this.fileSet.contains( directoryName ) ) - { - this.fileSet.add( directoryName ); - this.instance.addDirectory( directoryName ); - } - } - - /** - * Load a class through the proxied class loader - * - * @param className The name of the class to be loaded - * @return The loaded class - * @exception ClassNotFoundException If the class is not found - */ - public Class loadClass( String className ) throws ClassNotFoundException - { - return this.instance.loadClass( className ); - } - - /** - * Reinstantiate the proxied class loader to allow for class reloading - * - */ - public void reinstantiate() - { - if( this.fileSet.isEmpty() ) - { - this.instance = new RepositoryClassLoader(); - } - else - { - this.instance = new RepositoryClassLoader( new Vector( this.fileSet ) ); - } - } +public class NonStaticClassLoaderManager extends ClassLoaderManagerImpl { } Modified: cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/classloader/RepositoryClassLoader.java URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/classloader/RepositoryClassLoader.java?view=diff&r1=161487&r2=161488 ============================================================================== --- cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/classloader/RepositoryClassLoader.java (original) +++ cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/classloader/RepositoryClassLoader.java Fri Apr 15 08:54:05 2005 @@ -1,12 +1,12 @@ /* - * Copyright 1999-2004 The Apache Software Foundation. - * + * Copyright 1999-2005 The Apache Software Foundation. + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -17,6 +17,7 @@ import org.apache.avalon.framework.logger.LogEnabled; import org.apache.avalon.framework.logger.Logger; + import org.apache.cocoon.CascadingIOException; import org.apache.cocoon.util.ClassUtils; @@ -25,6 +26,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; +import java.util.Collection; import java.util.Iterator; import java.util.Vector; @@ -36,112 +38,118 @@ * * @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a> * @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a> - * @version CVS $Id: RepositoryClassLoader.java,v 1.2 2004/03/05 13:02:46 bdelacretaz Exp $ + * @version $Id$ */ -public class RepositoryClassLoader extends URLClassLoader implements LogEnabled { +public class RepositoryClassLoader extends URLClassLoader + implements LogEnabled { + + /** + * The logger + */ + protected Logger log; + + /** + * Create an empty new class loader. + */ + public RepositoryClassLoader() { + super(new URL[]{}, ClassUtils.getClassLoader()); + } + + /** + * Create an empty new class loader. + */ + public RepositoryClassLoader(URL[] urls) { + super(urls, ClassUtils.getClassLoader()); + } + + /** + * Create an empty new class loader. + */ + public RepositoryClassLoader(URL[] urls, ClassLoader parentClassLoader) { + super(urls, parentClassLoader); + } + + /** + * Create a class loader from a list of directories + * + * @param repositories List of searchable directories + */ + protected RepositoryClassLoader(Vector repositories) { + this((Collection) repositories); + } + + /** + * Create a class loader from a list of directories + * + * @param repositories List of searchable directories + */ + protected RepositoryClassLoader(Collection repositories) { + this(); + Iterator i = repositories.iterator(); + while (i.hasNext()) { + try { + this.addDirectory((File) i.next()); + } catch (IOException ioe) { + log.error("Repository could not be added", ioe); + } + } + } - /** - * The logger - */ - protected Logger log; - - /** - * Create an empty new class loader. - */ - public RepositoryClassLoader() { - super(new URL[] {}, ClassUtils.getClassLoader()); - } - - /** - * Create an empty new class loader. - */ - public RepositoryClassLoader(URL[] urls) { - super(urls, ClassUtils.getClassLoader()); - } - - /** - * Create an empty new class loader. - */ - public RepositoryClassLoader(URL[] urls, ClassLoader parentClassLoader) { - super(urls, parentClassLoader); - } - - /** - * Provide component with a logger. - * - * @param logger the logger - */ - public void enableLogging(Logger logger) { - if (this.log == null) { - this.log = logger; - } - } - - - /** - * Create a class loader from a list of directories - * - * @param repositories List of searchable directories - */ - protected RepositoryClassLoader(Vector repositories) { - this(); - Iterator i = repositories.iterator(); - while (i.hasNext()) { - try { - this.addDirectory((File) i.next()); - } catch (IOException ioe) { - log.error("Repository could not be added", ioe); - } - } - } - - /** - * Add a directory to the list of searchable repositories. - * This methods ensures that no directory is specified more than once. - * - * @param repository The directory path - * @exception IOException Non-existent, non-readable or non-directory - * repository - */ - public void addDirectory(File repository) throws IOException { - try { - this.addURL(repository.getCanonicalFile().toURL()); - } catch (MalformedURLException mue) { - log.error("The repository had a bad URL", mue); - throw new CascadingIOException("Could not add repository", mue); - } - } - - /** - * Add a directory to the list of searchable repositories. - * This methods ensures that no directory is specified more than once. - * - * @param repository The directory path - * @exception IOException Non-existent, non-readable or non-directory - * repository - */ - public void addDirectory(String repository) throws IOException { - try { - File file = new File(repository); - this.addURL(file.getCanonicalFile().toURL()); - } catch (MalformedURLException mue) { - log.error("The repository had a bad URL", mue); - throw new CascadingIOException("Could not add repository", mue); - } - } - - /** - * Add a url to the list of searchable repositories - */ - public void addURL(URL url) { - super.addURL(url); - } - - /** - * Create a Class from a byte array - */ - public Class defineClass(byte [] b) throws ClassFormatError { - return super.defineClass(null, b, 0, b.length); - } + /** + * Provide component with a logger. + * + * @param logger the logger + */ + public void enableLogging(Logger logger) { + if (this.log == null) { + this.log = logger; + } + } + + /** + * Add a directory to the list of searchable repositories. This methods ensures that no directory is specified more + * than once. + * + * @param repository The directory path + * @throws IOException Non-existent, non-readable or non-directory repository + */ + public void addDirectory(File repository) throws IOException { + try { + this.addURL(repository.getCanonicalFile().toURL()); + } catch (MalformedURLException mue) { + log.error("The repository had a bad URL", mue); + throw new CascadingIOException("Could not add repository", mue); + } + } + /** + * Add a directory to the list of searchable repositories. This methods ensures that no directory is specified more + * than once. + * + * @param repository The directory path + * @throws IOException Non-existent, non-readable or non-directory repository + */ + public void addDirectory(String repository) throws IOException { + try { + File file = new File(repository); + this.addURL(file.getCanonicalFile().toURL()); + } catch (MalformedURLException mue) { + log.error("The repository had a bad URL", mue); + throw new CascadingIOException("Could not add repository", mue); + } + } + + /** + * Add a url to the list of searchable repositories + */ + public void addURL(URL url) { + super.addURL(url); + } + + /** + * Create a Class from a byte array + */ + public Class defineClass(byte[] b) throws ClassFormatError { + return super.defineClass(null, b, 0, b.length); + } }