# Poco::Util

# class Subsystem

Library: Util
Package: Application
Header: Poco/Util/Subsystem.h

## Description

Subsystems extend an application in a modular way.

The Subsystem class provides a common interface for subsystems so that subsystems can be automatically initialized at startup and uninitialized at shutdown.

Subsystems should also support dynamic reconfiguration, so that they can be reconfigured anytime during the life of a running application.

The degree to which dynamic reconfiguration is supported is up to the actual subsystem implementation. It can range from ignoring the reconfiguration request (not recommended), to changing certain settings that affect the performance, to a complete reinitialization.

## Inheritance

Direct Base Classes: Poco::RefCountedObject

All Base Classes: Poco::RefCountedObject

Known Derived Classes: Application, LoggingSubsystem, ServerApplication

## Member Summary

Member Functions: defineOptions, initialize, name, reinitialize, uninitialize

Inherited Functions: duplicate, referenceCount, release

## Constructors

### Subsystem

Subsystem();

Creates the Subsystem.

## Destructor

### ~Subsystem

virtual ~Subsystem();

Destroys the Subsystem.

## Member Functions

### name

virtual const char * name() const = 0;

Returns the name of the subsystem. Must be implemented by subclasses.

### defineOptions

virtual void defineOptions(
OptionSet & options
);

Called before the Application's command line processing begins. If a subsystem wants to support command line arguments, it must override this method. The default implementation does not define any options.

To effectively handle options, a subsystem should either bind the option to a configuration property or specify a callback to handle the option.

### initialize

virtual void initialize(
Application & app
) = 0;

Initializes the subsystem.

### reinitialize

virtual void reinitialize(
Application & app
);

Re-initializes the subsystem.

The default implementation just calls uninitialize() followed by initialize(). Actual implementations might want to use a less radical and possibly more performant approach.

### uninitialize

virtual void uninitialize() = 0;

Uninitializes the subsystem.