Apache Celix is a framework for C and C++14 to develop dynamic modular software applications using component and in-process service-oriented programming. Apache Celix is inspired by the OSGi specification and adapted to C and C++.
The main way to use Celix is by creating dynamic modules named bundles.
An Apache Celix Bundle contains a collection of shared libraries, configuration files and optional an activation entry combined in a zip file. Bundles can be dynamically installed and started in an Apache Celix framework.
When a bundle is started a C or C++ bundle context will be injected in the bundle activator.
#include <celix_api.h> typedef struct activator_data { /*intentional empty*/ } activator_data_t; static celix_status_t activator_start(activator_data_t *data, celix_bundle_context_t *ctx) { //use the bundle context ctx to activate the bundle return CELIX_SUCCESS; } static celix_status_t activator_stop(activator_data_t *data, celix_bundle_context_t *ctx) { //use the bundle context ctx to cleanup return CELIX_SUCCESS; } CELIX_GEN_BUNDLE_ACTIVATOR(activator_data_t, activator_start, activator_stop)
#include <celix/BundleActivator.h> class MyBundleActivator { public: explicit MyBundleActivator(const std::shared_ptr<celix::BundleContext>& ctx) { //use the bundle context ctx to activate the bundle } }; CELIX_GEN_CXX_BUNDLE_ACTIVATOR(MyBundleActivator)
See include/celix_bundle_context.h as a starting point for the C API.
See celix::BundleContext as a starting point for the C++ API.