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