The UnboundID Server SDK provides a number of mechanisms for performing custom processing when the server is starting up and/or shutting down. This section describes the differences between those mechanisms and the contexts in which they should be used.
Whenever an extension is prepared for use in the server, then a method is invoked
in that extension to allow it to perform any appropriate initialization (e.g.,
parsing arguments provided to the extension). If an extension is already defined
and enabled in the server configuration, then this initialization will occur
during server startup. Otherwise, it will be invoked whenever a new instance of
the extension is added to the server configuration (if that extension is enabled
at the time it is added), or when an existing disabled extension is updated so
that it is enabled. If you need to perform processing whenever an extension is
initialized, regardless of whether that initialization is performed at startup or
after the server is already running, then the extension's
initialize
{ExtensionType} method should be used to accomplish
that.
Similarly, each type of extension also provides a method that will be invoked
whenever that extension will be taken out of service (e.g., to close any files or
free up any other resources it might have been using). If an extension is
disabled while the server is still running, then this finalization will occur at
that time. Otherwise, it will be invoked as part of the server shutdown
processing. If you need to perform processing whenever an extension is taken out
of service, whether at shutdown or while the server is still running, then the
extension's finalize
{ExtensionType} method should be used to
do that.
If you want to have a certain set of processing performed only at the time that
the server is started rather than any time that an extension is initialized, then
you should use a startup plugin (i.e., create a Java-based or scripted plugin that
implements the doStartup
method).
Note that if you include code in the initializePlugin
method, then it
will be invoked whenever the plugin is initialized, regardless of whether that
occurs at startup or after the server is already running. If it is at startup,
then the initializePlugin
method will be invoked before the
doStartup
method. If the plugin is added to the server after it has
already been started, then the initializePlugin
method will be
invoked at that time, but the doStartup
method will not be invoked
until the next time the server is started.
By default, startup plugins will be invoked very late in the startup process,
after nearly all other server components have been initialized but before the
server has begun accepting client connections. This helps ensure that any other
components the plugin might need to reference will be available for use. However,
if it is necessary for that to occur earlier in the startup process, then that can
be accomplished by implementing the getStartupDependencies
method and
returning a set containing the minimal set of dependencies that must be satisfied
before the processing should be invoked.
Similarly, plugins can implement a doShutdown
method, which will be
invoked only when the server is shutting down. This processing will be invoked
very early in the shutdown process after the server has stopped accepting new
connections and closed all existing connections, but before shutting down most
other components.
If a plugin implements both the doShutdown
and
finalizePlugin
methods, then both methods will be invoked at shutdown
if the plugin is enabled, with the doShutdown
method called before
the finalizePlugin
method. However, if the plugin is disabled while
the server is still running, then the finalizePlugin
method will be
invoked at that time, and the doShutdown
method will not be invoked
when the server is shut down.
If you want to have a non-plugin extension perform some kind of processing only
when the server is shutting down, then you can have that extension implement the
ServerShutdownListener
interface and use the
ServerContext.registerShutdownListener
method to register that
listener to be invoked whenever the server is shut down.
Note that if an extension is registered as a shutdown listener, then both the
processServerShutdown
method and the extension's
finalize
{ExtensionType} method will be invoked (in that order)
at server shutdown. Also note that even if an extension is disabled, if it has
previously been registered as a shutdown listener, then its
processServerShutdown
method will be invoked unless it is also
deregistered as a shutdown listener in its
finalize
{ExtensionType} method.