# Class StandardServer

java.lang.Object
org.apache.catalina.util.LifecycleBase
org.apache.catalina.util.LifecycleMBeanBase
org.apache.catalina.core.StandardServer

All Implemented Interfaces:
  `MBeanRegistration`, `JmxEnabled`, `Lifecycle`, `Server`

public final class StandardServer extends LifecycleMBeanBase implements Server
Standard implementation of the Server interface, available for use (but not required) when deploying and starting Catalina.

Author:
  Craig R. McClanahan

- ## Nested Class Summary

  ### Nested classes/interfaces inherited from interface org.apache.catalina.Lifecycle

  `Lifecycle.SingleUse`

- ## Field Summary

  ### Fields inherited from interface org.apache.catalina.Lifecycle

  `AFTER_DESTROY_EVENT, AFTER_INIT_EVENT, AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_DESTROY_EVENT, BEFORE_INIT_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, CONFIGURE_START_EVENT, CONFIGURE_STOP_EVENT, PERIODIC_EVENT, START_EVENT, STOP_EVENT`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `StandardServer()`
  Construct a default instance of this class.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addPropertyChangeListener(PropertyChangeListener listener)`
  Add a property change listener to this component.
  `void`
  `addService(Service service)`
  Add a new Service to the set of defined Services.
  `void`
  `await()`
  Wait until a proper shutdown command is received, then return.
  `protected void`
  `destroyInternal()`
  Sub-classes implement this method to perform any instance destruction required.
  `Service`
  `findService(String name)`
  Find the specified Service
  `Service[]`
  `findServices()`
  `String`
  `getAddress()`
  `Catalina`
  `getCatalina()`
  `File`
  `getCatalinaBase()`
  `File`
  `getCatalinaHome()`
  `protected String`
  `getDomainInternal()`
  Method implemented by sub-classes to identify the domain in which MBeans should be registered.
  `Context`
  `getGlobalNamingContext()`
  `NamingResourcesImpl`
  `getGlobalNamingResources()`
  `Object`
  `getNamingToken()`
  `protected String`
  `getObjectNameKeyProperties()`
  Allow sub-classes to specify the key properties component of the `ObjectName` that will be used to register this component.
  `ClassLoader`
  `getParentClassLoader()`
  `int`
  `getPeriodicEventDelay()`
  `int`
  `getPort()`
  `int`
  `getPortOffset()`
  Get the number that offsets the port used for shutdown commands.
  `int`
  `getPortWithOffset()`
  Get the actual port on which server is listening for the shutdown commands.
  `String`
  `getServerBuilt()`
  Return the current server built timestamp
  `String`
  `getServerInfo()`
  Report the current Tomcat Server Release number
  `String`
  `getServerNumber()`
  Return the current server's version number.
  `ObjectName[]`
  `getServiceNames()`
  `String`
  `getShutdown()`
  `ScheduledExecutorService`
  `getUtilityExecutor()`
  `int`
  `getUtilityThreads()`
  Get the utility thread count.
  `boolean`
  `getUtilityThreadsAsDaemon()`
  Get if the utility threads are daemon threads.
  `protected void`
  `initInternal()`
  Sub-classes implement this method to perform any instance initialisation required.
  `void`
  `removePropertyChangeListener(PropertyChangeListener listener)`
  Remove a property change listener from this component.
  `void`
  `removeService(Service service)`
  Remove the specified Service from the set associated from this Server.
  `void`
  `setAddress(String address)`
  Set the address on which we listen to for shutdown commands.
  `void`
  `setCatalina(Catalina catalina)`
  Set the outer Catalina startup/shutdown component if present.
  `void`
  `setCatalinaBase(File catalinaBase)`
  Set the configured base (instance) directory.
  `void`
  `setCatalinaHome(File catalinaHome)`
  Set the configured home (binary) directory.
  `void`
  `setGlobalNamingContext(Context globalNamingContext)`
  Set the global naming resources context.
  `void`
  `setGlobalNamingResources(NamingResourcesImpl globalNamingResources)`
  Set the global naming resources.
  `void`
  `setParentClassLoader(ClassLoader parent)`
  Set the parent class loader for this server.
  `void`
  `setPeriodicEventDelay(int periodicEventDelay)`
  Set the new period between two lifecycle events in seconds.
  `void`
  `setPort(int port)`
  Set the port number we listen to for shutdown commands.
  `void`
  `setPortOffset(int portOffset)`
  Set the number that offsets the server port used for shutdown commands.
  `void`
  `setShutdown(String shutdown)`
  Set the shutdown command we are waiting for.
  `void`
  `setUtilityThreads(int utilityThreads)`
  Set the utility thread count.
  `void`
  `setUtilityThreadsAsDaemon(boolean utilityThreadsAsDaemon)`
  Set the utility threads daemon flag.
  `protected void`
  `startInternal()`
  Sub-classes must ensure that the state is changed to `LifecycleState.STARTING` during the execution of this method.
  `void`
  `stopAwait()`
  `protected void`
  `stopInternal()`
  Sub-classes must ensure that the state is changed to `LifecycleState.STOPPING` during the execution of this method.
  `void`
  `storeConfig()`
  Write the configuration information for this entire `Server` out to the server.xml configuration file.
  `void`
  `storeContext(Context context)`
  Write the configuration information for `Context` out to the specified configuration file.
  `String`
  `toString()`

  ### Methods inherited from class org.apache.catalina.util.LifecycleMBeanBase

  `getDomain, getObjectName, postDeregister, postRegister, preDeregister, preRegister, register, setDomain, unregister, unregister`

  ### Methods inherited from class org.apache.catalina.util.LifecycleBase

  `addLifecycleListener, destroy, findLifecycleListeners, fireLifecycleEvent, getState, getStateName, getThrowOnFailure, init, removeLifecycleListener, setState, setState, setThrowOnFailure, start, stop`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface org.apache.catalina.Lifecycle

  `addLifecycleListener, destroy, findLifecycleListeners, getState, getStateName, init, removeLifecycleListener, start, stop`

- ## Constructor Details

  - ### StandardServer

    public StandardServer()
    Construct a default instance of this class.

- ## Method Details

  - ### getNamingToken

    public Object getNamingToken()
    Specified by:
      `getNamingToken` in interface `Server`
    Returns:
      the token necessary for operations on the associated JNDI naming context.

  - ### getGlobalNamingContext

    public Context getGlobalNamingContext()
    Specified by:
      `getGlobalNamingContext` in interface `Server`
    Returns:
      the global naming resources context.

  - ### setGlobalNamingContext

    public void setGlobalNamingContext(Context globalNamingContext)
    Set the global naming resources context.
    Parameters:
      `globalNamingContext` - The new global naming resource context

  - ### getGlobalNamingResources

    public NamingResourcesImpl getGlobalNamingResources()
    Specified by:
      `getGlobalNamingResources` in interface `Server`
    Returns:
      the global naming resources.

  - ### setGlobalNamingResources

    public void setGlobalNamingResources(NamingResourcesImpl globalNamingResources)
    Description copied from interface: `Server`
    Set the global naming resources.
    Specified by:
      `setGlobalNamingResources` in interface `Server`
    Parameters:
      `globalNamingResources` - The new global naming resources

  - ### getServerInfo

    public String getServerInfo()
    Report the current Tomcat Server Release number
    Returns:
      Tomcat release identifier

  - ### getServerBuilt

    public String getServerBuilt()
    Return the current server built timestamp
    Returns:
      server built timestamp.

  - ### getServerNumber

    public String getServerNumber()
    Return the current server's version number.
    Returns:
      server's version number.

  - ### getPort

    public int getPort()
    Specified by:
      `getPort` in interface `Server`
    Returns:
      the port number we listen to for shutdown commands.
    See Also:
      - `Server.getPortOffset()`
      - `Server.getPortWithOffset()`

  - ### setPort

    public void setPort(int port)
    Description copied from interface: `Server`
    Set the port number we listen to for shutdown commands.
    Specified by:
      `setPort` in interface `Server`
    Parameters:
      `port` - The new port number
    See Also:
      - `Server.setPortOffset(int)`

  - ### getPortOffset

    public int getPortOffset()
    Description copied from interface: `Server`
    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.
    Specified by:
      `getPortOffset` in interface `Server`
    Returns:
      the port offset

  - ### setPortOffset

    public void setPortOffset(int portOffset)
    Description copied from interface: `Server`
    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.
    Specified by:
      `setPortOffset` in interface `Server`
    Parameters:
      `portOffset` - sets the port offset

  - ### getPortWithOffset

    public int getPortWithOffset()
    Description copied from interface: `Server`
    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.
    Specified by:
      `getPortWithOffset` in interface `Server`
    Returns:
      the port with offset

  - ### getAddress

    public String getAddress()
    Specified by:
      `getAddress` in interface `Server`
    Returns:
      the address on which we listen to for shutdown commands.

  - ### setAddress

    public void setAddress(String address)
    Description copied from interface: `Server`
    Set the address on which we listen to for shutdown commands.
    Specified by:
      `setAddress` in interface `Server`
    Parameters:
      `address` - The new address

  - ### getShutdown

    public String getShutdown()
    Specified by:
      `getShutdown` in interface `Server`
    Returns:
      the shutdown command string we are waiting for.

  - ### setShutdown

    public void setShutdown(String shutdown)
    Description copied from interface: `Server`
    Set the shutdown command we are waiting for.
    Specified by:
      `setShutdown` in interface `Server`
    Parameters:
      `shutdown` - The new shutdown command

  - ### getCatalina

    public Catalina getCatalina()
    Specified by:
      `getCatalina` in interface `Server`
    Returns:
      the outer Catalina startup/shutdown component if present.

  - ### setCatalina

    public void setCatalina(Catalina catalina)
    Description copied from interface: `Server`
    Set the outer Catalina startup/shutdown component if present.
    Specified by:
      `setCatalina` in interface `Server`
    Parameters:
      `catalina` - the outer Catalina component

  - ### getUtilityThreads

    public int getUtilityThreads()
    Description copied from interface: `Server`
    Get the utility thread count.
    Specified by:
      `getUtilityThreads` in interface `Server`
    Returns:
      the thread count

  - ### setUtilityThreads

    public void setUtilityThreads(int utilityThreads)
    Description copied from interface: `Server`
    Set the utility thread count.
    Specified by:
      `setUtilityThreads` in interface `Server`
    Parameters:
      `utilityThreads` - the new thread count

  - ### getUtilityThreadsAsDaemon

    public boolean getUtilityThreadsAsDaemon()
    Get if the utility threads are daemon threads.
    Returns:
      the threads daemon flag

  - ### setUtilityThreadsAsDaemon

    public void setUtilityThreadsAsDaemon(boolean utilityThreadsAsDaemon)
    Set the utility threads daemon flag. The default value is true.
    Parameters:
      `utilityThreadsAsDaemon` - the new thread daemon flag

  - ### getPeriodicEventDelay

    public int getPeriodicEventDelay()
    Returns:
      The period between two lifecycle events, in seconds

  - ### setPeriodicEventDelay

    public void setPeriodicEventDelay(int periodicEventDelay)
    Set the new period between two lifecycle events in seconds.
    Parameters:
      `periodicEventDelay` - The period in seconds, negative or zero will disable events

  - ### addService

    public void addService(Service service)
    Description copied from interface: `Server`
    Add a new Service to the set of defined Services.
    Specified by:
      `addService` in interface `Server`
    Parameters:
      `service` - The Service to be added

  - ### stopAwait

    public void stopAwait()

  - ### await

    public void await()
    Description copied from interface: `Server`
    Wait until a proper shutdown command is received, then return.
    Specified by:
      `await` in interface `Server`

  - ### findService

    public Service findService(String name)
    Description copied from interface: `Server`
    Find the specified Service
    Specified by:
      `findService` in interface `Server`
    Parameters:
      `name` - Name of the Service to be returned
    Returns:
      the specified Service, or `null` if none exists.

  - ### findServices

    public Service[] findServices()
    Specified by:
      `findServices` in interface `Server`
    Returns:
      the set of Services defined within this Server.

  - ### getServiceNames

    public ObjectName[] getServiceNames()
    Returns:
      the JMX service names.

  - ### removeService

    public void removeService(Service service)
    Description copied from interface: `Server`
    Remove the specified Service from the set associated from this Server.
    Specified by:
      `removeService` in interface `Server`
    Parameters:
      `service` - The Service to be removed

  - ### getCatalinaBase

    public File getCatalinaBase()
    Specified by:
      `getCatalinaBase` in interface `Server`
    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 `Server.getCatalinaHome()` will be used.

  - ### setCatalinaBase

    public void setCatalinaBase(File catalinaBase)
    Description copied from interface: `Server`
    Set the configured base (instance) directory. Note that home and base may be the same (and are by default).
    Specified by:
      `setCatalinaBase` in interface `Server`
    Parameters:
      `catalinaBase` - the configured base directory

  - ### getCatalinaHome

    public File getCatalinaHome()
    Specified by:
      `getCatalinaHome` in interface `Server`
    Returns:
      the configured home (binary) directory. Note that home and base may be the same (and are by default).

  - ### setCatalinaHome

    public void setCatalinaHome(File catalinaHome)
    Description copied from interface: `Server`
    Set the configured home (binary) directory. Note that home and base may be the same (and are by default).
    Specified by:
      `setCatalinaHome` in interface `Server`
    Parameters:
      `catalinaHome` - the configured home directory

  - ### addPropertyChangeListener

    public void addPropertyChangeListener(PropertyChangeListener listener)
    Add a property change listener to this component.
    Parameters:
      `listener` - The listener to add

  - ### removePropertyChangeListener

    public void removePropertyChangeListener(PropertyChangeListener listener)
    Remove a property change listener from this component.
    Parameters:
      `listener` - The listener to remove

  - ### toString

    public String toString()
    Overrides:
      `toString` in class `Object`

  - ### storeConfig

    public void storeConfig() throws InstanceNotFoundException, MBeanException
    Write the configuration information for this entire `Server` out to the server.xml configuration file.
    Throws:
      `InstanceNotFoundException` - if the managed resource object cannot be found
      `MBeanException` - if the initializer of the object throws an exception, or persistence is not supported
      `RuntimeOperationsException` - if an exception is reported by the persistence mechanism

  - ### storeContext

    public void storeContext(Context context) throws InstanceNotFoundException, MBeanException
    Write the configuration information for `Context` out to the specified configuration file.
    Parameters:
      `context` - the context which should save its configuration
    Throws:
      `InstanceNotFoundException` - if the managed resource object cannot be found
      `MBeanException` - if the initializer of the object throws an exception or persistence is not supported
      `RuntimeOperationsException` - if an exception is reported by the persistence mechanism

  - ### startInternal

    protected void startInternal() throws LifecycleException
    Description copied from class: `LifecycleBase`
    Sub-classes must ensure that the state is changed to `LifecycleState.STARTING` during the execution of this method. Changing state will trigger the `Lifecycle.START_EVENT` event. If a component fails to start it may either throw a `LifecycleException` which will cause it's parent to fail to start or it can place itself in the error state in which case `LifecycleBase.stop()` will be called on the failed component but the parent component will continue to start normally.
    Specified by:
      `startInternal` in class `LifecycleBase`
    Throws:
      `LifecycleException` - Start error occurred

  - ### stopInternal

    protected void stopInternal() throws LifecycleException
    Description copied from class: `LifecycleBase`
    Sub-classes must ensure that the state is changed to `LifecycleState.STOPPING` during the execution of this method. Changing state will trigger the `Lifecycle.STOP_EVENT` event.
    Specified by:
      `stopInternal` in class `LifecycleBase`
    Throws:
      `LifecycleException` - Stop error occurred

  - ### initInternal

    protected void initInternal() throws LifecycleException
    Sub-classes implement this method to perform any instance initialisation required.

    This is used to allow connectors to bind to restricted ports under Unix operating environments.

    Overrides:
      `initInternal` in class `LifecycleMBeanBase`
    Throws:
      `LifecycleException` - If the initialisation fails

  - ### destroyInternal

    protected void destroyInternal() throws LifecycleException
    Description copied from class: `LifecycleBase`
    Sub-classes implement this method to perform any instance destruction required.
    Overrides:
      `destroyInternal` in class `LifecycleMBeanBase`
    Throws:
      `LifecycleException` - If the destruction fails

  - ### getParentClassLoader

    public ClassLoader getParentClassLoader()
    Specified by:
      `getParentClassLoader` in interface `Server`
    Returns:
      the parent class loader for this component. If not set, return `Server.getCatalina()` `Catalina.getParentClassLoader()`. If catalina has not been set, return the system class loader.

  - ### setParentClassLoader

    public void setParentClassLoader(ClassLoader parent)
    Description copied from interface: `Server`
    Set the parent class loader for this server.
    Specified by:
      `setParentClassLoader` in interface `Server`
    Parameters:
      `parent` - The new parent class loader

  - ### getDomainInternal

    protected String getDomainInternal()
    Description copied from class: `LifecycleMBeanBase`
    Method implemented by sub-classes to identify the domain in which MBeans should be registered.
    Specified by:
      `getDomainInternal` in class `LifecycleMBeanBase`
    Returns:
      the MBean domain for this server. The domain is obtained using the following search order:
      1. Name of first `Engine`.
      2. Name of first `Service`.

  - ### getObjectNameKeyProperties

    protected String getObjectNameKeyProperties()
    Description copied from class: `LifecycleMBeanBase`
    Allow sub-classes to specify the key properties component of the `ObjectName` that will be used to register this component.
    Specified by:
      `getObjectNameKeyProperties` in class `LifecycleMBeanBase`
    Returns:
      The string representation of the key properties component of the desired `ObjectName`

  - ### getUtilityExecutor

    public ScheduledExecutorService getUtilityExecutor()
    Specified by:
      `getUtilityExecutor` in interface `Server`
    Returns:
      the utility executor managed by the Service.