You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/10/29 15:30:14 UTC

[camel] branch master updated (d36b3db -> e94e235)

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git.


    from d36b3db  Upgrade Netty to version 4.1.43.Final
     new ec4743a  CAMEL-10955: Added events for camel starting and stopping routes so you have events for just that.
     new e94e235  Polished

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../camel/cdi/test/CamelEventEndpointTest.java     | 65 ---------------
 .../component/extension/ComponentExtension.java    |  4 +-
 .../main/java/org/apache/camel/spi/CamelEvent.java | 32 ++++++++
 .../java/org/apache/camel/spi/EventFactory.java    | 32 ++++++++
 .../camel/impl/engine/AbstractCamelContext.java    |  5 ++
 ...nt.java => CamelContextRoutesStartedEvent.java} |  6 +-
 ...t.java => CamelContextRoutesStartingEvent.java} |  6 +-
 ...nt.java => CamelContextRoutesStoppedEvent.java} |  6 +-
 ...t.java => CamelContextRoutesStoppingEvent.java} |  6 +-
 .../camel/impl/event/DefaultEventFactory.java      | 20 +++++
 .../camel/impl/event/EventNotifierEventsTest.java  | 92 ++++++++++++----------
 .../EventNotifierFailureHandledEventsTest.java     | 90 +++++++++++----------
 ...ventNotifierServiceStoppingFailedEventTest.java | 14 ++--
 .../event/MultipleEventNotifierEventsTest.java     | 68 +++++++++-------
 .../mbean/ComponentVerifierExtension.java          | 12 ++-
 .../camel/management/RemoveEventNotifierTest.java  |  4 +-
 .../java/org/apache/camel/support/EventHelper.java | 24 ++++++
 17 files changed, 286 insertions(+), 200 deletions(-)
 copy core/camel-base/src/main/java/org/apache/camel/impl/event/{CamelContextStartingEvent.java => CamelContextRoutesStartedEvent.java} (80%)
 copy core/camel-base/src/main/java/org/apache/camel/impl/event/{CamelContextStartingEvent.java => CamelContextRoutesStartingEvent.java} (79%)
 copy core/camel-base/src/main/java/org/apache/camel/impl/event/{CamelContextStartingEvent.java => CamelContextRoutesStoppedEvent.java} (80%)
 copy core/camel-base/src/main/java/org/apache/camel/impl/event/{CamelContextStartingEvent.java => CamelContextRoutesStoppingEvent.java} (79%)


[camel] 01/02: CAMEL-10955: Added events for camel starting and stopping routes so you have events for just that.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit ec4743a613b965f771e9b9590856d5350d57658b
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Oct 29 14:50:30 2019 +0100

    CAMEL-10955: Added events for camel starting and stopping routes so you have events for just that.
---
 .../camel/cdi/test/CamelEventEndpointTest.java     | 65 ---------------
 .../main/java/org/apache/camel/spi/CamelEvent.java | 32 ++++++++
 .../java/org/apache/camel/spi/EventFactory.java    | 32 ++++++++
 .../camel/impl/engine/AbstractCamelContext.java    |  5 ++
 .../impl/event/CamelContextRoutesStartedEvent.java | 33 ++++++++
 .../event/CamelContextRoutesStartingEvent.java     | 33 ++++++++
 .../impl/event/CamelContextRoutesStoppedEvent.java | 33 ++++++++
 .../event/CamelContextRoutesStoppingEvent.java     | 33 ++++++++
 .../camel/impl/event/DefaultEventFactory.java      | 20 +++++
 .../camel/impl/event/EventNotifierEventsTest.java  | 92 ++++++++++++----------
 .../EventNotifierFailureHandledEventsTest.java     | 90 +++++++++++----------
 ...ventNotifierServiceStoppingFailedEventTest.java | 14 ++--
 .../event/MultipleEventNotifierEventsTest.java     | 68 +++++++++-------
 .../camel/management/RemoveEventNotifierTest.java  |  4 +-
 .../java/org/apache/camel/support/EventHelper.java | 24 ++++++
 15 files changed, 394 insertions(+), 184 deletions(-)

diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventEndpointTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventEndpointTest.java
index 2217c09..252e571 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventEndpointTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventEndpointTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.cdi.test;
 
 import java.util.EventObject;
-
 import javax.inject.Inject;
 
 import org.apache.camel.builder.RouteBuilder;
@@ -26,11 +25,6 @@ import org.apache.camel.cdi.CdiEventEndpoint;
 import org.apache.camel.cdi.Uri;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spi.CamelEvent.CamelContextStartedEvent;
-import org.apache.camel.spi.CamelEvent.ExchangeCompletedEvent;
-import org.apache.camel.spi.CamelEvent.ExchangeCreatedEvent;
-import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
-import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
-import org.apache.camel.spi.CamelEvent.RouteStartedEvent;
 import org.jboss.arquillian.container.test.api.Deployment;
 import org.jboss.arquillian.junit.Arquillian;
 import org.jboss.shrinkwrap.api.Archive;
@@ -41,7 +35,6 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import static org.hamcrest.Matchers.contains;
-import static org.hamcrest.Matchers.either;
 import static org.hamcrest.Matchers.hasProperty;
 import static org.hamcrest.Matchers.instanceOf;
 import static org.junit.Assert.assertThat;
@@ -68,64 +61,6 @@ public class CamelEventEndpointTest {
                     hasProperty("body", instanceOf(CamelContextStartedEvent.class)))));
     }
 
-    @Test
-    public void camelAllEvents(@Uri("mock:events") MockEndpoint events) {
-        assertThat("Events fired are incorrect!", events.getExchanges(),
-            // We cannot rely on the delivery order of the camel context started event being fired and observed by both CDI event endpoints
-            either(
-                contains(
-                    // Started route: route1
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeCreatedEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeSendingEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(RouteStartedEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeSentEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeCompletedEvent.class))),
-                    // Started route: route2
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeCreatedEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeSendingEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(RouteStartedEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeSentEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeCompletedEvent.class))),
-                    // Started CamelContext: camel-cdi
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeCreatedEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeSendingEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(CamelContextStartedEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeSentEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeCompletedEvent.class))),
-                    // Started CamelContext: camel-cdi (for CdiEventEndpoint<CamelContextStartedEvent> started)
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeCreatedEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeSendingEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeSentEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeCompletedEvent.class)))
-            )).or(
-                contains(
-                    // Started route: route1
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeCreatedEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeSendingEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(RouteStartedEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeSentEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeCompletedEvent.class))),
-                    // Started route: route2
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeCreatedEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeSendingEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(RouteStartedEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeSentEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeCompletedEvent.class))),
-                    // Started CamelContext: camel-cdi (for CdiEventEndpoint<CamelContextStartedEvent> started)
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeCreatedEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeSendingEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeSentEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeCompletedEvent.class))),
-                    // Started CamelContext: camel-cdi
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeCreatedEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeSendingEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(CamelContextStartedEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeSentEvent.class))),
-                    hasProperty("in", hasProperty("body", instanceOf(ExchangeCompletedEvent.class)))
-                )
-            )
-        );
-    }
 }
 
 class CamelEventRoute extends RouteBuilder {
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/CamelEvent.java b/core/camel-api/src/main/java/org/apache/camel/spi/CamelEvent.java
index 91879a4..7ce2bb8 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/CamelEvent.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/CamelEvent.java
@@ -39,6 +39,10 @@ public interface CamelEvent {
         CamelContextStopping,
         CamelContextSuspended,
         CamelContextSuspending,
+        CamelContextRoutesStarting,
+        CamelContextRoutesStarted,
+        CamelContextRoutesStopping,
+        CamelContextRoutesStopped,
         ExchangeCompleted,
         ExchangeCreated,
         ExchangeFailed,
@@ -161,6 +165,34 @@ public interface CamelEvent {
         }
     }
 
+    interface CamelContextRoutesStartingEvent extends CamelContextEvent {
+        @Override
+        default Type getType() {
+            return Type.CamelContextRoutesStarting;
+        }
+    }
+
+    interface CamelContextRoutesStartedEvent extends CamelContextEvent {
+        @Override
+        default Type getType() {
+            return Type.CamelContextRoutesStarted;
+        }
+    }
+
+    interface CamelContextRoutesStoppingEvent extends CamelContextEvent {
+        @Override
+        default Type getType() {
+            return Type.CamelContextRoutesStopping;
+        }
+    }
+
+    interface CamelContextRoutesStoppedEvent extends CamelContextEvent {
+        @Override
+        default Type getType() {
+            return Type.CamelContextRoutesStopped;
+        }
+    }
+
     interface ExchangeEvent extends CamelEvent {
 
         Exchange getExchange();
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/EventFactory.java b/core/camel-api/src/main/java/org/apache/camel/spi/EventFactory.java
index f422ad3..41754e7 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/EventFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/EventFactory.java
@@ -80,6 +80,38 @@ public interface EventFactory {
     CamelEvent createCamelContextStoppedEvent(CamelContext context);
 
     /**
+     * Creates an {@link CamelEvent} for Camel routes starting.
+     *
+     * @param context camel context
+     * @return the created event
+     */
+    CamelEvent createCamelContextRoutesStartingEvent(CamelContext context);
+
+    /**
+     * Creates an {@link CamelEvent} for Camel routes started.
+     *
+     * @param context camel context
+     * @return the created event
+     */
+    CamelEvent createCamelContextRoutesStartedEvent(CamelContext context);
+
+    /**
+     * Creates an {@link CamelEvent} for Camel routes stopping.
+     *
+     * @param context camel context
+     * @return the created event
+     */
+    CamelEvent createCamelContextRoutesStoppingEvent(CamelContext context);
+
+    /**
+     * Creates an {@link CamelEvent} for Camel routes stopped.
+     *
+     * @param context camel context
+     * @return the created event
+     */
+    CamelEvent createCamelContextRoutesStoppedEvent(CamelContext context);
+
+    /**
      * Creates an {@link CamelEvent} for a Service failed to start cleanly
      *
      * @param context camel context
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 41af8a8..69e0453 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -2629,7 +2629,9 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext
         }
 
         // invoke this logic to warmup the routes and if possible also start the routes
+        EventHelper.notifyCamelContextRoutesStarting(this);
         doStartOrResumeRoutes(routeServices, true, !doNotStartRoutesOnFirstStart, false, true);
+        EventHelper.notifyCamelContextRoutesStarted(this);
 
         long cacheCounter = getBeanIntrospection().getCachedClassesCounter();
         if (cacheCounter > 0) {
@@ -2655,6 +2657,7 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext
         stopWatch.restart();
         log.info("Apache Camel {} (CamelContext: {}) is shutting down", getVersion(), getName());
         EventHelper.notifyCamelContextStopping(this);
+        EventHelper.notifyCamelContextRoutesStopping(this);
 
         // Stop the route controller
         ServiceHelper.stopAndShutdownService(this.routeController);
@@ -2695,6 +2698,8 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext
         // Camel again and get the route back as before
         routeStartupOrder.clear();
 
+        EventHelper.notifyCamelContextRoutesStopped(this);
+
         // but clear any suspend routes
         suspendedRouteServices.clear();
 
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/event/CamelContextRoutesStartedEvent.java b/core/camel-base/src/main/java/org/apache/camel/impl/event/CamelContextRoutesStartedEvent.java
new file mode 100644
index 0000000..cded744
--- /dev/null
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/event/CamelContextRoutesStartedEvent.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.impl.event;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
+
+public class CamelContextRoutesStartedEvent extends AbstractContextEvent implements CamelEvent.CamelContextRoutesStartedEvent {
+    private static final long serialVersionUID = -1120225323715688981L;
+
+    public CamelContextRoutesStartedEvent(CamelContext source) {
+        super(source);
+    }
+
+    @Override
+    public String toString() {
+        return "Started routes on CamelContext: " + getContext().getName();
+    }
+}
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/event/CamelContextRoutesStartingEvent.java b/core/camel-base/src/main/java/org/apache/camel/impl/event/CamelContextRoutesStartingEvent.java
new file mode 100644
index 0000000..76a0e60
--- /dev/null
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/event/CamelContextRoutesStartingEvent.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.impl.event;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
+
+public class CamelContextRoutesStartingEvent extends AbstractContextEvent implements CamelEvent.CamelContextRoutesStartingEvent {
+    private static final long serialVersionUID = -1120225323715688981L;
+
+    public CamelContextRoutesStartingEvent(CamelContext source) {
+        super(source);
+    }
+
+    @Override
+    public String toString() {
+        return "Starting routes on CamelContext: " + getContext().getName();
+    }
+}
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/event/CamelContextRoutesStoppedEvent.java b/core/camel-base/src/main/java/org/apache/camel/impl/event/CamelContextRoutesStoppedEvent.java
new file mode 100644
index 0000000..7c37a5b
--- /dev/null
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/event/CamelContextRoutesStoppedEvent.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.impl.event;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
+
+public class CamelContextRoutesStoppedEvent extends AbstractContextEvent implements CamelEvent.CamelContextRoutesStoppedEvent {
+    private static final long serialVersionUID = -1120225323715688981L;
+
+    public CamelContextRoutesStoppedEvent(CamelContext source) {
+        super(source);
+    }
+
+    @Override
+    public String toString() {
+        return "Stopped routes on CamelContext: " + getContext().getName();
+    }
+}
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/event/CamelContextRoutesStoppingEvent.java b/core/camel-base/src/main/java/org/apache/camel/impl/event/CamelContextRoutesStoppingEvent.java
new file mode 100644
index 0000000..8e80ced
--- /dev/null
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/event/CamelContextRoutesStoppingEvent.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.impl.event;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
+
+public class CamelContextRoutesStoppingEvent extends AbstractContextEvent implements CamelEvent.CamelContextRoutesStoppingEvent {
+    private static final long serialVersionUID = -1120225323715688981L;
+
+    public CamelContextRoutesStoppingEvent(CamelContext source) {
+        super(source);
+    }
+
+    @Override
+    public String toString() {
+        return "Stopping routes on CamelContext: " + getContext().getName();
+    }
+}
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/event/DefaultEventFactory.java b/core/camel-base/src/main/java/org/apache/camel/impl/event/DefaultEventFactory.java
index 22bc64e..7729788 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/event/DefaultEventFactory.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/event/DefaultEventFactory.java
@@ -51,6 +51,26 @@ public class DefaultEventFactory implements EventFactory {
     }
 
     @Override
+    public CamelEvent createCamelContextRoutesStartingEvent(CamelContext context) {
+        return new CamelContextRoutesStartingEvent(context);
+    }
+
+    @Override
+    public CamelEvent createCamelContextRoutesStartedEvent(CamelContext context) {
+        return new CamelContextRoutesStartedEvent(context);
+    }
+
+    @Override
+    public CamelEvent createCamelContextRoutesStoppingEvent(CamelContext context) {
+        return new CamelContextRoutesStoppingEvent(context);
+    }
+
+    @Override
+    public CamelEvent createCamelContextRoutesStoppedEvent(CamelContext context) {
+        return new CamelContextRoutesStoppedEvent(context);
+    }
+
+    @Override
     public CamelEvent createCamelContextStartupFailureEvent(CamelContext context, Throwable cause) {
         return new CamelContextStartupFailureEvent(context, cause);
     }
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierEventsTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierEventsTest.java
index 644c769..a2aee4d 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierEventsTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierEventsTest.java
@@ -58,30 +58,36 @@ public class EventNotifierEventsTest extends ContextTestSupport {
 
         assertMockEndpointsSatisfied();
 
-        assertEquals(14, events.size());
+        assertEquals(16, events.size());
         assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(1));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, events.get(1));
         assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(3));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(3));
         assertIsInstanceOf(RouteStartedEvent.class, events.get(4));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(5));
-        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(7));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(9));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(5));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, events.get(6));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(7));
+        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(9));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(10));
         assertIsInstanceOf(ExchangeSentEvent.class, events.get(11));
-        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(12));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(12));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(13));
+        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(14));
 
         // this is the sent using the produce template to start the test
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(13));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(15));
 
         context.stop();
 
-        assertEquals(20, events.size());
-        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(14));
-        assertIsInstanceOf(RouteStoppedEvent.class, events.get(15));
-        assertIsInstanceOf(RouteRemovedEvent.class, events.get(16));
-        assertIsInstanceOf(RouteStoppedEvent.class, events.get(17));
-        assertIsInstanceOf(RouteRemovedEvent.class, events.get(18));
-        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(19));
+        assertEquals(24, events.size());
+        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(16));
+        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, events.get(17));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(18));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(19));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(20));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(21));
+        assertIsInstanceOf(CamelContextRoutesStoppedEvent.class, events.get(22));
+        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(23));
     }
 
     @Test
@@ -94,52 +100,58 @@ public class EventNotifierEventsTest extends ContextTestSupport {
             assertIsInstanceOf(IllegalArgumentException.class, e.getCause());
         }
 
-        assertEquals(10, events.size());
+        assertEquals(12, events.size());
         assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(1));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, events.get(1));
         assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(3));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(3));
         assertIsInstanceOf(RouteStartedEvent.class, events.get(4));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(5));
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(6));
-        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(7));
-        assertIsInstanceOf(ExchangeFailedEvent.class, events.get(8));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(5));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, events.get(6));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(7));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(8));
+        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(9));
+        assertIsInstanceOf(ExchangeFailedEvent.class, events.get(10));
         // this is the sent using the produce template to start the test
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(9));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(11));
 
         context.stop();
 
-        assertEquals(16, events.size());
-        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(10));
-        assertIsInstanceOf(RouteStoppedEvent.class, events.get(11));
-        assertIsInstanceOf(RouteRemovedEvent.class, events.get(12));
-        assertIsInstanceOf(RouteStoppedEvent.class, events.get(13));
-        assertIsInstanceOf(RouteRemovedEvent.class, events.get(14));
-        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(15));
+        assertEquals(20, events.size());
+        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(12));
+        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, events.get(13));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(14));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(15));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(16));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(17));
+        assertIsInstanceOf(CamelContextRoutesStoppedEvent.class, events.get(18));
+        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(19));
     }
 
     @Test
     public void testSuspendResume() throws Exception {
-        assertEquals(6, events.size());
+        assertEquals(8, events.size());
         assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(1));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, events.get(1));
         assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(3));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(3));
         assertIsInstanceOf(RouteStartedEvent.class, events.get(4));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(5));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(5));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, events.get(6));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(7));
 
         context.suspend();
 
-        assertEquals(8, events.size());
-        assertIsInstanceOf(CamelContextSuspendingEvent.class, events.get(6));
+        assertEquals(10, events.size());
+        assertIsInstanceOf(CamelContextSuspendingEvent.class, events.get(8));
         // notice direct component is not suspended (as they are internal)
-        assertIsInstanceOf(CamelContextSuspendedEvent.class, events.get(7));
+        assertIsInstanceOf(CamelContextSuspendedEvent.class, events.get(9));
 
         context.resume();
 
-        assertEquals(10, events.size());
-        assertIsInstanceOf(CamelContextResumingEvent.class, events.get(8));
-        assertIsInstanceOf(CamelContextResumedEvent.class, events.get(9));
+        assertEquals(12, events.size());
+        assertIsInstanceOf(CamelContextResumingEvent.class, events.get(10));
+        assertIsInstanceOf(CamelContextResumedEvent.class, events.get(11));
     }
 
     @Override
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierFailureHandledEventsTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierFailureHandledEventsTest.java
index 7312898..ca5e0a0 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierFailureHandledEventsTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierFailureHandledEventsTest.java
@@ -74,22 +74,24 @@ public class EventNotifierFailureHandledEventsTest extends ContextTestSupport {
         template.sendBody("direct:start", "Hello World");
         assertMockEndpointsSatisfied();
 
-        assertEquals(12, events.size());
+        assertEquals(14, events.size());
         assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(1));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(2));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(3));
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(4));
-        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(5));
-
-        ExchangeFailureHandlingEvent e0 = assertIsInstanceOf(ExchangeFailureHandlingEvent.class, events.get(6));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, events.get(1));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(3));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, events.get(4));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(5));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(6));
+        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(7));
+
+        ExchangeFailureHandlingEvent e0 = assertIsInstanceOf(ExchangeFailureHandlingEvent.class, events.get(8));
         assertEquals("should be DLC", true, e0.isDeadLetterChannel());
         assertEquals("mock://dead", e0.getDeadLetterUri());
 
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(7));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(8));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(9));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(10));
 
-        ExchangeFailureHandledEvent e = assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(9));
+        ExchangeFailureHandledEvent e = assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(11));
         assertEquals("should be DLC", true, e.isDeadLetterChannel());
         assertTrue("should be marked as failure handled", e.isHandled());
         assertFalse("should not be continued", e.isContinued());
@@ -102,10 +104,10 @@ public class EventNotifierFailureHandledEventsTest extends ContextTestSupport {
         assertEquals("mock://dead", e.getDeadLetterUri());
 
         // dead letter channel will mark the exchange as completed
-        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(10));
+        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(12));
         // and the last event should be the direct:start
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(11));
-        ExchangeSentEvent sent = (ExchangeSentEvent)events.get(11);
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(13));
+        ExchangeSentEvent sent = (ExchangeSentEvent)events.get(13);
         assertEquals("direct://start", sent.getEndpoint().getEndpointUri());
     }
 
@@ -125,30 +127,32 @@ public class EventNotifierFailureHandledEventsTest extends ContextTestSupport {
         template.sendBody("direct:start", "Hello World");
         assertMockEndpointsSatisfied();
 
-        assertEquals(12, events.size());
+        assertEquals(14, events.size());
         assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(1));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(2));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(3));
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(4));
-        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(5));
-
-        ExchangeFailureHandlingEvent e0 = assertIsInstanceOf(ExchangeFailureHandlingEvent.class, events.get(6));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, events.get(1));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(3));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, events.get(4));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(5));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(6));
+        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(7));
+
+        ExchangeFailureHandlingEvent e0 = assertIsInstanceOf(ExchangeFailureHandlingEvent.class, events.get(8));
         assertEquals("should NOT be DLC", false, e0.isDeadLetterChannel());
 
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(7));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(8));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(9));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(10));
 
-        ExchangeFailureHandledEvent e = assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(9));
+        ExchangeFailureHandledEvent e = assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(11));
         assertEquals("should NOT be DLC", false, e.isDeadLetterChannel());
         assertTrue("should be marked as failure handled", e.isHandled());
         assertFalse("should not be continued", e.isContinued());
 
         // onException will handle the exception
-        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(10));
+        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(12));
         // and the last event should be the direct:start
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(11));
-        ExchangeSentEvent sent = (ExchangeSentEvent)events.get(11);
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(13));
+        ExchangeSentEvent sent = (ExchangeSentEvent)events.get(13);
         assertEquals("direct://start", sent.getEndpoint().getEndpointUri());
     }
 
@@ -166,30 +170,32 @@ public class EventNotifierFailureHandledEventsTest extends ContextTestSupport {
         template.sendBody("direct:start", "Hello World");
         assertMockEndpointsSatisfied();
 
-        assertEquals(12, events.size());
+        assertEquals(14, events.size());
         assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(1));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(2));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(3));
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(4));
-        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(5));
-
-        ExchangeFailureHandlingEvent e0 = assertIsInstanceOf(ExchangeFailureHandlingEvent.class, events.get(6));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, events.get(1));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(3));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, events.get(4));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(5));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(6));
+        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(7));
+
+        ExchangeFailureHandlingEvent e0 = assertIsInstanceOf(ExchangeFailureHandlingEvent.class, events.get(8));
         assertEquals("should NOT be DLC", false, e0.isDeadLetterChannel());
 
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(7));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(8));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(9));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(10));
 
-        ExchangeFailureHandledEvent e = assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(9));
+        ExchangeFailureHandledEvent e = assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(11));
         assertEquals("should NOT be DLC", false, e.isDeadLetterChannel());
         assertFalse("should not be marked as failure handled as it was continued instead", e.isHandled());
         assertTrue("should be continued", e.isContinued());
 
         // onException will handle the exception
-        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(10));
+        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(12));
         // and the last event should be the direct:start
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(11));
-        ExchangeSentEvent sent = (ExchangeSentEvent)events.get(11);
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(13));
+        ExchangeSentEvent sent = (ExchangeSentEvent)events.get(13);
         assertEquals("direct://start", sent.getEndpoint().getEndpointUri());
     }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierServiceStoppingFailedEventTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierServiceStoppingFailedEventTest.java
index e7bf382..ab5dc6e 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierServiceStoppingFailedEventTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierServiceStoppingFailedEventTest.java
@@ -63,13 +63,17 @@ public class EventNotifierServiceStoppingFailedEventTest extends ContextTestSupp
 
         assertEquals("CBA", stopOrder);
 
-        assertEquals(5, events.size());
+        assertEquals(9, events.size());
 
         assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(1));
-        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(2));
-        ServiceStopFailureEvent event = assertIsInstanceOf(ServiceStopFailureEvent.class, events.get(3));
-        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(4));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, events.get(1));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, events.get(2));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(3));
+        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(4));
+        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, events.get(5));
+        assertIsInstanceOf(CamelContextRoutesStoppedEvent.class, events.get(6));
+        ServiceStopFailureEvent event = assertIsInstanceOf(ServiceStopFailureEvent.class, events.get(7));
+        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(8));
 
         assertEquals("Fail B", event.getCause().getMessage());
         assertEquals("Failure to stop service: B due to Fail B", event.toString());
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/event/MultipleEventNotifierEventsTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/event/MultipleEventNotifierEventsTest.java
index c959bb8..3e154e4 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/event/MultipleEventNotifierEventsTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/event/MultipleEventNotifierEventsTest.java
@@ -77,21 +77,23 @@ public class MultipleEventNotifierEventsTest extends ContextTestSupport {
 
         assertMockEndpointsSatisfied();
 
-        assertEquals(14, events.size());
+        assertEquals(16, events.size());
         assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(1));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, events.get(1));
         assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(3));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(3));
         assertIsInstanceOf(RouteStartedEvent.class, events.get(4));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(5));
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(6));
-        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(7));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(5));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, events.get(6));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(7));
         assertIsInstanceOf(ExchangeSendingEvent.class, events.get(8));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(9));
+        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(9));
         assertIsInstanceOf(ExchangeSendingEvent.class, events.get(10));
         assertIsInstanceOf(ExchangeSentEvent.class, events.get(11));
-        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(12));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(12));
         assertIsInstanceOf(ExchangeSentEvent.class, events.get(13));
+        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(14));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(15));
 
         assertEquals(8, events2.size());
         assertIsInstanceOf(ExchangeSendingEvent.class, events2.get(0));
@@ -105,13 +107,15 @@ public class MultipleEventNotifierEventsTest extends ContextTestSupport {
 
         context.stop();
 
-        assertEquals(20, events.size());
-        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(14));
-        assertIsInstanceOf(RouteStoppedEvent.class, events.get(15));
-        assertIsInstanceOf(RouteRemovedEvent.class, events.get(16));
-        assertIsInstanceOf(RouteStoppedEvent.class, events.get(17));
-        assertIsInstanceOf(RouteRemovedEvent.class, events.get(18));
-        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(19));
+        assertEquals(24, events.size());
+        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(16));
+        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, events.get(17));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(18));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(19));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(20));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(21));
+        assertIsInstanceOf(CamelContextRoutesStoppedEvent.class, events.get(22));
+        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(23));
 
         assertEquals(8, events2.size());
     }
@@ -126,17 +130,19 @@ public class MultipleEventNotifierEventsTest extends ContextTestSupport {
             assertIsInstanceOf(IllegalArgumentException.class, e.getCause());
         }
 
-        assertEquals(10, events.size());
+        assertEquals(12, events.size());
         assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(1));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, events.get(1));
         assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(3));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(3));
         assertIsInstanceOf(RouteStartedEvent.class, events.get(4));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(5));
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(6));
-        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(7));
-        assertIsInstanceOf(ExchangeFailedEvent.class, events.get(8));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(9));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(5));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, events.get(6));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(7));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(8));
+        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(9));
+        assertIsInstanceOf(ExchangeFailedEvent.class, events.get(10));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(11));
 
         assertEquals(4, events2.size());
 
@@ -146,13 +152,15 @@ public class MultipleEventNotifierEventsTest extends ContextTestSupport {
         assertIsInstanceOf(ExchangeFailedEvent.class, events2.get(2));
         assertIsInstanceOf(ExchangeSentEvent.class, events2.get(3));
 
-        assertEquals(16, events.size());
-        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(10));
-        assertIsInstanceOf(RouteStoppedEvent.class, events.get(11));
-        assertIsInstanceOf(RouteRemovedEvent.class, events.get(12));
-        assertIsInstanceOf(RouteStoppedEvent.class, events.get(13));
-        assertIsInstanceOf(RouteRemovedEvent.class, events.get(14));
-        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(15));
+        assertEquals(20, events.size());
+        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(12));
+        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, events.get(13));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(14));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(15));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(16));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(17));
+        assertIsInstanceOf(CamelContextRoutesStoppedEvent.class, events.get(18));
+        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(19));
 
         assertEquals(4, events2.size());
     }
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/RemoveEventNotifierTest.java b/core/camel-management/src/test/java/org/apache/camel/management/RemoveEventNotifierTest.java
index c1c916d..fe4c1e9 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/RemoveEventNotifierTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/RemoveEventNotifierTest.java
@@ -61,7 +61,7 @@ public class RemoveEventNotifierTest extends ContextTestSupport {
         template.sendBody("direct:start", "Hello World");
         assertMockEndpointsSatisfied();
 
-        assertEquals(12, events.size());
+        assertEquals(14, events.size());
 
         // remove and we should not get new events
         context.getManagementStrategy().removeEventNotifier(notifier);
@@ -71,7 +71,7 @@ public class RemoveEventNotifierTest extends ContextTestSupport {
         template.sendBody("direct:start", "Bye World");
         assertMockEndpointsSatisfied();
 
-        assertEquals(12, events.size());
+        assertEquals(14, events.size());
     }
 
     @Override
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/EventHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/EventHelper.java
index 8b8719e..fb0b8f9 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/EventHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/EventHelper.java
@@ -73,6 +73,30 @@ public final class EventHelper {
             EventNotifier::isIgnoreCamelContextEvents);
     }
 
+    public static boolean notifyCamelContextRoutesStarting(CamelContext context) {
+        return doNotify(context,
+            factory -> factory.createCamelContextRoutesStartingEvent(context),
+            EventNotifier::isIgnoreCamelContextEvents);
+    }
+
+    public static boolean notifyCamelContextRoutesStarted(CamelContext context) {
+        return doNotify(context,
+            factory -> factory.createCamelContextRoutesStartedEvent(context),
+            EventNotifier::isIgnoreCamelContextEvents);
+    }
+
+    public static boolean notifyCamelContextRoutesStopping(CamelContext context) {
+        return doNotify(context,
+            factory -> factory.createCamelContextRoutesStoppingEvent(context),
+            EventNotifier::isIgnoreCamelContextEvents);
+    }
+
+    public static boolean notifyCamelContextRoutesStopped(CamelContext context) {
+        return doNotify(context,
+            factory -> factory.createCamelContextRoutesStoppedEvent(context),
+            EventNotifier::isIgnoreCamelContextEvents);
+    }
+
     public static boolean notifyCamelContextStopFailure(CamelContext context, Throwable cause) {
         return doNotify(context,
             factory -> factory.createCamelContextStopFailureEvent(context, cause),


[camel] 02/02: Polished

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit e94e235ce55f398d7f6fe854a52b76a169ed6b75
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Oct 29 16:06:33 2019 +0100

    Polished
---
 .../apache/camel/component/extension/ComponentExtension.java |  4 ++--
 .../api/management/mbean/ComponentVerifierExtension.java     | 12 ++++++++++--
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/component/extension/ComponentExtension.java b/core/camel-api/src/main/java/org/apache/camel/component/extension/ComponentExtension.java
index b4c7917..c5e1f62 100644
--- a/core/camel-api/src/main/java/org/apache/camel/component/extension/ComponentExtension.java
+++ b/core/camel-api/src/main/java/org/apache/camel/component/extension/ComponentExtension.java
@@ -19,10 +19,10 @@ package org.apache.camel.component.extension;
 /**
  * Marker interface for component extensions.
  * <p/>
- * An extension is a feature provided by the component such as ComponentVerifier,
- * ServiceMetaData.
+ * An extension is a feature provided by the component such as ComponentVerifier.
  */
 public interface ComponentExtension {
+
     /**
      * Access the underlying concrete ComponentExtension implementation to
      * provide access to further features.
diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ComponentVerifierExtension.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ComponentVerifierExtension.java
index e410508..a5de932 100644
--- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ComponentVerifierExtension.java
+++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ComponentVerifierExtension.java
@@ -33,7 +33,6 @@ import org.apache.camel.api.management.mbean.ComponentVerifierExtension.Verifica
  * interface is {@link ManagedComponentMBean#verify(String, Map)} which takes a scope and a set of parameters which should be verified.
  * <p/>
  * The return value is a {@link ComponentVerifierExtension.Result} of the verification
- *
  */
 public final class ComponentVerifierExtension {
 
@@ -89,6 +88,7 @@ public final class ComponentVerifierExtension {
      * The scope defines how the parameters should be verified.
      */
     public enum Scope {
+
         /**
          * Only validate the parameters for their <em>syntactic</em> soundness. Verifications in this scope should
          * be as fast as possible
@@ -275,7 +275,7 @@ public final class ComponentVerifierExtension {
              */
             StandardCode UNSUPPORTED_SCOPE = new StandardErrorCode("UNSUPPORTED_SCOPE");
             /**
-             * The requested {@link Component} is not supported
+             * The requested Component is not supported
              */
             StandardCode UNSUPPORTED_COMPONENT = new StandardErrorCode("UNSUPPORTED_COMPONENT");
             /**
@@ -288,6 +288,7 @@ public final class ComponentVerifierExtension {
          * Interface defining an attribute which is a key for the detailed error messages.
          */
         interface Attribute extends Serializable {
+
             /**
              * Name of the attribute. All uppercase for standard attributes and all lower case for custom attributes.
              * Separator between words is an underscore.
@@ -311,11 +312,13 @@ public final class ComponentVerifierExtension {
          * Attributes for details about an exception that was raised
          */
         interface ExceptionAttribute extends Attribute {
+
             /**
              * The exception object that has been thrown. Note that this can be a complex
              * object and can cause large content when e.g. serialized as JSON
              */
             ExceptionAttribute EXCEPTION_INSTANCE = new ExceptionErrorAttribute("EXCEPTION_INSTANCE");
+
             /**
              * The exception class
              */
@@ -326,14 +329,17 @@ public final class ComponentVerifierExtension {
          * HTTP related error details
          */
         interface HttpAttribute extends Attribute {
+
             /**
              * The erroneous HTTP code that occurred
              */
             HttpAttribute HTTP_CODE = new HttpErrorAttribute("HTTP_CODE");
+
             /**
              * HTTP response's body
              */
             HttpAttribute HTTP_TEXT = new HttpErrorAttribute("HTTP_TEXT");
+
             /**
              * If given as details, specifies that a redirect happened and the
              * content of this detail is the redirect URL
@@ -345,10 +351,12 @@ public final class ComponentVerifierExtension {
          * Group related details
          */
         interface GroupAttribute extends Attribute {
+
             /**
              * Group name
              */
             GroupAttribute GROUP_NAME = new GroupErrorAttribute("GROUP_NAME");
+
             /**
              * Options for the group
              */