org.apache.catalina.core
public abstract class ContainerBase extends Object implements Container, Lifecycle, Pipeline, MBeanRegistration, Serializable
getInfo()
, and may implement
a replacement for invoke()
.
All subclasses of this abstract base class will include support for a
Pipeline object that defines the processing to be performed for each request
received by the invoke()
method of this class, utilizing the
"Chain of Responsibility" design pattern. A subclass should encapsulate its
own processing functionality as a Valve
, and configure this
Valve into the pipeline by calling setBasic()
.
This implementation fires property change events, per the JavaBeans design
pattern, for changes in singleton properties. In addition, it fires the
following ContainerEvent
events to listeners who register
themselves with addContainerListener()
:
Type | Data | Description |
---|---|---|
addChild |
Container |
Child container added to this Container. |
addValve |
Valve |
Valve added to this Container. |
removeChild |
Container |
Child container removed from this Container. |
removeValve |
Valve |
Valve removed from this Container. |
start |
null |
Container was started. |
stop |
null |
Container was stopped. |
Nested Class Summary | |
---|---|
protected class | ContainerBase.ContainerBackgroundProcessor
Private thread class to invoke the backgroundProcess method
of this container and its children after a fixed delay. |
protected class | ContainerBase.PrivilegedAddChild
Perform addChild with the permissions of this class.
addChild can be called with the XML parser on the stack,
this allows the XML parser to have fewer privileges than
Tomcat. |
Field Summary | |
---|---|
protected int | backgroundProcessorDelay
The processor delay for this component. |
protected HashMap | children
The child Containers belonging to this Container, keyed by name. |
protected Cluster | cluster
The cluster with which this Container is associated. |
protected ObjectName | controller |
protected String | domain |
protected boolean | initialized |
protected LifecycleSupport | lifecycle
The lifecycle event support for this component. |
protected ArrayList | listeners
The container event listeners for this Container. |
protected Loader | loader
The Loader implementation with which this Container is associated. |
protected Log | logger
The Logger implementation with which this Container is associated. |
protected String | logName
Associated logger name. |
protected Manager | manager
The Manager implementation with which this Container is associated. |
protected MBeanServer | mserver |
protected String | name
The human-readable name of this Container. |
protected ObjectName | oname |
protected Container | parent
The parent Container to which this Container is a child. |
protected ClassLoader | parentClassLoader
The parent class loader to be configured when we install a Loader. |
protected Pipeline | pipeline
The Pipeline object with which this Container is associated. |
protected Realm | realm
The Realm with which this Container is associated. |
protected DirContext | resources
The resources DirContext object with which this Container is associated. |
protected static StringManager | sm
The string manager for this package. |
protected boolean | startChildren
Will children be started automatically when they are added. |
protected boolean | started
Has this component been started? |
protected String | suffix |
protected PropertyChangeSupport | support
The property change support for this component. |
protected String | type |
Method Summary | |
---|---|
void | addChild(Container child)
Add a new child Container to those associated with this Container,
if supported. |
void | addContainerListener(ContainerListener listener)
Add a container event listener to this component.
|
void | addLifecycleListener(LifecycleListener listener)
Add a lifecycle event listener to this component.
|
void | addPropertyChangeListener(PropertyChangeListener listener)
Add a property change listener to this component.
|
void | addValve(Valve valve)
Add a new Valve to the end of the pipeline associated with this
Container. |
void | backgroundProcess()
Execute a periodic task, such as reloading, etc. |
ObjectName | createObjectName(String domain, ObjectName parent) |
void | destroy() |
Container | findChild(String name)
Return the child Container, associated with this Container, with
the specified name (if any); otherwise, return null
|
Container[] | findChildren()
Return the set of children Containers associated with this Container.
|
ContainerListener[] | findContainerListeners()
Return the set of container listeners associated with this Container.
|
LifecycleListener[] | findLifecycleListeners()
Get the lifecycle listeners associated with this lifecycle. |
void | fireContainerEvent(String type, Object data)
Notify all container event listeners that a particular event has
occurred for this Container. |
int | getBackgroundProcessorDelay()
Get the delay between the invocation of the backgroundProcess method on
this container and its children. |
Valve | getBasic() Return the Valve instance that has been distinguished as the basic Valve for this Pipeline (if any). |
ObjectName[] | getChildren() |
Cluster | getCluster()
Return the Cluster with which this Container is associated. |
String | getContainerSuffix() |
String | getDomain() |
Valve | getFirst()
Return the first valve in the pipeline. |
String | getInfo()
Return descriptive information about this Container implementation and
the corresponding version number, in the format
<description>/<version> . |
ObjectName | getJmxName() |
protected String | getJSR77Suffix() |
Loader | getLoader()
Return the Loader with which this Container is associated. |
Log | getLogger()
Return the Logger with which this Container is associated. |
Manager | getManager()
Return the Manager with which this Container is associated. |
Object | getMappingObject()
Return an object which may be utilized for mapping to this component. |
String | getName()
Return a name string (suitable for use by humans) that describes this
Container. |
String | getObjectName() |
Container | getParent()
Return the Container for which this Container is a child, if there is
one. |
ClassLoader | getParentClassLoader()
Return the parent class loader (if any) for this web application.
|
ObjectName | getParentName() |
Pipeline | getPipeline()
Return the Pipeline object that manages the Valves associated with
this Container. |
Realm | getRealm()
Return the Realm with which this Container is associated. |
DirContext | getResources()
Return the resources DirContext object with which this Container is
associated. |
boolean | getStartChildren()
Return if children of this container will be started automatically when
they are added to this container. |
String | getType() |
ObjectName[] | getValveObjectNames() |
Valve[] | getValves()
Return the set of Valves in the pipeline associated with this
Container, including the basic Valve (if any). |
void | init() Init method, part of the MBean lifecycle.
|
void | invoke(Request request, Response response)
Process the specified Request, to produce the corresponding Response,
by invoking the first Valve in our pipeline (if any), or the basic
Valve otherwise.
|
protected String | logName()
Return the abbreviated name of this container for logging messsages |
void | postDeregister() |
void | postRegister(Boolean registrationDone) |
void | preDeregister() |
ObjectName | preRegister(MBeanServer server, ObjectName name) |
void | removeChild(Container child)
Remove an existing child Container from association with this parent
Container.
|
void | removeContainerListener(ContainerListener listener)
Remove a container event listener from this component.
|
void | removeLifecycleListener(LifecycleListener listener)
Remove a lifecycle event listener from this component.
|
void | removePropertyChangeListener(PropertyChangeListener listener)
Remove a property change listener from this component.
|
void | removeValve(Valve valve)
Remove the specified Valve from the pipeline associated with this
Container, if it is found; otherwise, do nothing.
|
void | setBackgroundProcessorDelay(int delay)
Set the delay between the invocation of the execute method on this
container and its children.
|
void | setBasic(Valve valve) Set the Valve instance that has been distinguished as the basic Valve for this Pipeline (if any). |
void | setCluster(Cluster cluster)
Set the Cluster with which this Container is associated.
|
void | setDomain(String domain) |
void | setLoader(Loader loader)
Set the Loader with which this Container is associated.
|
void | setManager(Manager manager)
Set the Manager with which this Container is associated.
|
void | setName(String name)
Set a name string (suitable for use by humans) that describes this
Container. |
void | setParent(Container container)
Set the parent Container to which this Container is being added as a
child. |
void | setParentClassLoader(ClassLoader parent)
Set the parent class loader (if any) for this web application.
|
void | setRealm(Realm realm)
Set the Realm with which this Container is associated.
|
void | setResources(DirContext resources)
Set the resources DirContext object with which this Container is
associated.
|
void | setStartChildren(boolean startChildren)
Set if children of this container will be started automatically when
they are added to this container.
|
void | start()
Prepare for active use of the public methods of this Component.
|
void | stop()
Gracefully shut down active use of the public methods of this Component.
|
protected void | threadStart()
Start the background thread that will periodically check for
session timeouts. |
protected void | threadStop()
Stop the background thread that is periodically checking for
session timeouts. |
setParent()
method must be called, with this
Container as an argument. This method may thrown an
IllegalArgumentException
if this Container chooses not
to be attached to the specified Container, in which case it is not added
Parameters: child New child Container to be added
Throws: IllegalArgumentException if this exception is thrown by
the setParent()
method of the child Container IllegalArgumentException if the new child does not have
a name unique from that of existing children of this Container IllegalStateException if this Container does not support
child Containers
Parameters: listener The listener to add
Parameters: listener The listener to add
Parameters: listener The listener to add
setContainer
method must be called, with this Container
as an argument. The method may throw an
IllegalArgumentException
if this Valve chooses not to
be associated with this Container, or IllegalStateException
if it is already associated with a different Container.
Parameters: valve Valve to be added
Throws: IllegalArgumentException if this Container refused to accept the specified Valve IllegalArgumentException if the specifie Valve refuses to be associated with this Container IllegalStateException if the specified Valve is already associated with a different Container
null
Parameters: name Name of the child Container to be retrieved
Parameters: type Event type data Event data
Return the Valve instance that has been distinguished as the basic Valve for this Pipeline (if any).
null
.<description>/<version>
.null
.null
.null
.null
.null
.null
.Throws: Exception
Parameters: request Request to be processed response Response to be produced
Throws: IllegalStateException if neither a pipeline or a basic Valve have been configured for this Container IOException if an input/output error occurred while processing ServletException if a ServletException was thrown while processing this request
Parameters: child Existing child Container to be removed
Parameters: listener The listener to remove
Parameters: listener The listener to remove
Parameters: listener The listener to remove
Parameters: valve Valve to be removed
Parameters: delay The delay in seconds between the invocation of backgroundProcess methods
Set the Valve instance that has been distinguished as the basic
Valve for this Pipeline (if any). Prioer to setting the basic Valve,
the Valve's setContainer()
will be called, if it
implements Contained
, with the owning Container as an
argument. The method may throw an IllegalArgumentException
if this Valve chooses not to be associated with this Container, or
IllegalStateException
if it is already associated with
a different Container.
Parameters: valve Valve to be distinguished as the basic Valve
Parameters: cluster The newly associated Cluster
Parameters: loader The newly associated loader
Parameters: manager The newly associated Manager
Parameters: name New name of this container
Throws: IllegalStateException if this Container has already been added to the children of a parent Container (after which the name may not be changed)
Parameters: container Container to which this Container is being added as a child
Throws: IllegalArgumentException if this Container refuses to become attached to the specified Container
Parameters: parent The new parent class loader
Parameters: realm The newly associated Realm
Parameters: resources The newly associated DirContext
Parameters: startChildren New value of the startChildren flag
Throws: LifecycleException if this component detects a fatal error that prevents it from being started
Throws: LifecycleException if this component detects a fatal error that needs to be reported