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

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

commit d7f29e9c39be08280ae46ac4682444a7e1c8a854
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Tue Oct 19 07:34:39 2021 +0200

    CAMEL-17102: camel-core - EventNotifier for 
CamelContextInitializing/Initiazed should fire even if the notifier has not 
been fully started.
---
 .../java/org/apache/camel/spi/EventNotifier.java   |   4 +
 .../camel/impl/event/EventNotifierEventsTest.java  | 132 +++++++++++----------
 .../EventNotifierFailureHandledEventsTest.java     | 114 +++++++++---------
 ...ntNotifierIgnoreCamelContextInitEventsTest.java | 113 ++++++++++++++++++
 .../event/EventNotifierRedeliveryEventsTest.java   |   2 +-
 .../event/MultipleEventNotifierEventsTest.java     | 102 ++++++++--------
 .../impl/event/SimpleEventNotifierEventsTest.java  | 116 +++++++++---------
 .../camel/management/RemoveEventNotifierTest.java  |   4 +-
 .../java/org/apache/camel/support/EventHelper.java |  25 ++--
 .../camel/support/SimpleEventNotifierSupport.java  |  11 ++
 .../ROOT/pages/camel-3x-upgrade-guide-3_13.adoc    |   6 +
 11 files changed, 395 insertions(+), 234 deletions(-)

diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/EventNotifier.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/EventNotifier.java
index 8abdd4d..4312d01 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/EventNotifier.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/EventNotifier.java
@@ -48,6 +48,10 @@ public interface EventNotifier {
      */
     boolean isDisabled();
 
+    boolean isIgnoreCamelContextInitEvents();
+
+    void setIgnoreCamelContextInitEvents(boolean ignoreCamelContextInitEvents);
+
     boolean isIgnoreCamelContextEvents();
 
     void setIgnoreCamelContextEvents(boolean ignoreCamelContextEvents);
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 1878eff..98bd0f0 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
@@ -79,40 +79,42 @@ public class EventNotifierEventsTest {
 
         mock.assertIsSatisfied();
 
-        assertEquals(18, events.size());
-        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(1));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(3));
-        assertIsInstanceOf(RouteStartingEvent.class, events.get(4));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(5));
+        assertEquals(20, events.size());
+        assertIsInstanceOf(CamelEvent.CamelContextInitializingEvent.class, 
events.get(0));
+        assertIsInstanceOf(CamelEvent.CamelContextInitializedEvent.class, 
events.get(1));
+        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(2));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(3));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(4));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(5));
         assertIsInstanceOf(RouteStartingEvent.class, events.get(6));
         assertIsInstanceOf(RouteStartedEvent.class, events.get(7));
-        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(8));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(9));
-        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(11));
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(12));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(13));
+        assertIsInstanceOf(RouteStartingEvent.class, events.get(8));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(9));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(10));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(11));
+        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(13));
         assertIsInstanceOf(ExchangeSendingEvent.class, events.get(14));
         assertIsInstanceOf(ExchangeSentEvent.class, events.get(15));
-        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(16));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(16));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(17));
+        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(18));
 
         // this is the sent using the produce template to start the test
         assertIsInstanceOf(ExchangeSentEvent.class, events.get(17));
 
         context.stop();
 
-        assertEquals(28, events.size());
-        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(18));
-        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, 
events.get(19));
-        assertIsInstanceOf(RouteStoppingEvent.class, events.get(20));
-        assertIsInstanceOf(RouteStoppedEvent.class, events.get(21));
-        assertIsInstanceOf(RouteRemovedEvent.class, events.get(22));
-        assertIsInstanceOf(RouteStoppingEvent.class, events.get(23));
-        assertIsInstanceOf(RouteStoppedEvent.class, events.get(24));
-        assertIsInstanceOf(RouteRemovedEvent.class, events.get(25));
-        assertIsInstanceOf(CamelContextRoutesStoppedEvent.class, 
events.get(26));
-        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(27));
+        assertEquals(30, events.size());
+        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(20));
+        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, 
events.get(21));
+        assertIsInstanceOf(RouteStoppingEvent.class, events.get(22));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(23));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(24));
+        assertIsInstanceOf(RouteStoppingEvent.class, events.get(25));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(26));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(27));
+        assertIsInstanceOf(CamelContextRoutesStoppedEvent.class, 
events.get(28));
+        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(29));
     }
 
     @Test
@@ -128,36 +130,38 @@ public class EventNotifierEventsTest {
             assertIsInstanceOf(IllegalArgumentException.class, e.getCause());
         }
 
-        assertEquals(14, events.size());
-        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(1));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(3));
-        assertIsInstanceOf(RouteStartingEvent.class, events.get(4));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(5));
+        assertEquals(16, events.size());
+        assertIsInstanceOf(CamelEvent.CamelContextInitializingEvent.class, 
events.get(0));
+        assertIsInstanceOf(CamelEvent.CamelContextInitializedEvent.class, 
events.get(1));
+        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(2));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(3));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(4));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(5));
         assertIsInstanceOf(RouteStartingEvent.class, events.get(6));
         assertIsInstanceOf(RouteStartedEvent.class, events.get(7));
-        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(8));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(9));
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(10));
-        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(11));
-        assertIsInstanceOf(ExchangeFailedEvent.class, events.get(12));
+        assertIsInstanceOf(RouteStartingEvent.class, events.get(8));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(9));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(10));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(11));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(12));
+        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(13));
+        assertIsInstanceOf(ExchangeFailedEvent.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(24, events.size());
-        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(14));
-        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, 
events.get(15));
-        assertIsInstanceOf(RouteStoppingEvent.class, events.get(16));
-        assertIsInstanceOf(RouteStoppedEvent.class, events.get(17));
-        assertIsInstanceOf(RouteRemovedEvent.class, events.get(18));
-        assertIsInstanceOf(RouteStoppingEvent.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(26, events.size());
+        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(16));
+        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, 
events.get(17));
+        assertIsInstanceOf(RouteStoppingEvent.class, events.get(18));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(19));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(20));
+        assertIsInstanceOf(RouteStoppingEvent.class, events.get(21));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(22));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(23));
+        assertIsInstanceOf(CamelContextRoutesStoppedEvent.class, 
events.get(24));
+        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(25));
     }
 
     @Test
@@ -165,30 +169,32 @@ public class EventNotifierEventsTest {
         // not optimized as this requires exchange events
         
assertTrue(context.adapt(ExtendedCamelContext.class).isEventNotificationApplicable());
 
-        assertEquals(10, events.size());
-        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(1));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(3));
-        assertIsInstanceOf(RouteStartingEvent.class, events.get(4));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(5));
+        assertEquals(12, events.size());
+        assertIsInstanceOf(CamelEvent.CamelContextInitializingEvent.class, 
events.get(0));
+        assertIsInstanceOf(CamelEvent.CamelContextInitializedEvent.class, 
events.get(1));
+        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(2));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(3));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(4));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(5));
         assertIsInstanceOf(RouteStartingEvent.class, events.get(6));
         assertIsInstanceOf(RouteStartedEvent.class, events.get(7));
-        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(8));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(9));
+        assertIsInstanceOf(RouteStartingEvent.class, events.get(8));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(9));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(10));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(11));
 
         context.suspend();
 
-        assertEquals(12, events.size());
-        assertIsInstanceOf(CamelContextSuspendingEvent.class, events.get(10));
+        assertEquals(14, events.size());
+        assertIsInstanceOf(CamelContextSuspendingEvent.class, events.get(12));
         // notice direct component is not suspended (as they are internal)
-        assertIsInstanceOf(CamelContextSuspendedEvent.class, events.get(11));
+        assertIsInstanceOf(CamelContextSuspendedEvent.class, events.get(13));
 
         context.resume();
 
-        assertEquals(14, events.size());
-        assertIsInstanceOf(CamelContextResumingEvent.class, events.get(12));
-        assertIsInstanceOf(CamelContextResumedEvent.class, events.get(13));
+        assertEquals(16, events.size());
+        assertIsInstanceOf(CamelContextResumingEvent.class, events.get(14));
+        assertIsInstanceOf(CamelContextResumedEvent.class, events.get(15));
     }
 
     protected RouteBuilder createRouteBuilder() throws Exception {
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 ab8ae9b..e1d7b9f 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
@@ -76,25 +76,27 @@ public class EventNotifierFailureHandledEventsTest extends 
ContextTestSupport {
         template.sendBody("direct:start", "Hello World");
         assertMockEndpointsSatisfied();
 
-        assertEquals(15, events.size());
-        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(1));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
-        assertIsInstanceOf(RouteStartingEvent.class, events.get(3));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(4));
-        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(5));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(6));
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(7));
-        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(8));
-
-        ExchangeFailureHandlingEvent e0 = 
assertIsInstanceOf(ExchangeFailureHandlingEvent.class, events.get(9));
+        assertEquals(17, events.size());
+        assertIsInstanceOf(CamelEvent.CamelContextInitializingEvent.class, 
events.get(0));
+        assertIsInstanceOf(CamelEvent.CamelContextInitializedEvent.class, 
events.get(1));
+        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(2));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(3));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(4));
+        assertIsInstanceOf(RouteStartingEvent.class, events.get(5));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(6));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(7));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(8));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(9));
+        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(10));
+
+        ExchangeFailureHandlingEvent e0 = 
assertIsInstanceOf(ExchangeFailureHandlingEvent.class, events.get(11));
         assertEquals(true, e0.isDeadLetterChannel(), "should be DLC");
         assertEquals("mock://dead", e0.getDeadLetterUri());
 
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(10));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(11));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(12));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(13));
 
-        ExchangeFailureHandledEvent e = 
assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(12));
+        ExchangeFailureHandledEvent e = 
assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(14));
         assertEquals(true, e.isDeadLetterChannel(), "should be DLC");
         assertTrue(e.isHandled(), "should be marked as failure handled");
         assertFalse(e.isContinued(), "should not be continued");
@@ -107,10 +109,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(13));
+        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(15));
         // and the last event should be the direct:start
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(14));
-        ExchangeSentEvent sent = (ExchangeSentEvent) events.get(14);
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(16));
+        ExchangeSentEvent sent = (ExchangeSentEvent) events.get(16);
         assertEquals("direct://start", sent.getEndpoint().getEndpointUri());
     }
 
@@ -130,33 +132,35 @@ public class EventNotifierFailureHandledEventsTest 
extends ContextTestSupport {
         template.sendBody("direct:start", "Hello World");
         assertMockEndpointsSatisfied();
 
-        assertEquals(15, events.size());
-        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(1));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
-        assertIsInstanceOf(RouteStartingEvent.class, events.get(3));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(4));
-        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(5));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(6));
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(7));
-        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(8));
-
-        ExchangeFailureHandlingEvent e0 = 
assertIsInstanceOf(ExchangeFailureHandlingEvent.class, events.get(9));
+        assertEquals(17, events.size());
+        assertIsInstanceOf(CamelEvent.CamelContextInitializingEvent.class, 
events.get(0));
+        assertIsInstanceOf(CamelEvent.CamelContextInitializedEvent.class, 
events.get(1));
+        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(2));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(3));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(4));
+        assertIsInstanceOf(RouteStartingEvent.class, events.get(5));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(6));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(7));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(8));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(9));
+        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(10));
+
+        ExchangeFailureHandlingEvent e0 = 
assertIsInstanceOf(ExchangeFailureHandlingEvent.class, events.get(11));
         assertEquals(false, e0.isDeadLetterChannel(), "should NOT be DLC");
 
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(10));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(11));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(12));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(13));
 
-        ExchangeFailureHandledEvent e = 
assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(12));
+        ExchangeFailureHandledEvent e = 
assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(14));
         assertEquals(false, e.isDeadLetterChannel(), "should NOT be DLC");
         assertTrue(e.isHandled(), "should be marked as failure handled");
         assertFalse(e.isContinued(), "should not be continued");
 
         // onException will handle the exception
-        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(13));
+        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(15));
         // and the last event should be the direct:start
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(14));
-        ExchangeSentEvent sent = (ExchangeSentEvent) events.get(14);
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(16));
+        ExchangeSentEvent sent = (ExchangeSentEvent) events.get(16);
         assertEquals("direct://start", sent.getEndpoint().getEndpointUri());
     }
 
@@ -175,33 +179,35 @@ public class EventNotifierFailureHandledEventsTest 
extends ContextTestSupport {
         template.sendBody("direct:start", "Hello World");
         assertMockEndpointsSatisfied();
 
-        assertEquals(15, events.size());
-        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(1));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
-        assertIsInstanceOf(RouteStartingEvent.class, events.get(3));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(4));
-        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(5));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(6));
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(7));
-        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(8));
-
-        ExchangeFailureHandlingEvent e0 = 
assertIsInstanceOf(ExchangeFailureHandlingEvent.class, events.get(9));
+        assertEquals(17, events.size());
+        assertIsInstanceOf(CamelEvent.CamelContextInitializingEvent.class, 
events.get(0));
+        assertIsInstanceOf(CamelEvent.CamelContextInitializedEvent.class, 
events.get(1));
+        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(2));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(3));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(4));
+        assertIsInstanceOf(RouteStartingEvent.class, events.get(5));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(6));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(7));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(8));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(9));
+        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(10));
+
+        ExchangeFailureHandlingEvent e0 = 
assertIsInstanceOf(ExchangeFailureHandlingEvent.class, events.get(11));
         assertEquals(false, e0.isDeadLetterChannel(), "should NOT be DLC");
 
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(10));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(11));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(12));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(13));
 
-        ExchangeFailureHandledEvent e = 
assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(12));
+        ExchangeFailureHandledEvent e = 
assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(14));
         assertEquals(false, e.isDeadLetterChannel(), "should NOT be DLC");
         assertFalse(e.isHandled(), "should not be marked as failure handled as 
it was continued instead");
         assertTrue(e.isContinued(), "should be continued");
 
         // onException will handle the exception
-        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(13));
+        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(15));
         // and the last event should be the direct:start
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(14));
-        ExchangeSentEvent sent = (ExchangeSentEvent) events.get(14);
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(16));
+        ExchangeSentEvent sent = (ExchangeSentEvent) events.get(16);
         assertEquals("direct://start", sent.getEndpoint().getEndpointUri());
     }
 
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierIgnoreCamelContextInitEventsTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierIgnoreCamelContextInitEventsTest.java
new file mode 100644
index 0000000..f20bf97
--- /dev/null
+++ 
b/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierIgnoreCamelContextInitEventsTest.java
@@ -0,0 +1,113 @@
+/*
+ * 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.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.support.EventNotifierSupport;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.apache.camel.TestSupport.assertIsInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class EventNotifierIgnoreCamelContextInitEventsTest {
+
+    private static List<CamelEvent> events = new ArrayList<>();
+
+    private CamelContext context;
+    private ProducerTemplate template;
+
+    @BeforeEach
+    public void setUp() throws Exception {
+        events.clear();
+        context = createCamelContext();
+        context.addRoutes(createRouteBuilder());
+        template = context.createProducerTemplate();
+        context.start();
+    }
+
+    @AfterEach
+    public void tearDown() throws Exception {
+        if (context != null) {
+            context.stop();
+        }
+    }
+
+    protected CamelContext createCamelContext() throws Exception {
+        DefaultCamelContext context = new DefaultCamelContext();
+        context.getManagementStrategy().addEventNotifier(new 
EventNotifierSupport() {
+            public void notify(CamelEvent event) throws Exception {
+                events.add(event);
+            }
+
+            @Override
+            protected void doBuild() throws Exception {
+                setIgnoreCamelContextInitEvents(true);
+            }
+        });
+        return context;
+    }
+
+    @Test
+    public void testIgnoreInitEvents() throws Exception {
+        assertEquals(10, events.size());
+        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(1));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(3));
+        assertIsInstanceOf(RouteStartingEvent.class, events.get(4));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(5));
+        assertIsInstanceOf(RouteStartingEvent.class, events.get(6));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(7));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(8));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(9));
+
+        context.stop();
+
+        assertEquals(20, events.size());
+        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(10));
+        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, 
events.get(11));
+        assertIsInstanceOf(RouteStoppingEvent.class, events.get(12));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(13));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(14));
+        assertIsInstanceOf(RouteStoppingEvent.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));
+    }
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").to("log:foo").to("mock:result");
+
+                from("direct:fail").throwException(new 
IllegalArgumentException("Damn"));
+            }
+        };
+    }
+
+}
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierRedeliveryEventsTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierRedeliveryEventsTest.java
index b71f4a7..f331281 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierRedeliveryEventsTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/impl/event/EventNotifierRedeliveryEventsTest.java
@@ -56,7 +56,7 @@ public class EventNotifierRedeliveryEventsTest extends 
ContextTestSupport {
             }
 
             @Override
-            protected void doStart() throws Exception {
+            protected void doBuild() throws Exception {
                 setIgnoreCamelContextEvents(true);
                 setIgnoreRouteEvents(true);
                 setIgnoreServiceEvents(true);
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 e81e637..b53eaf8 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
@@ -63,7 +63,7 @@ public class MultipleEventNotifierEventsTest extends 
ContextTestSupport {
             }
 
             @Override
-            protected void doStart() throws Exception {
+            protected void doBuild() throws Exception {
                 setIgnoreCamelContextEvents(true);
                 setIgnoreServiceEvents(true);
                 setIgnoreRouteEvents(true);
@@ -80,25 +80,27 @@ public class MultipleEventNotifierEventsTest extends 
ContextTestSupport {
 
         assertMockEndpointsSatisfied();
 
-        assertEquals(18, events.size());
-        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(1));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(3));
-        assertIsInstanceOf(RouteStartingEvent.class, events.get(4));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(5));
+        assertEquals(20, events.size());
+        assertIsInstanceOf(CamelEvent.CamelContextInitializingEvent.class, 
events.get(0));
+        assertIsInstanceOf(CamelEvent.CamelContextInitializedEvent.class, 
events.get(1));
+        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(2));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(3));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(4));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(5));
         assertIsInstanceOf(RouteStartingEvent.class, events.get(6));
         assertIsInstanceOf(RouteStartedEvent.class, events.get(7));
-        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(8));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(9));
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(10));
-        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(11));
+        assertIsInstanceOf(RouteStartingEvent.class, events.get(8));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(9));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(10));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(11));
         assertIsInstanceOf(ExchangeSendingEvent.class, events.get(12));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(13));
+        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(13));
         assertIsInstanceOf(ExchangeSendingEvent.class, events.get(14));
         assertIsInstanceOf(ExchangeSentEvent.class, events.get(15));
-        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(16));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(16));
         assertIsInstanceOf(ExchangeSentEvent.class, events.get(17));
+        assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(18));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(19));
 
         assertEquals(8, events2.size());
         assertIsInstanceOf(ExchangeSendingEvent.class, events2.get(0));
@@ -112,17 +114,17 @@ public class MultipleEventNotifierEventsTest extends 
ContextTestSupport {
 
         context.stop();
 
-        assertEquals(28, events.size());
-        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(18));
-        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, 
events.get(19));
-        assertIsInstanceOf(RouteStoppingEvent.class, events.get(20));
-        assertIsInstanceOf(RouteStoppedEvent.class, events.get(21));
-        assertIsInstanceOf(RouteRemovedEvent.class, events.get(22));
-        assertIsInstanceOf(RouteStoppingEvent.class, events.get(23));
-        assertIsInstanceOf(RouteStoppedEvent.class, events.get(24));
-        assertIsInstanceOf(RouteRemovedEvent.class, events.get(25));
-        assertIsInstanceOf(CamelContextRoutesStoppedEvent.class, 
events.get(26));
-        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(27));
+        assertEquals(30, events.size());
+        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(20));
+        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, 
events.get(21));
+        assertIsInstanceOf(RouteStoppingEvent.class, events.get(22));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(23));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(24));
+        assertIsInstanceOf(RouteStoppingEvent.class, events.get(25));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(26));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(27));
+        assertIsInstanceOf(CamelContextRoutesStoppedEvent.class, 
events.get(28));
+        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(29));
 
         assertEquals(8, events2.size());
     }
@@ -137,21 +139,23 @@ public class MultipleEventNotifierEventsTest extends 
ContextTestSupport {
             assertIsInstanceOf(IllegalArgumentException.class, e.getCause());
         }
 
-        assertEquals(14, events.size());
-        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(1));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(3));
-        assertIsInstanceOf(RouteStartingEvent.class, events.get(4));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(5));
+        assertEquals(16, events.size());
+        assertIsInstanceOf(CamelEvent.CamelContextInitializingEvent.class, 
events.get(0));
+        assertIsInstanceOf(CamelEvent.CamelContextInitializedEvent.class, 
events.get(1));
+        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(2));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(3));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(4));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(5));
         assertIsInstanceOf(RouteStartingEvent.class, events.get(6));
         assertIsInstanceOf(RouteStartedEvent.class, events.get(7));
-        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(8));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(9));
-        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(10));
-        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(11));
-        assertIsInstanceOf(ExchangeFailedEvent.class, events.get(12));
-        assertIsInstanceOf(ExchangeSentEvent.class, events.get(13));
+        assertIsInstanceOf(RouteStartingEvent.class, events.get(8));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(9));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(10));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(11));
+        assertIsInstanceOf(ExchangeSendingEvent.class, events.get(12));
+        assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(13));
+        assertIsInstanceOf(ExchangeFailedEvent.class, events.get(14));
+        assertIsInstanceOf(ExchangeSentEvent.class, events.get(15));
 
         assertEquals(4, events2.size());
 
@@ -161,17 +165,17 @@ public class MultipleEventNotifierEventsTest extends 
ContextTestSupport {
         assertIsInstanceOf(ExchangeFailedEvent.class, events2.get(2));
         assertIsInstanceOf(ExchangeSentEvent.class, events2.get(3));
 
-        assertEquals(24, events.size());
-        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(14));
-        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, 
events.get(15));
-        assertIsInstanceOf(RouteStoppingEvent.class, events.get(16));
-        assertIsInstanceOf(RouteStoppedEvent.class, events.get(17));
-        assertIsInstanceOf(RouteRemovedEvent.class, events.get(18));
-        assertIsInstanceOf(RouteStoppingEvent.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(26, events.size());
+        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(16));
+        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, 
events.get(17));
+        assertIsInstanceOf(RouteStoppingEvent.class, events.get(18));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(19));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(20));
+        assertIsInstanceOf(RouteStoppingEvent.class, events.get(21));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(22));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(23));
+        assertIsInstanceOf(CamelContextRoutesStoppedEvent.class, 
events.get(24));
+        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(25));
 
         assertEquals(4, events2.size());
     }
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/impl/event/SimpleEventNotifierEventsTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/impl/event/SimpleEventNotifierEventsTest.java
index b62a3f0..ce174d3 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/impl/event/SimpleEventNotifierEventsTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/impl/event/SimpleEventNotifierEventsTest.java
@@ -79,31 +79,33 @@ public class SimpleEventNotifierEventsTest {
 
         mock.assertIsSatisfied();
 
-        assertEquals(10, events.size());
-        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(1));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(3));
-        assertIsInstanceOf(RouteStartingEvent.class, events.get(4));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(5));
+        assertEquals(12, events.size());
+        assertIsInstanceOf(CamelEvent.CamelContextInitializingEvent.class, 
events.get(0));
+        assertIsInstanceOf(CamelEvent.CamelContextInitializedEvent.class, 
events.get(1));
+        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(2));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(3));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(4));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(5));
         assertIsInstanceOf(RouteStartingEvent.class, events.get(6));
         assertIsInstanceOf(RouteStartedEvent.class, events.get(7));
-        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(8));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(9));
+        assertIsInstanceOf(RouteStartingEvent.class, events.get(8));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(9));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(10));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(11));
 
         context.stop();
 
-        assertEquals(20, events.size());
-        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(10));
-        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, 
events.get(11));
-        assertIsInstanceOf(RouteStoppingEvent.class, events.get(12));
-        assertIsInstanceOf(RouteStoppedEvent.class, events.get(13));
-        assertIsInstanceOf(RouteRemovedEvent.class, events.get(14));
-        assertIsInstanceOf(RouteStoppingEvent.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(22, events.size());
+        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(12));
+        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, 
events.get(13));
+        assertIsInstanceOf(RouteStoppingEvent.class, events.get(14));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(15));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(16));
+        assertIsInstanceOf(RouteStoppingEvent.class, events.get(17));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(18));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(19));
+        assertIsInstanceOf(CamelContextRoutesStoppedEvent.class, 
events.get(20));
+        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(21));
     }
 
     @Test
@@ -119,31 +121,33 @@ public class SimpleEventNotifierEventsTest {
             assertIsInstanceOf(IllegalArgumentException.class, e.getCause());
         }
 
-        assertEquals(10, events.size());
-        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(1));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(3));
-        assertIsInstanceOf(RouteStartingEvent.class, events.get(4));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(5));
+        assertEquals(12, events.size());
+        assertIsInstanceOf(CamelEvent.CamelContextInitializingEvent.class, 
events.get(0));
+        assertIsInstanceOf(CamelEvent.CamelContextInitializedEvent.class, 
events.get(1));
+        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(2));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(3));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(4));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(5));
         assertIsInstanceOf(RouteStartingEvent.class, events.get(6));
         assertIsInstanceOf(RouteStartedEvent.class, events.get(7));
-        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(8));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(9));
+        assertIsInstanceOf(RouteStartingEvent.class, events.get(8));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(9));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(10));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(11));
 
         context.stop();
 
-        assertEquals(20, events.size());
-        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(10));
-        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, 
events.get(11));
-        assertIsInstanceOf(RouteStoppingEvent.class, events.get(12));
-        assertIsInstanceOf(RouteStoppedEvent.class, events.get(13));
-        assertIsInstanceOf(RouteRemovedEvent.class, events.get(14));
-        assertIsInstanceOf(RouteStoppingEvent.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(22, events.size());
+        assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(12));
+        assertIsInstanceOf(CamelContextRoutesStoppingEvent.class, 
events.get(13));
+        assertIsInstanceOf(RouteStoppingEvent.class, events.get(14));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(15));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(16));
+        assertIsInstanceOf(RouteStoppingEvent.class, events.get(17));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(18));
+        assertIsInstanceOf(RouteRemovedEvent.class, events.get(19));
+        assertIsInstanceOf(CamelContextRoutesStoppedEvent.class, 
events.get(20));
+        assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(21));
     }
 
     @Test
@@ -151,30 +155,32 @@ public class SimpleEventNotifierEventsTest {
         // optimized as this does not require exchange events
         
assertFalse(context.adapt(ExtendedCamelContext.class).isEventNotificationApplicable());
 
-        assertEquals(10, events.size());
-        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
-        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(1));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(2));
-        assertIsInstanceOf(RouteAddedEvent.class, events.get(3));
-        assertIsInstanceOf(RouteStartingEvent.class, events.get(4));
-        assertIsInstanceOf(RouteStartedEvent.class, events.get(5));
+        assertEquals(12, events.size());
+        assertIsInstanceOf(CamelEvent.CamelContextInitializingEvent.class, 
events.get(0));
+        assertIsInstanceOf(CamelEvent.CamelContextInitializedEvent.class, 
events.get(1));
+        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(2));
+        assertIsInstanceOf(CamelContextRoutesStartingEvent.class, 
events.get(3));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(4));
+        assertIsInstanceOf(RouteAddedEvent.class, events.get(5));
         assertIsInstanceOf(RouteStartingEvent.class, events.get(6));
         assertIsInstanceOf(RouteStartedEvent.class, events.get(7));
-        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(8));
-        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(9));
+        assertIsInstanceOf(RouteStartingEvent.class, events.get(8));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(9));
+        assertIsInstanceOf(CamelContextRoutesStartedEvent.class, 
events.get(10));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(11));
 
         context.suspend();
 
-        assertEquals(12, events.size());
-        assertIsInstanceOf(CamelContextSuspendingEvent.class, events.get(10));
+        assertEquals(14, events.size());
+        assertIsInstanceOf(CamelContextSuspendingEvent.class, events.get(12));
         // notice direct component is not suspended (as they are internal)
-        assertIsInstanceOf(CamelContextSuspendedEvent.class, events.get(11));
+        assertIsInstanceOf(CamelContextSuspendedEvent.class, events.get(13));
 
         context.resume();
 
-        assertEquals(14, events.size());
-        assertIsInstanceOf(CamelContextResumingEvent.class, events.get(12));
-        assertIsInstanceOf(CamelContextResumedEvent.class, events.get(13));
+        assertEquals(16, events.size());
+        assertIsInstanceOf(CamelContextResumingEvent.class, events.get(14));
+        assertIsInstanceOf(CamelContextResumedEvent.class, events.get(15));
     }
 
     protected RouteBuilder createRouteBuilder() throws Exception {
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 da1e71f..4716262 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
@@ -66,7 +66,7 @@ public class RemoveEventNotifierTest extends 
ContextTestSupport {
         template.sendBody("direct:start", "Hello World");
         assertMockEndpointsSatisfied();
 
-        assertEquals(15, events.size());
+        assertEquals(17, events.size());
 
         // remove and we should not get new events
         context.getManagementStrategy().removeEventNotifier(notifier);
@@ -76,7 +76,7 @@ public class RemoveEventNotifierTest extends 
ContextTestSupport {
         template.sendBody("direct:start", "Bye World");
         assertMockEndpointsSatisfied();
 
-        assertEquals(15, events.size());
+        assertEquals(17, 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 09b5b6a..bf904f9 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
@@ -74,39 +74,39 @@ public final class EventHelper {
     }
 
     public static boolean notifyCamelContextInitializing(CamelContext context) 
{
-        return notifyCamelContext(context, 
EventFactory::createCamelContextInitializingEvent);
+        return notifyCamelContext(context, 
EventFactory::createCamelContextInitializingEvent, true);
     }
 
     public static boolean notifyCamelContextInitialized(CamelContext context) {
-        return notifyCamelContext(context, 
EventFactory::createCamelContextInitializedEvent);
+        return notifyCamelContext(context, 
EventFactory::createCamelContextInitializedEvent, true);
     }
 
     public static boolean notifyCamelContextStarting(CamelContext context) {
-        return notifyCamelContext(context, 
EventFactory::createCamelContextStartingEvent);
+        return notifyCamelContext(context, 
EventFactory::createCamelContextStartingEvent, false);
     }
 
     public static boolean notifyCamelContextStarted(CamelContext context) {
-        return notifyCamelContext(context, 
EventFactory::createCamelContextStartedEvent);
+        return notifyCamelContext(context, 
EventFactory::createCamelContextStartedEvent, false);
     }
 
     public static boolean notifyCamelContextStartupFailed(CamelContext 
context, Throwable cause) {
-        return notifyCamelContext(context, (ef, ctx) -> 
ef.createCamelContextStartupFailureEvent(ctx, cause));
+        return notifyCamelContext(context, (ef, ctx) -> 
ef.createCamelContextStartupFailureEvent(ctx, cause), false);
     }
 
     public static boolean notifyCamelContextStopping(CamelContext context) {
-        return notifyCamelContext(context, 
EventFactory::createCamelContextStoppingEvent);
+        return notifyCamelContext(context, 
EventFactory::createCamelContextStoppingEvent, false);
     }
 
     public static boolean notifyCamelContextStopped(CamelContext context) {
-        return notifyCamelContext(context, 
EventFactory::createCamelContextStoppedEvent);
+        return notifyCamelContext(context, 
EventFactory::createCamelContextStoppedEvent, false);
     }
 
     public static boolean notifyCamelContextStopFailed(CamelContext context, 
Throwable cause) {
-        return notifyCamelContext(context, (ef, ctx) -> 
ef.createCamelContextStopFailureEvent(ctx, cause));
+        return notifyCamelContext(context, (ef, ctx) -> 
ef.createCamelContextStopFailureEvent(ctx, cause), false);
     }
 
     private static boolean notifyCamelContext(
-            CamelContext context, BiFunction<EventFactory, CamelContext, 
CamelEvent> eventSupplier) {
+            CamelContext context, BiFunction<EventFactory, CamelContext, 
CamelEvent> eventSupplier, boolean init) {
         ManagementStrategy management = context.getManagementStrategy();
         if (management == null) {
             return false;
@@ -117,7 +117,9 @@ public final class EventHelper {
             return false;
         }
 
-        List<EventNotifier> notifiers = management.getStartedEventNotifiers();
+        // init camel context events are triggered before event notifiers is 
started so get those pre-started notifiers
+        // so we can emit those special init events
+        List<EventNotifier> notifiers = init ? management.getEventNotifiers() 
: management.getStartedEventNotifiers();
         if (notifiers == null || notifiers.isEmpty()) {
             return false;
         }
@@ -131,6 +133,9 @@ public final class EventHelper {
             if (notifier.isIgnoreCamelContextEvents()) {
                 continue;
             }
+            if (init && notifier.isIgnoreCamelContextInitEvents()) {
+                continue;
+            }
 
             if (event == null) {
                 // only create event once
diff --git 
a/core/camel-support/src/main/java/org/apache/camel/support/SimpleEventNotifierSupport.java
 
b/core/camel-support/src/main/java/org/apache/camel/support/SimpleEventNotifierSupport.java
index ccd65dc..9996bcc 100644
--- 
a/core/camel-support/src/main/java/org/apache/camel/support/SimpleEventNotifierSupport.java
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/SimpleEventNotifierSupport.java
@@ -31,6 +31,7 @@ import org.apache.camel.support.service.ServiceSupport;
  */
 public abstract class SimpleEventNotifierSupport extends ServiceSupport 
implements EventNotifier {
 
+    boolean ignoreCamelContextInitEvents;
     boolean ignoreCamelContextEvents;
     boolean ignoreRouteEvents;
     boolean ignoreServiceEvents;
@@ -74,6 +75,16 @@ public abstract class SimpleEventNotifierSupport extends 
ServiceSupport implemen
     }
 
     @Override
+    public boolean isIgnoreCamelContextInitEvents() {
+        return ignoreCamelContextInitEvents;
+    }
+
+    @Override
+    public void setIgnoreCamelContextInitEvents(boolean 
ignoreCamelContextInitEvents) {
+        this.ignoreCamelContextInitEvents = ignoreCamelContextInitEvents;
+    }
+
+    @Override
     public void setIgnoreCamelContextEvents(boolean ignoreCamelContextEvents) {
         this.ignoreCamelContextEvents = ignoreCamelContextEvents;
     }
diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_13.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_13.adoc
index 27d224a..3a8942d 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_13.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_13.adoc
@@ -36,6 +36,12 @@ to
 simple("1", Integer.class)
 ----
 
+=== CamelContextInitializing and CamelContextInitialized events
+
+These two events are fired during bootstrap of `CamelContext` even if a custom 
`EventNotifier`
+may not have been fully started. This is due to that these events happen very 
early in the
+bootstrap process, but are of importance for event notifiers to be able to 
react upon.
+
 === Using custom Debugger
 
 Previously when setting a custom org.apache.camel.spi.Debugger, then Camel 
would automatically

Reply via email to