CAMEL-10513: Start BlueprintCamelContext on BlueprintEvent.CREATED
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/dd8063ef Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/dd8063ef Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/dd8063ef Branch: refs/heads/master Commit: dd8063efafa72d86d6187357e5a0d62944013166 Parents: dd4b323 Author: Quinn Stevenson <qu...@pronoia-solutions.com> Authored: Tue Nov 22 14:15:53 2016 -0700 Committer: Claus Ibsen <davscl...@apache.org> Committed: Sun Dec 4 13:17:55 2016 +0100 ---------------------------------------------------------------------- .../camel/blueprint/BlueprintCamelContext.java | 83 +++++++++++++++++--- .../blueprint/CamelContextFactoryBean.java | 2 +- 2 files changed, 73 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/dd8063ef/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintCamelContext.java ---------------------------------------------------------------------- diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintCamelContext.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintCamelContext.java index dd87dae..9b2a861 100644 --- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintCamelContext.java +++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintCamelContext.java @@ -143,23 +143,84 @@ public class BlueprintCamelContext extends DefaultCamelContext implements Servic @Override public void blueprintEvent(BlueprintEvent event) { - // noop as we just needed to enlist the BlueprintListener to have events triggered to serviceChanged method + if (LOG.isDebugEnabled()) { + String eventTypeString; + + switch (event.getType()) { + case BlueprintEvent.CREATING: + eventTypeString = "CREATING"; + break; + case BlueprintEvent.CREATED: + eventTypeString = "CREATED"; + break; + case BlueprintEvent.DESTROYING: + eventTypeString = "DESTROYING"; + break; + case BlueprintEvent.DESTROYED: + eventTypeString = "DESTROYED"; + break; + case BlueprintEvent.GRACE_PERIOD: + eventTypeString = "GRACE_PERIOD"; + break; + case BlueprintEvent.WAITING: + eventTypeString = "WAITING"; + break; + case BlueprintEvent.FAILURE: + eventTypeString = "FAILURE"; + break; + default: + eventTypeString = "UNKNOWN"; + break; + } + + LOG.debug("Received BlueprintEvent[ replay={} type={} bundle={}] %s", event.isReplay(), eventTypeString, event.getBundle().getSymbolicName(), event.toString()); + } + + if (!event.isReplay() && this.getBundleContext().getBundle().getBundleId() == event.getBundle().getBundleId()) { + if (event.getType() == BlueprintEvent.CREATED) { + try { + LOG.info("Attempting to start Camel Context {}", this.getName()); + this.maybeStart(); + } catch (Exception startEx) { + LOG.error("Error occurred during starting Camel Context " + this.getName(), startEx); + } + } else if (event.getType() == BlueprintEvent.DESTROYING) { + try { + LOG.info("Stopping Camel Context {}", this.getName()); + this.stop(); + } catch (Exception stopEx) { + LOG.error("Error occurred during stopping Camel Context " + this.getName(), stopEx); + } + + } + } + } @Override public void serviceChanged(ServiceEvent event) { if (LOG.isDebugEnabled()) { - LOG.debug("Service {} changed to {}", event, event.getType()); - } - // look for blueprint container to be registered, and then we can start the CamelContext - if (event.getType() == ServiceEvent.REGISTERED - && event.getServiceReference().isAssignableTo(bundleContext.getBundle(), "org.osgi.service.blueprint.container.BlueprintContainer") - && bundleContext.getBundle().equals(event.getServiceReference().getBundle())) { - try { - maybeStart(); - } catch (Exception e) { - LOG.error("Error occurred during starting Camel: " + this + " due " + e.getMessage(), e); + String eventTypeString; + + switch (event.getType()) { + case ServiceEvent.REGISTERED: + eventTypeString = "REGISTERED"; + break; + case ServiceEvent.MODIFIED: + eventTypeString = "MODIFIED"; + break; + case ServiceEvent.UNREGISTERING: + eventTypeString = "UNREGISTERING"; + break; + case ServiceEvent.MODIFIED_ENDMATCH: + eventTypeString = "MODIFIED_ENDMATCH"; + break; + default: + eventTypeString = "UNKNOWN"; + break; } + + LOG.debug("Service {} changed to {}", event.toString(), eventTypeString); } } http://git-wip-us.apache.org/repos/asf/camel/blob/dd8063ef/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java ---------------------------------------------------------------------- diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java index 59e9f38..41da245 100644 --- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java +++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java @@ -275,7 +275,7 @@ public class CamelContextFactoryBean extends AbstractCamelContextFactoryBean<Blu if (pc.getLocations() == null) { String[] ids = parser.lookupPropertyPlaceholderIds(); for (int i = 0; i < ids.length; i++) { - if (!ids[i].startsWith( "blueprint:")) { + if (!ids[i].startsWith("blueprint:")) { ids[i] = "blueprint:" + ids[i]; } }