/*
 * 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.catalina;

import java.io.File;
import java.util.concurrent.ScheduledExecutorService;

import org.apache.catalina.deploy.NamingResourcesImpl;
import org.apache.catalina.startup.Catalina;

A Server element represents the entire Catalina servlet container. Its attributes represent the characteristics of the servlet container as a whole. A Server may contain one or more Services, and the top level set of naming resources.

Normally, an implementation of this interface will also implement Lifecycle, such that when the start() and stop() methods are called, all of the defined Services are also started or stopped.

In between, the implementation must open a server socket on the port number specified by the port property. When a connection is accepted, the first line is read and compared with the specified shutdown command. If the command matches, shutdown of the server is initiated.

NOTE - The concrete implementation of this class should register the (singleton) instance with the ServerFactory class in its constructor(s).

Author:Craig R. McClanahan
/** * A <code>Server</code> element represents the entire Catalina * servlet container. Its attributes represent the characteristics of * the servlet container as a whole. A <code>Server</code> may contain * one or more <code>Services</code>, and the top level set of naming * resources. * <p> * Normally, an implementation of this interface will also implement * <code>Lifecycle</code>, such that when the <code>start()</code> and * <code>stop()</code> methods are called, all of the defined * <code>Services</code> are also started or stopped. * <p> * In between, the implementation must open a server socket on the port number * specified by the <code>port</code> property. When a connection is accepted, * the first line is read and compared with the specified shutdown command. * If the command matches, shutdown of the server is initiated. * <p> * <strong>NOTE</strong> - The concrete implementation of this class should * register the (singleton) instance with the <code>ServerFactory</code> * class in its constructor(s). * * @author Craig R. McClanahan */
public interface Server extends Lifecycle { // ------------------------------------------------------------- Properties
Returns:the global naming resources.
/** * @return the global naming resources. */
public NamingResourcesImpl getGlobalNamingResources();
Set the global naming resources.
Params:
  • globalNamingResources – The new global naming resources
/** * Set the global naming resources. * * @param globalNamingResources The new global naming resources */
public void setGlobalNamingResources (NamingResourcesImpl globalNamingResources);
Returns:the global naming resources context.
/** * @return the global naming resources context. */
public javax.naming.Context getGlobalNamingContext();
See Also:
Returns:the port number we listen to for shutdown commands.
/** * @return the port number we listen to for shutdown commands. * * @see #getPortOffset() * @see #getPortWithOffset() */
public int getPort();
Set the port number we listen to for shutdown commands.
Params:
  • port – The new port number
See Also:
/** * Set the port number we listen to for shutdown commands. * * @param port The new port number * * @see #setPortOffset(int) */
public void setPort(int port);
Get the number that offsets the port used for shutdown commands. For example, if port is 8005, and portOffset is 1000, the server listens at 9005.
Returns:the port offset
/** * Get the number that offsets the port used for shutdown commands. * For example, if port is 8005, and portOffset is 1000, * the server listens at 9005. * * @return the port offset */
public int getPortOffset();
Set the number that offsets the server port used for shutdown commands. For example, if port is 8005, and you set portOffset to 1000, connector listens at 9005.
Params:
  • portOffset – sets the port offset
/** * Set the number that offsets the server port used for shutdown commands. * For example, if port is 8005, and you set portOffset to 1000, * connector listens at 9005. * * @param portOffset sets the port offset */
public void setPortOffset(int portOffset);
Get the actual port on which server is listening for the shutdown commands. If you do not set port offset, port is returned. If you set port offset, port offset + port is returned.
Returns:the port with offset
/** * Get the actual port on which server is listening for the shutdown commands. * If you do not set port offset, port is returned. If you set * port offset, port offset + port is returned. * * @return the port with offset */
public int getPortWithOffset();
Returns:the address on which we listen to for shutdown commands.
/** * @return the address on which we listen to for shutdown commands. */
public String getAddress();
Set the address on which we listen to for shutdown commands.
Params:
  • address – The new address
/** * Set the address on which we listen to for shutdown commands. * * @param address The new address */
public void setAddress(String address);
Returns:the shutdown command string we are waiting for.
/** * @return the shutdown command string we are waiting for. */
public String getShutdown();
Set the shutdown command we are waiting for.
Params:
  • shutdown – The new shutdown command
/** * Set the shutdown command we are waiting for. * * @param shutdown The new shutdown command */
public void setShutdown(String shutdown);
Returns:the parent class loader for this component. If not set, return getCatalina() Catalina.getParentClassLoader(). If catalina has not been set, return the system class loader.
/** * @return the parent class loader for this component. If not set, return * {@link #getCatalina()} {@link Catalina#getParentClassLoader()}. If * catalina has not been set, return the system class loader. */
public ClassLoader getParentClassLoader();
Set the parent class loader for this server.
Params:
  • parent – The new parent class loader
/** * Set the parent class loader for this server. * * @param parent The new parent class loader */
public void setParentClassLoader(ClassLoader parent);
Returns:the outer Catalina startup/shutdown component if present.
/** * @return the outer Catalina startup/shutdown component if present. */
public Catalina getCatalina();
Set the outer Catalina startup/shutdown component if present.
Params:
  • catalina – the outer Catalina component
/** * Set the outer Catalina startup/shutdown component if present. * * @param catalina the outer Catalina component */
public void setCatalina(Catalina catalina);
Returns:the configured base (instance) directory. Note that home and base may be the same (and are by default). If this is not set the value returned by getCatalinaHome() will be used.
/** * @return the configured base (instance) directory. Note that home and base * may be the same (and are by default). If this is not set the value * returned by {@link #getCatalinaHome()} will be used. */
public File getCatalinaBase();
Set the configured base (instance) directory. Note that home and base may be the same (and are by default).
Params:
  • catalinaBase – the configured base directory
/** * Set the configured base (instance) directory. Note that home and base * may be the same (and are by default). * * @param catalinaBase the configured base directory */
public void setCatalinaBase(File catalinaBase);
Returns:the configured home (binary) directory. Note that home and base may be the same (and are by default).
/** * @return the configured home (binary) directory. Note that home and base * may be the same (and are by default). */
public File getCatalinaHome();
Set the configured home (binary) directory. Note that home and base may be the same (and are by default).
Params:
  • catalinaHome – the configured home directory
/** * Set the configured home (binary) directory. Note that home and base * may be the same (and are by default). * * @param catalinaHome the configured home directory */
public void setCatalinaHome(File catalinaHome);
Get the utility thread count.
Returns:the thread count
/** * Get the utility thread count. * @return the thread count */
public int getUtilityThreads();
Set the utility thread count.
Params:
  • utilityThreads – the new thread count
/** * Set the utility thread count. * @param utilityThreads the new thread count */
public void setUtilityThreads(int utilityThreads); // --------------------------------------------------------- Public Methods
Add a new Service to the set of defined Services.
Params:
  • service – The Service to be added
/** * Add a new Service to the set of defined Services. * * @param service The Service to be added */
public void addService(Service service);
Wait until a proper shutdown command is received, then return.
/** * Wait until a proper shutdown command is received, then return. */
public void await();
Find the specified Service
Params:
  • name – Name of the Service to be returned
Returns:the specified Service, or null if none exists.
/** * Find the specified Service * * @param name Name of the Service to be returned * @return the specified Service, or <code>null</code> if none exists. */
public Service findService(String name);
Returns:the set of Services defined within this Server.
/** * @return the set of Services defined within this Server. */
public Service[] findServices();
Remove the specified Service from the set associated from this Server.
Params:
  • service – The Service to be removed
/** * Remove the specified Service from the set associated from this * Server. * * @param service The Service to be removed */
public void removeService(Service service);
Returns:the token necessary for operations on the associated JNDI naming context.
/** * @return the token necessary for operations on the associated JNDI naming * context. */
public Object getNamingToken();
Returns:the utility executor managed by the Service.
/** * @return the utility executor managed by the Service. */
public ScheduledExecutorService getUtilityExecutor(); }