Author: markt Date: Mon Oct 23 16:23:31 2006 New Revision: 467179 URL: http://svn.apache.org/viewvc?view=rev&rev=467179 Log: Fix properties.
Modified: tomcat/connectors/trunk/util/loader/org/apache/tomcat/util/loader/RepositoryClassLoader.java (contents, props changed) Modified: tomcat/connectors/trunk/util/loader/org/apache/tomcat/util/loader/RepositoryClassLoader.java URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/util/loader/org/apache/tomcat/util/loader/RepositoryClassLoader.java?view=diff&rev=467179&r1=467178&r2=467179 ============================================================================== --- tomcat/connectors/trunk/util/loader/org/apache/tomcat/util/loader/RepositoryClassLoader.java (original) +++ tomcat/connectors/trunk/util/loader/org/apache/tomcat/util/loader/RepositoryClassLoader.java Mon Oct 23 16:23:31 2006 @@ -1,254 +1,254 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.apache.tomcat.util.loader; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.Enumeration; -import java.util.Vector; - -/** - * Class loader associated with a repository ( common, shared, server, etc ). - * - * This class loader will never load any class by itself ( since it has no repository ), - * it will just delegate to modules. - * - * Refactored as a separate class to make the code cleaner. - * Based on catalina loader. - * - * @author Costin Manolache - * @author Remy Maucherat - * @author Craig R. McClanahan - */ -public class RepositoryClassLoader - extends URLClassLoader -{ - private static final boolean DEBUG=false; //LoaderProperties.getProperty("loader.debug.ModuleClassLoader") != null; - private static final boolean DEBUGNF=false;//LoaderProperties.getProperty("loader.debug.ModuleClassLoaderNF") != null; - - // ----------------------------------------------------------- Constructors - - public RepositoryClassLoader(URL repositories[], ClassLoader parent, Repository lg) { - super(repositories, parent); - this.repository=lg; - } - - - public RepositoryClassLoader(URL repositories[], Repository lg) { - super(repositories); - this.repository=lg; - } - - - // ----------------------------------------------------- Instance Variables - - private Repository repository; - - // ---------------------------------------------------- ClassLoader Methods - - - /** - * Find the specified class in our local repositories, if possible. If - * not found, throw <code>ClassNotFoundException</code>. - * - * @param name Name of the class to be loaded - * - * @exception ClassNotFoundException if the class was not found - */ - public Class findClass(String name) throws ClassNotFoundException { - - Class clazz = null; - - Enumeration modulesE=repository.getModules(); - while( modulesE.hasMoreElements() ) { - try { - Module m=(Module)modulesE.nextElement(); - return ((ModuleClassLoader)m.getClassLoader()).findClass2(name, false); - } catch( ClassNotFoundException ex ) { - // ignore - } - } - throw new ClassNotFoundException( name ); - - } - - /** Same as findClass, but also checks if the class has been previously - * loaded. - * - * In most implementations, findClass() doesn't check with findLoadedClass(). - * In order to implement repository, we need to ask each loader in the group - * to load only from it's local resources - however this will lead to errors - * ( duplicated definition ) if findClass() is used. - * - * @param name - * @return - * @throws ClassNotFoundException - */ - public Class findLocalClass(String name) throws ClassNotFoundException - { - Enumeration modulesE=repository.getModules(); - while( modulesE.hasMoreElements() ) { - try { - Module m=(Module)modulesE.nextElement(); - return ((ModuleClassLoader)m.getClassLoader()).findLocalClass(name); - } catch( ClassNotFoundException ex ) { - // ignore - } - } - throw new ClassNotFoundException( name ); - } - - - - - /** - * Find the specified resource in our local repository, and return a - * <code>URL</code> refering to it, or <code>null</code> if this resource - * cannot be found. - * - * @param name Name of the resource to be found - */ - public URL findResource(final String name) { - URL url = null; - Enumeration modulesE=repository.getModules(); - while( modulesE.hasMoreElements() ) { - Module m=(Module)modulesE.nextElement(); - url=((ModuleClassLoader)m.getClassLoader()).findResource2(name, false); - if( url!= null ) { - return url; - } - } - - if (url==null && DEBUG) { - if (DEBUGNF) log("findResource() NOTFOUND " + name ); - } - - return null; - } - - - /** - * Return an enumeration of <code>URLs</code> representing all of the - * resources with the given name. If no resources with this name are - * found, return an empty enumeration. - * - * @param name Name of the resources to be found - * - * @exception IOException if an input/output error occurs - */ - public Enumeration findResources(String name) throws IOException { - Vector result=new Vector(); - - Enumeration modulesE=repository.getModules(); - while( modulesE.hasMoreElements() ) { - Module m=(Module)modulesE.nextElement(); - Enumeration myRes=((ModuleClassLoader)m.getClassLoader()).findResources2(name,false); - if( myRes!=null ) { - while( myRes.hasMoreElements() ) { - result.addElement(myRes.nextElement()); - } - } - } - - return result.elements(); - - } - - // Next methods implement the search alghoritm - parent, repo, delegation, etc - - /** getResource() - modified to implement the search alghoritm - * - */ - public URL getResource(String name) { - URL url = null; - Enumeration modulesE=repository.getModules(); - while( modulesE.hasMoreElements() ) { - Module m=(Module)modulesE.nextElement(); - url=((ModuleClassLoader)m.getClassLoader()).getResource2(name, null, false); - if( url!= null ) { - return url; - } - } - - if (url==null && DEBUG) { - if (DEBUGNF) log("findResource() NOTFOUND " + name ); - } - - return null; - } - - /** - * Load the class with the specified name, searching using the following - * algorithm until it finds and returns the class. If the class cannot - * be found, returns <code>ClassNotFoundException</code>. - * <ul> - * <li>Call <code>findLoadedClass(String)</code> to check if the - * class has already been loaded. If it has, the same - * <code>Class</code> object is returned.</li> - * <li>If the <code>delegate</code> property is set to <code>true</code>, - * call the <code>loadClass()</code> method of the parent class - * loader, if any.</li> - * <li>Call <code>findClass()</code> to find this class in our locally - * defined repositories.</li> - * <li>Call the <code>loadClass()</code> method of our parent - * class loader, if any.</li> - * </ul> - * If the class was found using the above steps, and the - * <code>resolve</code> flag is <code>true</code>, this method will then - * call <code>resolveClass(Class)</code> on the resulting Class object. - * - * @param name Name of the class to be loaded - * @param resolve If <code>true</code> then resolve the class - * - * @exception ClassNotFoundException if the class was not found - */ - public Class loadClass(String name, boolean resolve) - throws ClassNotFoundException - { - - Class clazz = null; - Enumeration modulesE=repository.getModules(); - while( modulesE.hasMoreElements() ) { - try { - Module m=(Module)modulesE.nextElement(); - return ((ModuleClassLoader)m.getClassLoader()).loadClass2(name, resolve, false); - } catch( ClassNotFoundException ex ) { - // ignore - } - } - throw new ClassNotFoundException( name ); - - } - - - // ------------------ Local methods ------------------------ - - private void log(String s ) { - System.err.println("RepositoryClassLoader: " + s); - } - private void log(String s, Throwable t ) { - System.err.println("RepositoryClassLoader: " + s); - t.printStackTrace(); - } - -} - +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.apache.tomcat.util.loader; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.Enumeration; +import java.util.Vector; + +/** + * Class loader associated with a repository ( common, shared, server, etc ). + * + * This class loader will never load any class by itself ( since it has no repository ), + * it will just delegate to modules. + * + * Refactored as a separate class to make the code cleaner. + * Based on catalina loader. + * + * @author Costin Manolache + * @author Remy Maucherat + * @author Craig R. McClanahan + */ +public class RepositoryClassLoader + extends URLClassLoader +{ + private static final boolean DEBUG=false; //LoaderProperties.getProperty("loader.debug.ModuleClassLoader") != null; + private static final boolean DEBUGNF=false;//LoaderProperties.getProperty("loader.debug.ModuleClassLoaderNF") != null; + + // ----------------------------------------------------------- Constructors + + public RepositoryClassLoader(URL repositories[], ClassLoader parent, Repository lg) { + super(repositories, parent); + this.repository=lg; + } + + + public RepositoryClassLoader(URL repositories[], Repository lg) { + super(repositories); + this.repository=lg; + } + + + // ----------------------------------------------------- Instance Variables + + private Repository repository; + + // ---------------------------------------------------- ClassLoader Methods + + + /** + * Find the specified class in our local repositories, if possible. If + * not found, throw <code>ClassNotFoundException</code>. + * + * @param name Name of the class to be loaded + * + * @exception ClassNotFoundException if the class was not found + */ + public Class findClass(String name) throws ClassNotFoundException { + + Class clazz = null; + + Enumeration modulesE=repository.getModules(); + while( modulesE.hasMoreElements() ) { + try { + Module m=(Module)modulesE.nextElement(); + return ((ModuleClassLoader)m.getClassLoader()).findClass2(name, false); + } catch( ClassNotFoundException ex ) { + // ignore + } + } + throw new ClassNotFoundException( name ); + + } + + /** Same as findClass, but also checks if the class has been previously + * loaded. + * + * In most implementations, findClass() doesn't check with findLoadedClass(). + * In order to implement repository, we need to ask each loader in the group + * to load only from it's local resources - however this will lead to errors + * ( duplicated definition ) if findClass() is used. + * + * @param name + * @return + * @throws ClassNotFoundException + */ + public Class findLocalClass(String name) throws ClassNotFoundException + { + Enumeration modulesE=repository.getModules(); + while( modulesE.hasMoreElements() ) { + try { + Module m=(Module)modulesE.nextElement(); + return ((ModuleClassLoader)m.getClassLoader()).findLocalClass(name); + } catch( ClassNotFoundException ex ) { + // ignore + } + } + throw new ClassNotFoundException( name ); + } + + + + + /** + * Find the specified resource in our local repository, and return a + * <code>URL</code> refering to it, or <code>null</code> if this resource + * cannot be found. + * + * @param name Name of the resource to be found + */ + public URL findResource(final String name) { + URL url = null; + Enumeration modulesE=repository.getModules(); + while( modulesE.hasMoreElements() ) { + Module m=(Module)modulesE.nextElement(); + url=((ModuleClassLoader)m.getClassLoader()).findResource2(name, false); + if( url!= null ) { + return url; + } + } + + if (url==null && DEBUG) { + if (DEBUGNF) log("findResource() NOTFOUND " + name ); + } + + return null; + } + + + /** + * Return an enumeration of <code>URLs</code> representing all of the + * resources with the given name. If no resources with this name are + * found, return an empty enumeration. + * + * @param name Name of the resources to be found + * + * @exception IOException if an input/output error occurs + */ + public Enumeration findResources(String name) throws IOException { + Vector result=new Vector(); + + Enumeration modulesE=repository.getModules(); + while( modulesE.hasMoreElements() ) { + Module m=(Module)modulesE.nextElement(); + Enumeration myRes=((ModuleClassLoader)m.getClassLoader()).findResources2(name,false); + if( myRes!=null ) { + while( myRes.hasMoreElements() ) { + result.addElement(myRes.nextElement()); + } + } + } + + return result.elements(); + + } + + // Next methods implement the search alghoritm - parent, repo, delegation, etc + + /** getResource() - modified to implement the search alghoritm + * + */ + public URL getResource(String name) { + URL url = null; + Enumeration modulesE=repository.getModules(); + while( modulesE.hasMoreElements() ) { + Module m=(Module)modulesE.nextElement(); + url=((ModuleClassLoader)m.getClassLoader()).getResource2(name, null, false); + if( url!= null ) { + return url; + } + } + + if (url==null && DEBUG) { + if (DEBUGNF) log("findResource() NOTFOUND " + name ); + } + + return null; + } + + /** + * Load the class with the specified name, searching using the following + * algorithm until it finds and returns the class. If the class cannot + * be found, returns <code>ClassNotFoundException</code>. + * <ul> + * <li>Call <code>findLoadedClass(String)</code> to check if the + * class has already been loaded. If it has, the same + * <code>Class</code> object is returned.</li> + * <li>If the <code>delegate</code> property is set to <code>true</code>, + * call the <code>loadClass()</code> method of the parent class + * loader, if any.</li> + * <li>Call <code>findClass()</code> to find this class in our locally + * defined repositories.</li> + * <li>Call the <code>loadClass()</code> method of our parent + * class loader, if any.</li> + * </ul> + * If the class was found using the above steps, and the + * <code>resolve</code> flag is <code>true</code>, this method will then + * call <code>resolveClass(Class)</code> on the resulting Class object. + * + * @param name Name of the class to be loaded + * @param resolve If <code>true</code> then resolve the class + * + * @exception ClassNotFoundException if the class was not found + */ + public Class loadClass(String name, boolean resolve) + throws ClassNotFoundException + { + + Class clazz = null; + Enumeration modulesE=repository.getModules(); + while( modulesE.hasMoreElements() ) { + try { + Module m=(Module)modulesE.nextElement(); + return ((ModuleClassLoader)m.getClassLoader()).loadClass2(name, resolve, false); + } catch( ClassNotFoundException ex ) { + // ignore + } + } + throw new ClassNotFoundException( name ); + + } + + + // ------------------ Local methods ------------------------ + + private void log(String s ) { + System.err.println("RepositoryClassLoader: " + s); + } + private void log(String s, Throwable t ) { + System.err.println("RepositoryClassLoader: " + s); + t.printStackTrace(); + } + +} + Propchange: tomcat/connectors/trunk/util/loader/org/apache/tomcat/util/loader/RepositoryClassLoader.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: tomcat/connectors/trunk/util/loader/org/apache/tomcat/util/loader/RepositoryClassLoader.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]