@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(); }
protected void setupCamelContext(final BundleContext bundleContext, final String camelContextId) throws Exception { // Set up CamelContext if (camelContextId != null) { context.setNameStrategy(new ExplicitCamelContextNameStrategy(camelContextId)); } // TODO: allow to configure these options and not hardcode context.setUseMDCLogging(true); context.setUseBreadcrumb(true); // Add routes for (RoutesBuilder route : getRouteBuilders()) { context.addRoutes(configure(context, route, log)); } // ensure we publish this CamelContext to the OSGi service registry context.getManagementStrategy().addEventNotifier(new OsgiCamelContextPublisher(bundleContext)); }
@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; }
@Override public T produce(CreationalContext<T> cc) { T context = super.produce(cc); // 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 DeploymentException("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; }
private void maybeStart() throws Exception { LOG.trace("maybeStart: {}", this); // 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); } }
@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"); } }
/** * Create a new instance of OsgiSwitchYardCamelContextImpl. * @param bundleContext bundleContext */ public OsgiSwitchYardCamelContextImpl(BundleContext bundleContext) { _bundleContext = bundleContext; OsgiCamelContextHelper.osgiUpdate(this, bundleContext); // Ensure we publish this CamelContext to the OSGi service registry getManagementStrategy().addEventNotifier(new OsgiCamelContextPublisher(bundleContext)); }