001: /*
002: * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Loader.java,v 1.5 2001/07/22 20:13:30 pier Exp $
003: * $Revision: 1.5 $
004: * $Date: 2001/07/22 20:13:30 $
005: *
006: * ====================================================================
007: *
008: * The Apache Software License, Version 1.1
009: *
010: * Copyright (c) 1999 The Apache Software Foundation. All rights
011: * reserved.
012: *
013: * Redistribution and use in source and binary forms, with or without
014: * modification, are permitted provided that the following conditions
015: * are met:
016: *
017: * 1. Redistributions of source code must retain the above copyright
018: * notice, this list of conditions and the following disclaimer.
019: *
020: * 2. Redistributions in binary form must reproduce the above copyright
021: * notice, this list of conditions and the following disclaimer in
022: * the documentation and/or other materials provided with the
023: * distribution.
024: *
025: * 3. The end-user documentation included with the redistribution, if
026: * any, must include the following acknowlegement:
027: * "This product includes software developed by the
028: * Apache Software Foundation (http://www.apache.org/)."
029: * Alternately, this acknowlegement may appear in the software itself,
030: * if and wherever such third-party acknowlegements normally appear.
031: *
032: * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
033: * Foundation" must not be used to endorse or promote products derived
034: * from this software without prior written permission. For written
035: * permission, please contact apache@apache.org.
036: *
037: * 5. Products derived from this software may not be called "Apache"
038: * nor may "Apache" appear in their names without prior written
039: * permission of the Apache Group.
040: *
041: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
042: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
043: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
044: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
045: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
046: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
047: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
048: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
049: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
050: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
051: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
052: * SUCH DAMAGE.
053: * ====================================================================
054: *
055: * This software consists of voluntary contributions made by many
056: * individuals on behalf of the Apache Software Foundation. For more
057: * information on the Apache Software Foundation, please see
058: * <http://www.apache.org/>.
059: *
060: * [Additional notices, if required by prior licensing conditions]
061: *
062: */
063:
064: package org.apache.catalina;
065:
066: import java.beans.PropertyChangeListener;
067:
068: /**
069: * A <b>Loader</b> represents a Java ClassLoader implementation that can
070: * be used by a Container to load class files (within a repository associated
071: * with the Loader) that are designed to be reloaded upon request, as well as
072: * a mechanism to detect whether changes have occurred in the underlying
073: * repository.
074: * <p>
075: * In order for a <code>Loader</code> implementation to successfully operate
076: * with a <code>Context</code> implementation that implements reloading, it
077: * must obey the following constraints:
078: * <ul>
079: * <li>Must implement <code>Lifecycle</code> so that the Context can indicate
080: * that a new class loader is required.
081: * <li>The <code>start()</code> method must unconditionally create a new
082: * <code>ClassLoader</code> implementation.
083: * <li>The <code>stop()</code> method must throw away its reference to the
084: * <code>ClassLoader</code> previously utilized, so that the class loader,
085: * all classes loaded by it, and all objects of those classes, can be
086: * garbage collected.
087: * <li>Must allow a call to <code>stop()</code> to be followed by a call to
088: * <code>start()</code> on the same <code>Loader</code> instance.
089: * <li>Based on a policy chosen by the implementation, must call the
090: * <code>Context.reload()</code> method on the owning <code>Context</code>
091: * when a change to one or more of the class files loaded by this class
092: * loader is detected.
093: * </ul>
094: *
095: * @author Craig R. McClanahan
096: * @version $Revision: 1.5 $ $Date: 2001/07/22 20:13:30 $
097: */
098:
099: public interface Loader {
100:
101: // ------------------------------------------------------------- Properties
102:
103: /**
104: * Return the Java class loader to be used by this Container.
105: */
106: public ClassLoader getClassLoader();
107:
108: /**
109: * Return the Container with which this Loader has been associated.
110: */
111: public Container getContainer();
112:
113: /**
114: * Set the Container with which this Loader has been associated.
115: *
116: * @param container The associated Container
117: */
118: public void setContainer(Container container);
119:
120: /**
121: * Return the "follow standard delegation model" flag used to configure
122: * our ClassLoader.
123: */
124: public boolean getDelegate();
125:
126: /**
127: * Set the "follow standard delegation model" flag used to configure
128: * our ClassLoader.
129: *
130: * @param delegate The new flag
131: */
132: public void setDelegate(boolean delegate);
133:
134: /**
135: * Return descriptive information about this Loader implementation and
136: * the corresponding version number, in the format
137: * <code><description>/<version></code>.
138: */
139: public String getInfo();
140:
141: /**
142: * Return the reloadable flag for this Loader.
143: */
144: public boolean getReloadable();
145:
146: /**
147: * Set the reloadable flag for this Loader.
148: *
149: * @param reloadable The new reloadable flag
150: */
151: public void setReloadable(boolean reloadable);
152:
153: // --------------------------------------------------------- Public Methods
154:
155: /**
156: * Add a property change listener to this component.
157: *
158: * @param listener The listener to add
159: */
160: public void addPropertyChangeListener(
161: PropertyChangeListener listener);
162:
163: /**
164: * Add a new repository to the set of repositories for this class loader.
165: *
166: * @param repository Repository to be added
167: */
168: public void addRepository(String repository);
169:
170: /**
171: * Return the set of repositories defined for this class loader.
172: * If none are defined, a zero-length array is returned.
173: */
174: public String[] findRepositories();
175:
176: /**
177: * Has the internal repository associated with this Loader been modified,
178: * such that the loaded classes should be reloaded?
179: */
180: public boolean modified();
181:
182: /**
183: * Remove a property change listener from this component.
184: *
185: * @param listener The listener to remove
186: */
187: public void removePropertyChangeListener(
188: PropertyChangeListener listener);
189:
190: }
|