# 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.

## Nested Class Summary

### Nested classes/interfaces inherited from interface Lifecycle

`Lifecycle.SingleUse`

## Field Summary

### Fields inherited from class LifecycleMBeanBase

`mserver`

### Fields inherited from interface 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()`
Subclasses 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 subclasses to identify the domain in which MBeans should be registered.
`Context`
`getGlobalNamingContext()`
`NamingResourcesImpl`
`getGlobalNamingResources()`
`Object`
`getNamingToken()`
`protected String`
`getObjectNameKeyProperties()`
Allow subclasses 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()`
Subclasses 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()`
Subclasses must ensure that the state is changed to `LifecycleState.STARTING` during the execution of this method.
`void`
`stopAwait()`
`protected void`
`stopInternal()`
Subclasses 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 LifecycleMBeanBase

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

### Methods inherited from class LifecycleBase

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

### Methods inherited from class Object

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

### Methods inherited from interface 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 array 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`
Subclasses 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`
Subclasses 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
Subclasses 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`
Subclasses 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 subclasses 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 subclasses 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.