use of org.apache.camel.core.osgi.OsgiCamelContextPublisher in project camel by apache.
the class CamelContextOsgiProducer method produce.
@Override
public T produce(CreationalContext<T> ctx) {
T context = super.produce(ctx);
// Register the context in the OSGi registry
BundleContext bundle = BundleContextUtils.getBundleContext(getClass());
context.getManagementStrategy().addEventNotifier(new OsgiCamelContextPublisher(bundle));
if (!(context instanceof DefaultCamelContext)) {
// Fail fast for the time being to avoid side effects by some methods get declared on the CamelContext interface
throw new InjectionException("Camel CDI requires Camel context [" + context.getName() + "] to be a subtype of DefaultCamelContext");
}
DefaultCamelContext adapted = context.adapt(DefaultCamelContext.class);
adapted.setRegistry(OsgiCamelContextHelper.wrapRegistry(context, context.getRegistry(), bundle));
CamelContextNameStrategy strategy = context.getNameStrategy();
OsgiCamelContextHelper.osgiUpdate(adapted, bundle);
// FIXME: the above call should not override explicit strategies provided by the end user or should decorate them instead of overriding them completely
if (!(strategy instanceof DefaultCamelContextNameStrategy)) {
context.setNameStrategy(strategy);
}
return context;
}
use of org.apache.camel.core.osgi.OsgiCamelContextPublisher in project camel by apache.
the class CamelContextFactoryBean method afterPropertiesSet.
@Override
public void afterPropertiesSet() throws Exception {
super.afterPropertiesSet();
getContext().getManagementStrategy().addEventNotifier(new OsgiCamelContextPublisher(bundleContext));
try {
getClass().getClassLoader().loadClass("org.osgi.service.event.EventAdmin");
getContext().getManagementStrategy().addEventNotifier(new OsgiEventAdminNotifier(bundleContext));
} catch (Throwable t) {
// Ignore, if the EventAdmin package is not available, just don't use it
LOG.debug("EventAdmin package is not available, just don't use it");
}
}
use of org.apache.camel.core.osgi.OsgiCamelContextPublisher in project camel by apache.
the class BlueprintCamelContext method maybeStart.
private void maybeStart() throws Exception {
LOG.trace("maybeStart: {}", this);
if (!routeDefinitionValid.get()) {
LOG.trace("maybeStart: {} is skipping since CamelRoute definition is not correct.", this);
return;
}
// allow to register the BluerintCamelContext eager in the OSGi Service Registry, which ex is needed
// for unit testing with camel-test-blueprint
boolean eager = "true".equalsIgnoreCase(System.getProperty("registerBlueprintCamelContextEager"));
if (eager) {
for (EventNotifier notifier : getManagementStrategy().getEventNotifiers()) {
if (notifier instanceof OsgiCamelContextPublisher) {
OsgiCamelContextPublisher publisher = (OsgiCamelContextPublisher) notifier;
publisher.registerCamelContext(this);
break;
}
}
}
// for example from unit testing we want to start Camel later and not
// when blueprint loading the bundle
boolean skip = "true".equalsIgnoreCase(System.getProperty("skipStartingCamelContext"));
if (skip) {
LOG.trace("maybeStart: {} is skipping as System property skipStartingCamelContext is set", this);
return;
}
if (!isStarted() && !isStarting()) {
LOG.debug("Starting {}", this);
start();
} else {
// ignore as Camel is already started
LOG.trace("Ignoring maybeStart() as {} is already started", this);
}
}
use of org.apache.camel.core.osgi.OsgiCamelContextPublisher in project camel by apache.
the class CamelContextFactoryBean method afterPropertiesSet.
@Override
public void afterPropertiesSet() throws Exception {
super.afterPropertiesSet();
// setup the application context classloader with the bundle delegating classloader
ClassLoader cl = new BundleDelegatingClassLoader(bundleContext.getBundle());
LOG.debug("Set the application context classloader to: {}", cl);
getContext().setApplicationContextClassLoader(cl);
osgiCamelContextPublisher = new OsgiCamelContextPublisher(bundleContext);
osgiCamelContextPublisher.start();
getContext().getManagementStrategy().addEventNotifier(osgiCamelContextPublisher);
try {
getClass().getClassLoader().loadClass("org.osgi.service.event.EventAdmin");
getContext().getManagementStrategy().addEventNotifier(new OsgiEventAdminNotifier(bundleContext));
} catch (Throwable t) {
// Ignore, if the EventAdmin package is not available, just don't use it
LOG.debug("EventAdmin package is not available, just don't use it");
}
// ensure routes is setup
setupRoutes();
}
use of org.apache.camel.core.osgi.OsgiCamelContextPublisher in project aries by apache.
the class CamelContextFactoryBean method afterPropertiesSet.
@Override
public void afterPropertiesSet() throws Exception {
super.afterPropertiesSet();
BundleContext bundleContext = getBundleContext();
getContext().getManagementStrategy().addEventNotifier(new OsgiCamelContextPublisher(bundleContext));
try {
getClass().getClassLoader().loadClass("org.osgi.service.event.EventAdmin");
getContext().getManagementStrategy().addEventNotifier(new OsgiEventAdminNotifier(bundleContext));
} catch (Throwable t) {
// Ignore, if the EventAdmin package is not available, just don't use it
LOG.debug("EventAdmin package is not available, just don't use it");
}
}
Aggregations