Apache Celix  latest
Apache Celix is a framework for C, C++14 and C++17 to develop dynamic modular software applications using component and in-process service-oriented programming.
BundleContext.h
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19 
20 #pragma once
21 
22 #include <memory>
23 #include <mutex>
24 #include <thread>
25 #include <cstdarg>
26 
27 #include "celix_bundle_context.h"
28 
31 #include "celix/TrackerBuilders.h"
33 #include "celix/Bundle.h"
34 #include "celix/Framework.h"
35 
37 
38 namespace celix {
39 
53  class BundleContext {
54  public:
55  explicit BundleContext(celix_bundle_context_t* _cCtx) :
56  cCtx{_cCtx, [](celix_bundle_context_t*){/*nop*/}},
57  dm{std::make_shared<celix::dm::DependencyManager>(_cCtx)},
58  bnd{celix_bundleContext_getBundle(_cCtx)} {}
59 
82  template<typename I, typename Implementer>
83  ServiceRegistrationBuilder<I> registerService(std::shared_ptr<Implementer> implementer, const std::string& name = {}) {
84  std::shared_ptr<I> svc = implementer; //note Implement should be derived from I
85  return ServiceRegistrationBuilder<I>{cCtx, std::move(svc), celix::typeName<I>(name)};
86  }
87 
98  template<typename I, typename Implementer>
99  ServiceRegistrationBuilder<I> registerUnmanagedService(Implementer* svc, const std::string& name = {}) {
100  auto unmanagedSvc = std::shared_ptr<I>{svc, [](I*){/*nop*/}};
101  return ServiceRegistrationBuilder<I>{cCtx, std::move(unmanagedSvc), celix::typeName<I>(name), true, false};
102  }
103 
104  //TODO registerServiceFactory<I>()
105 
138  template<typename I>
139  UseServiceBuilder<I> useService(const std::string& name = {}) {
140  return UseServiceBuilder<I>{cCtx, celix::typeName<I>(name), true};
141  }
142 
172  template<typename I>
173  UseServiceBuilder<I> useServices(const std::string& name = {}) {
174  return UseServiceBuilder<I>{cCtx, celix::typeName<I>(name), false};
175  }
176 
188  template<typename I>
189  long findService(const std::string& filter = {}, const std::string& versionRange = {}) {
190  return findServiceWithName(celix::typeName<I>(), filter, versionRange);
191  }
192 
202  long findServiceWithName(const std::string& name, const std::string& filter = {}, const std::string& versionRange = {}) {
205  opts.serviceName = name.empty() ? nullptr : name.data();
206  opts.filter = filter.empty() ? nullptr : filter.data();
207  opts.versionRange = versionRange.empty() ? nullptr : versionRange.data();
208  return celix_bundleContext_findServiceWithOptions(cCtx.get(), &opts);
209  }
210 
222  template<typename I>
223  std::vector<long> findServices(const std::string& filter = {}, const std::string& versionRange = {}) {
224  return findServicesWithName(celix::typeName<I>(), filter, versionRange);
225  }
226 
236  std::vector<long> findServicesWithName(const std::string& name, const std::string& filter = {}, const std::string& versionRange = {}) {
237  return findServicesWithNameInternal(
238  name.empty() ? nullptr : name.c_str(),
239  filter.empty() ? nullptr : filter.c_str(),
240  versionRange.empty() ? nullptr : versionRange.c_str());
241  }
242 
263  template<typename I>
264  ServiceTrackerBuilder<I> trackServices(const std::string& name = {}) {
265  return ServiceTrackerBuilder<I>{cCtx, celix::typeName<I>(name)};
266  }
267 
275  return ServiceTrackerBuilder<void>{cCtx, {}};
276  }
277 
278  //TODO UseBundleBuilder useBundles()
279 
295  return BundleTrackerBuilder{cCtx};
296  }
297 
318  template<typename I>
319  MetaTrackerBuilder trackServiceTrackers(const std::string& name = {}) {
320  return MetaTrackerBuilder(cCtx, celix::typeName<I>(name));
321  }
322 
329  return MetaTrackerBuilder(cCtx, {});
330  }
331 
337  return ScheduledEventBuilder{cCtx};
338  }
339 
349  long installBundle(const std::string& bndLocation, bool autoStart = true) {
350  return celix_bundleContext_installBundle(cCtx.get(), bndLocation.c_str(), autoStart);
351  }
352 
362  bool uninstallBundle(long bndId) {
363  return celix_bundleContext_uninstallBundle(cCtx.get(), bndId);
364  }
365 
379  bool startBundle(long bndId) {
380  return celix_bundleContext_startBundle(cCtx.get(), bndId);
381  }
382 
396  bool stopBundle(long bndId) {
397  return celix_bundleContext_stopBundle(cCtx.get(), bndId);
398  }
399 
421  bool updateBundle(long bndId, const std::string& updatedBundleUrl = {}) {
422  return celix_bundleContext_updateBundle(cCtx.get(), bndId, updatedBundleUrl.empty() ? nullptr : updatedBundleUrl.data());
423  }
424 
431  std::vector<long> listBundleIds() const {
432  return listBundlesInternal(true);
433  }
434 
441  std::vector<long> listInstalledBundleIds() {
442  return listBundlesInternal(false);
443  }
444 
456  std::string getConfigProperty(const std::string& name, const std::string& defaultValue) const {
457  return std::string{celix_bundleContext_getProperty(cCtx.get(), name.c_str(), defaultValue.c_str())};
458  }
459 
472  long getConfigPropertyAsLong(const std::string& name, long defaultValue) const {
473  return celix_bundleContext_getPropertyAsLong(cCtx.get(), name.c_str(), defaultValue);
474  }
475 
488  double getConfigPropertyAsDouble(const std::string& name, double defaultValue) const {
489  return celix_bundleContext_getPropertyAsDouble(cCtx.get(), name.c_str(), defaultValue);
490  }
491 
506  long getConfigPropertyAsBool(const std::string& name, bool defaultValue) const {
507  return celix_bundleContext_getPropertyAsBool(cCtx.get(), name.c_str(), defaultValue);
508  }
509 
513  const Bundle& getBundle() const {
514  return bnd;
515  }
516 
520  long getBundleId() const {
521  return bnd.getId();
522  }
523 
527  std::shared_ptr<Framework> getFramework() const {
528  auto* cFw = celix_bundleContext_getFramework(cCtx.get());
529  auto fwCtx = std::make_shared<celix::BundleContext>(celix_framework_getFrameworkContext(cFw));
530  return std::make_shared<Framework>(fwCtx, cFw);
531  }
532 
536  std::shared_ptr<dm::DependencyManager> getDependencyManager() const {
537  return dm;
538  }
539 
546  celix_bundle_context_t* getCBundleContext() const {
547  return cCtx.get();
548  }
549 
555  void logTrace(const char* format...) __attribute__((format(printf,2,3))) {
556  va_list args;
557  va_start(args, format);
558  celix_bundleContext_vlog(cCtx.get(), CELIX_LOG_LEVEL_TRACE, format, args);
559  va_end(args);
560  }
561 
567  void logDebug(const char* format...) __attribute__((format(printf,2,3))) {
568  va_list args;
569  va_start(args, format);
570  celix_bundleContext_vlog(cCtx.get(), CELIX_LOG_LEVEL_DEBUG, format, args);
571  va_end(args);
572  }
573 
579  void logInfo(const char* format...) __attribute__((format(printf,2,3))) {
580  va_list args;
581  va_start(args, format);
582  celix_bundleContext_vlog(cCtx.get(), CELIX_LOG_LEVEL_INFO, format, args);
583  va_end(args);
584  }
585 
591  void logWarn(const char* format...) __attribute__((format(printf,2,3))) {
592  va_list args;
593  va_start(args, format);
594  celix_bundleContext_vlog(cCtx.get(), CELIX_LOG_LEVEL_WARNING, format, args);
595  va_end(args);
596  }
597 
603  void logError(const char* format...) __attribute__((format(printf,2,3))) {
604  va_list args;
605  va_start(args, format);
606  celix_bundleContext_vlog(cCtx.get(), CELIX_LOG_LEVEL_ERROR, format, args);
607  va_end(args);
608  }
609 
615  void logFatal(const char* format...) __attribute__((format(printf,2,3))) {
616  va_list args;
617  va_start(args, format);
618  celix_bundleContext_vlog(cCtx.get(), CELIX_LOG_LEVEL_FATAL, format, args);
619  va_end(args);
620  }
621 
626  void logTssErrors(celix_log_level_e level) {
627  celix_bundleContext_logTssErrors(cCtx.get(), level);
628  }
629 
633  void waitForEvents() const {
635  }
636 
640  void waitIfAbleForEvents() const {
641  auto* fw = celix_bundleContext_getFramework(cCtx.get());
644  }
645  }
646 
650  void waitForAllEvents() const {
651  auto* fw = celix_bundleContext_getFramework(cCtx.get());
653  }
654 
658  void waitIfAbleForAllEvents() const {
659  auto* fw = celix_bundleContext_getFramework(cCtx.get());
662  }
663  }
664  private:
665  std::vector<long> listBundlesInternal(bool activeOnly) const {
666  std::vector<long> result{};
667  auto* ids = activeOnly ?
670  result.reserve(celix_arrayList_size(ids));
671  for (int i = 0; i < celix_arrayList_size(ids); ++i) {
672  result.push_back(celix_arrayList_getLong(ids, i));
673  }
674  celix_arrayList_destroy(ids);
675  return result;
676  }
677 
678  std::vector<long> findServicesWithNameInternal(const char* name, const char* filter, const char* versionRange) {
681  opts.serviceName = name;
682  opts.filter = filter;
683  opts.versionRange = versionRange;
684 
685  std::vector<long> result{};
686  auto cList = celix_bundleContext_findServicesWithOptions(cCtx.get(), &opts);
687  for (int i = 0; i < celix_arrayList_size(cList); ++i) {
688  long svcId = celix_arrayList_getLong(cList, i);
689  result.push_back(svcId);
690  }
691  celix_arrayList_destroy(cList);
692  return result;
693  }
694 
695  const std::shared_ptr<celix_bundle_context_t> cCtx;
696  const std::shared_ptr<celix::dm::DependencyManager> dm;
697  const Bundle bnd;
698  };
699 }
700 
701 
celix::BundleContext::trackServices
ServiceTrackerBuilder< I > trackServices(const std::string &name={})
Track services in the Celix framework using a fluent builder API.
Definition: BundleContext.h:264
Bundle.h
celix::BundleContext::logFatal
void logFatal(const char *format...) __attribute__((format(printf
Log a message to the Celix framework logger using the FATAL log level.
celix::BundleContext::logTrace
void logTrace(const char *format...) __attribute__((format(printf
Log a message to the Celix framework logger using the TRACE log level.
celix::BundleContext::logError
void logError(const char *format...) __attribute__((format(printf
Log a message to the Celix framework logger using the ERROR log level.
celix::BundleContext
The bundle context is used to interact with the Celix framework.
Definition: BundleContext.h:53
celix::UseServiceBuilder
Fluent builder API to use a service or services.
Definition: UseServiceBuilder.h:50
celix::BundleContext::trackAnyServices
ServiceTrackerBuilder< void > trackAnyServices()
Track services in the Celix framework using a fluent builder API.
Definition: BundleContext.h:274
celix
Definition: Bundle.h:28
celix_bundleContext_logTssErrors
CELIX_FRAMEWORK_EXPORT void CELIX_FRAMEWORK_EXPORT void CELIX_FRAMEWORK_EXPORT void celix_bundleContext_logTssErrors(const celix_bundle_context_t *ctx, celix_log_level_e level)
Logs celix thread-specific storage error messages(celix_err) ith the provided celix log level....
celix::BundleContext::getConfigProperty
std::string getConfigProperty(const std::string &name, const std::string &defaultValue) const
Gets the config property for the provided name.
Definition: BundleContext.h:456
celix::BundleContext::registerService
ServiceRegistrationBuilder< I > registerService(std::shared_ptr< Implementer > implementer, const std::string &name={})
Register a service in the Celix framework using a fluent builder API.
Definition: BundleContext.h:83
celix::BundleContext::waitIfAbleForAllEvents
void waitIfAbleForAllEvents() const
Wait (if not on the Celix event thread) until all Celix events (for all bundles) are completed.
Definition: BundleContext.h:658
celix::ScheduledEventBuilder
A C++ builder for a ScheduledEvent object.
Definition: ScheduledEventBuilder.h:33
celix_bundleContext_findServiceWithOptions
CELIX_FRAMEWORK_EXPORT long celix_bundleContext_findServiceWithOptions(celix_bundle_context_t *ctx, const celix_service_filter_options_t *opts)
Finds the highest ranking service and returns the service id.
celix::BundleContext::trackBundles
BundleTrackerBuilder trackBundles()
Track bundles in the Celix framework using a fluent builder API.
Definition: BundleContext.h:294
celix::BundleContext::useServices
UseServiceBuilder< I > useServices(const std::string &name={})
Use services registered in the Celix framework using a fluent builder API.
Definition: BundleContext.h:173
celix::BundleContext::getBundleId
long getBundleId() const
Get the bundle id for the bundle of this bundle context.
Definition: BundleContext.h:520
celix_bundleContext_getBundle
CELIX_FRAMEWORK_EXPORT celix_bundle_t * celix_bundleContext_getBundle(const celix_bundle_context_t *ctx)
Returns the bundle for this bundle context.
celix::ServiceRegistrationBuilder
Fluent builder API to build a new service registration for a service.
Definition: ServiceRegistrationBuilder.h:38
celix::BundleContext::findService
long findService(const std::string &filter={}, const std::string &versionRange={})
Finds the highest ranking service using the optional provided (LDAP) filter and version range.
Definition: BundleContext.h:189
celix::BundleContext::getBundle
const Bundle & getBundle() const
Get the bundle of this bundle context.
Definition: BundleContext.h:513
celix_bundleContext_installBundle
CELIX_FRAMEWORK_EXPORT long celix_bundleContext_installBundle(celix_bundle_context_t *ctx, const char *bundleUrl, bool autoStart)
Install and optional start a bundle. Will silently ignore bundle ids < 0.
celix::BundleContext::celix_bundleContext_vlog
celix_bundleContext_vlog(cCtx.get(), CELIX_LOG_LEVEL_TRACE, format, args)
celix_framework_waitForEmptyEventQueue
CELIX_FRAMEWORK_EXPORT void celix_framework_waitForEmptyEventQueue(celix_framework_t *fw)
Wait until the framework event queue is empty.
celix_bundleContext_findServicesWithOptions
CELIX_FRAMEWORK_EXPORT celix_array_list_t * celix_bundleContext_findServicesWithOptions(celix_bundle_context_t *ctx, const celix_service_filter_options_t *opts)
Finds the services conform the provider filter options and returns a list of the found service ids.
celix::BundleContext::va_end
va_end(args)
celix::ServiceTrackerBuilder
Fluent builder API to track services.
Definition: TrackerBuilders.h:38
celix_bundleContext_listBundles
CELIX_FRAMEWORK_EXPORT celix_array_list_t * celix_bundleContext_listBundles(celix_bundle_context_t *ctx)
List the installed and started bundle ids. The bundle ids does not include the framework bundle (bund...
celix::BundleContext::trackServiceTrackers
MetaTrackerBuilder trackServiceTrackers(const std::string &name={})
Track service trackers in the Celix framework using a fluent builder API.
Definition: BundleContext.h:319
celix::BundleContext::getConfigPropertyAsLong
long getConfigPropertyAsLong(const std::string &name, long defaultValue) const
Gets the config property for the provided name and returns it as a long.
Definition: BundleContext.h:472
celix::BundleContext::getCBundleContext
celix_bundle_context_t * getCBundleContext() const
Get the C bundle context.
Definition: BundleContext.h:546
celix_bundleContext_getPropertyAsDouble
CELIX_FRAMEWORK_EXPORT double celix_bundleContext_getPropertyAsDouble(celix_bundle_context_t *ctx, const char *name, double defaultValue)
Get the config property for the given key converted as double value.
celix::BundleContext::logInfo
void logInfo(const char *format...) __attribute__((format(printf
Log a message to the Celix framework logger using the INFO log level.
celix::BundleContext::trackAnyServiceTrackers
MetaTrackerBuilder trackAnyServiceTrackers()
Track service trackers in the Celix framework using a fluent builder API.
Definition: BundleContext.h:328
celix_bundleContext_waitForEvents
CELIX_FRAMEWORK_EXPORT void celix_bundleContext_waitForEvents(celix_bundle_context_t *ctx)
Wait until all Celix event for this bundle are completed.
celix::BundleContext::logWarn
void logWarn(const char *format...) __attribute__((format(printf
Log a message to the Celix framework logger using the WARNING log level.
celix_bundleContext_getPropertyAsBool
CELIX_FRAMEWORK_EXPORT bool celix_bundleContext_getPropertyAsBool(celix_bundle_context_t *ctx, const char *name, bool defaultValue)
Get the config property for the given key converted as bool value.
celix::BundleContext::logDebug
void logDebug(const char *format...) __attribute__((format(printf
Log a message to the Celix framework logger using the DEBUG log level.
celix::BundleContext::va_start
void va_start(args, format)
TrackerBuilders.h
celix::BundleContext::findServicesWithName
std::vector< long > findServicesWithName(const std::string &name, const std::string &filter={}, const std::string &versionRange={})
Finds all service matching the provided service name and the optional (LDAP) filter and version range...
Definition: BundleContext.h:236
celix::BundleContext::waitIfAbleForEvents
void waitIfAbleForEvents() const
Wait (if not on the Celix event thread) until all Celix events for this bundle are completed.
Definition: BundleContext.h:640
celix::MetaTrackerBuilder
Fluent builder API to track service trackers.
Definition: TrackerBuilders.h:306
celix_bundleContext_stopBundle
CELIX_FRAMEWORK_EXPORT bool celix_bundleContext_stopBundle(celix_bundle_context_t *ctx, long bndId)
Stop the bundle with the provided bundle id. Will silently ignore bundle ids < 0.
celix::BundleContext::logTssErrors
void logTssErrors(celix_log_level_e level)
Log celix per-thread error messages to the Celix framework logger using the provided log level....
Definition: BundleContext.h:626
celix::BundleContext::startBundle
bool startBundle(long bndId)
Start the bundle with the provided bundle id.
Definition: BundleContext.h:379
celix_bundleContext_listInstalledBundles
CELIX_FRAMEWORK_EXPORT celix_array_list_t * celix_bundleContext_listInstalledBundles(celix_bundle_context_t *ctx)
List the installed bundle ids. The bundle ids does not include the framework bundle (bundle id CELIX_...
celix::BundleContext::waitForAllEvents
void waitForAllEvents() const
Wait until all Celix events (for all bundles) are completed.
Definition: BundleContext.h:650
celix_bundleContext_getPropertyAsLong
CELIX_FRAMEWORK_EXPORT long celix_bundleContext_getPropertyAsLong(celix_bundle_context_t *ctx, const char *name, long defaultValue)
Get the config property for the given key converted as long value.
celix_framework_isCurrentThreadTheEventLoop
CELIX_FRAMEWORK_EXPORT bool celix_framework_isCurrentThreadTheEventLoop(celix_framework_t *fw)
Returns whether the current thread is the Celix framework event loop thread.
celix::BundleContext::uninstallBundle
bool uninstallBundle(long bndId)
Uninstall the bundle with the provided bundle id.
Definition: BundleContext.h:362
celix_bundleContext_uninstallBundle
CELIX_FRAMEWORK_EXPORT bool celix_bundleContext_uninstallBundle(celix_bundle_context_t *ctx, long bndId)
Uninstall the bundle with the provided bundle id. If needed the bundle will be stopped first....
celix::BundleContext::BundleContext
BundleContext(celix_bundle_context_t *_cCtx)
Definition: BundleContext.h:55
celix::BundleContext::listInstalledBundleIds
std::vector< long > listInstalledBundleIds()
List the installed bundle ids. The bundle ids does not include the framework bundle (bundle id CELIX_...
Definition: BundleContext.h:441
celix::BundleContext::getConfigPropertyAsDouble
double getConfigPropertyAsDouble(const std::string &name, double defaultValue) const
Gets the config property for the provided name and returns it as a double.
Definition: BundleContext.h:488
Framework.h
celix::Bundle
An installed bundle in the Celix framework.
Definition: Bundle.h:49
celix::BundleContext::installBundle
long installBundle(const std::string &bndLocation, bool autoStart=true)
Install and optional start a bundle.
Definition: BundleContext.h:349
celix::BundleContext::waitForEvents
void waitForEvents() const
Wait until all Celix events for this bundle are completed.
Definition: BundleContext.h:633
celix::BundleContext::getDependencyManager
std::shared_ptr< dm::DependencyManager > getDependencyManager() const
Get the Celix dependency manager for this bundle context.
Definition: BundleContext.h:536
celix_service_filter_options
Service filter options which can be used to query for certain services.
Definition: celix_bundle_context.h:340
DependencyManager.h
celix_bundleContext_getProperty
const CELIX_FRAMEWORK_EXPORT char * celix_bundleContext_getProperty(celix_bundle_context_t *ctx, const char *key, const char *defaultVal)
Get the config property for the given key.
celix::Bundle::getId
long getId() const
get the bundle id.
Definition: Bundle.h:57
ScheduledEventBuilder.h
UseServiceBuilder.h
celix::BundleContext::stopBundle
bool stopBundle(long bndId)
Stop the bundle with the provided bundle id.
Definition: BundleContext.h:396
celix_bundleContext_updateBundle
CELIX_FRAMEWORK_EXPORT bool celix_bundleContext_updateBundle(celix_bundle_context_t *ctx, long bndId, const char *updatedBundleUrl)
Update the bundle with the provided bundle id.
celix::BundleContext::registerUnmanagedService
ServiceRegistrationBuilder< I > registerUnmanagedService(Implementer *svc, const std::string &name={})
Register a (unmanaged) service in the Celix framework using a fluent builder API.
Definition: BundleContext.h:99
celix::BundleContext::findServiceWithName
long findServiceWithName(const std::string &name, const std::string &filter={}, const std::string &versionRange={})
Finds the highest ranking service using the provided service name and the optional (LDAP) filter and ...
Definition: BundleContext.h:202
celix::BundleContext::useService
UseServiceBuilder< I > useService(const std::string &name={})
Use a service registered in the Celix framework using a fluent builder API.
Definition: BundleContext.h:139
celix::BundleContext::listBundleIds
std::vector< long > listBundleIds() const
List the installed and started bundle ids. The bundle ids does not include the framework bundle (bund...
Definition: BundleContext.h:431
celix::BundleContext::updateBundle
bool updateBundle(long bndId, const std::string &updatedBundleUrl={})
Update the bundle with the provided bundle id async.
Definition: BundleContext.h:421
celix_bundleContext_getFramework
CELIX_FRAMEWORK_EXPORT celix_framework_t * celix_bundleContext_getFramework(const celix_bundle_context_t *ctx)
celix::BundleContext::findServices
std::vector< long > findServices(const std::string &filter={}, const std::string &versionRange={})
Finds all services matching the optional provided (LDAP) filter and version range.
Definition: BundleContext.h:223
celix_bundle_context.h
celix_bundleContext_startBundle
CELIX_FRAMEWORK_EXPORT bool celix_bundleContext_startBundle(celix_bundle_context_t *ctx, long bndId)
Start the bundle with the provided bundle id. Will silently ignore bundle ids < 0.
celix::BundleContext::getFramework
std::shared_ptr< Framework > getFramework() const
Get the Celix framework for this bundle context.
Definition: BundleContext.h:527
celix_framework_getFrameworkContext
CELIX_FRAMEWORK_EXPORT celix_bundle_context_t * celix_framework_getFrameworkContext(const celix_framework_t *fw)
Returns the framework bundle context. This is the same as a 'normal' bundle context and can be used t...
celix::BundleContext::getConfigPropertyAsBool
long getConfigPropertyAsBool(const std::string &name, bool defaultValue) const
Gets the config property for the provided name and returns it as a bool.
Definition: BundleContext.h:506
celix::BundleContext::scheduledEvent
ScheduledEventBuilder scheduledEvent()
Schedule a callback to be called after the given initial delay and/or interval using a fluent builder...
Definition: BundleContext.h:336
ServiceRegistrationBuilder.h
celix::BundleTrackerBuilder
Fluent builder API to track bundles.
Definition: TrackerBuilders.h:233