This chapter describes the general use of plugins in SeisComP.
Plugins expand the functionality of applications. They are C++ shared object libraries which are dynamically loaded at runtime into an application.
Typical plugins provide access to:
By just loading a plugin an application does not change
it’s way to function magically. Common plugins just implement a certain
interface (see e.g. messaging or RecordStream) and exhibit that functionality
by adding a new entry to the internal interface factory. As an example an
application makes use of interface
DatabaseInterface. Technically it
creates a new object implementing a certain interface by calling the C++
db = DatabaseInterface::Create("mysql");
Without having a plugin loaded the returned object will be NULL or to put it in other words, there is not implementation for mysql available.
Once the plugin
dbmysql is loaded into the application, an implementation
for type mysql is added and will be available to the application. It is
still required for the application to explicitly ask for a particular
interface. That is most likely left to the user by adding a corresponding
configuration option to the configuration file.
That means, if an application loads two plugins, e.g.
dbpostgresql that does not mean that it will not read from two database
at a time. It means the user has now the option to either use a MySQL database
or a PostgreSQL database. He still needs to make his choice in the
Trunk plugins are only supported as shared object libraries and therefore are required to be written in C++. Implementations for all available interfaces can be added. An incomplete list of SeisComP C++ interfaces:
This is just a subset of available extensible interface factories. The emphasized entries refer to the factories which are most commonly extended.
Location and Configuration¶
Plugins are located in
$SEISCOMP_ROOT/share/pugins. In order to make a
plugins available for a module it must be added to the configuration of
plugins of the global parameters of a module or in
plugins with the name of a plugin will let the exclusively
use this plugin and no other ones, e.g. default plugins. Example:
plugins = evrc
In order to add a plugin to the default plugins or plugins loaded by before, e.g. by the global configuration, load these