You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/01/13 16:39:35 UTC
[camel] 01/03: CAMEL-14354: camel-core - Optimize unnecessary
object allocations. EventHelper no longer create objects
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 0d6fa3f7df94a28888a9c1399d61ad6cc3cda6ba
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Jan 13 16:23:48 2020 +0100
CAMEL-14354: camel-core - Optimize unnecessary object allocations. EventHelper no longer create objects
---
.../java/org/apache/camel/support/EventHelper.java | 1432 +++++++++++++++++---
1 file changed, 1246 insertions(+), 186 deletions(-)
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 fb0b8f9..8a3e2ef 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
@@ -1,4 +1,4 @@
-/*
+/**
* 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.
@@ -17,247 +17,270 @@
package org.apache.camel.support;
import java.util.List;
-import java.util.function.Function;
-import java.util.function.Predicate;
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.Route;
+import org.apache.camel.StatefulService;
import org.apache.camel.spi.CamelEvent;
import org.apache.camel.spi.EventFactory;
import org.apache.camel.spi.EventNotifier;
import org.apache.camel.spi.ManagementStrategy;
-import org.apache.camel.support.service.ServiceHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Helper for easily sending event notifications in a single line of code
+ *
*/
public final class EventHelper {
+ // This implementation has been optimized to be as fast and not create unnecessary objects or lambdas.
+ // So therefore there is some code that seems duplicated. But this code is used frequently during routing and should
+ // be left as-is.
+
private static final Logger LOG = LoggerFactory.getLogger(EventHelper.class);
private EventHelper() {
}
public static boolean notifyCamelContextStarting(CamelContext context) {
- return doNotify(context,
- factory -> factory.createCamelContextStartingEvent(context),
- EventNotifier::isIgnoreCamelContextEvents);
- }
-
- public static boolean notifyCamelContextStarted(CamelContext context) {
- return doNotify(context,
- factory -> factory.createCamelContextStartedEvent(context),
- EventNotifier::isIgnoreCamelContextEvents);
- }
-
- public static boolean notifyCamelContextStartupFailed(CamelContext context, Throwable cause) {
- return doNotify(context,
- factory -> factory.createCamelContextStartupFailureEvent(context, cause),
- EventNotifier::isIgnoreCamelContextEvents);
- }
-
- public static boolean notifyCamelContextStopping(CamelContext context) {
- return doNotify(context,
- factory -> factory.createCamelContextStoppingEvent(context),
- EventNotifier::isIgnoreCamelContextEvents);
- }
-
- public static boolean notifyCamelContextStopped(CamelContext context) {
- return doNotify(context,
- factory -> factory.createCamelContextStoppedEvent(context),
- EventNotifier::isIgnoreCamelContextEvents);
- }
-
- public static boolean notifyCamelContextRoutesStarting(CamelContext context) {
- return doNotify(context,
- factory -> factory.createCamelContextRoutesStartingEvent(context),
- EventNotifier::isIgnoreCamelContextEvents);
- }
-
- public static boolean notifyCamelContextRoutesStarted(CamelContext context) {
- return doNotify(context,
- factory -> factory.createCamelContextRoutesStartedEvent(context),
- EventNotifier::isIgnoreCamelContextEvents);
- }
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
- public static boolean notifyCamelContextRoutesStopping(CamelContext context) {
- return doNotify(context,
- factory -> factory.createCamelContextRoutesStoppingEvent(context),
- EventNotifier::isIgnoreCamelContextEvents);
- }
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
- public static boolean notifyCamelContextRoutesStopped(CamelContext context) {
- return doNotify(context,
- factory -> factory.createCamelContextRoutesStoppedEvent(context),
- EventNotifier::isIgnoreCamelContextEvents);
- }
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
- public static boolean notifyCamelContextStopFailure(CamelContext context, Throwable cause) {
- return doNotify(context,
- factory -> factory.createCamelContextStopFailureEvent(context, cause),
- EventNotifier::isIgnoreCamelContextEvents);
- }
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreCamelContextEvents()) {
+ continue;
+ }
- public static boolean notifyServiceStopFailure(CamelContext context, Object service, Throwable cause) {
- return doNotify(context,
- factory -> factory.createServiceStopFailureEvent(context, service, cause),
- EventNotifier::isIgnoreServiceEvents);
+ if (event == null) {
+ // only create event once
+ event = factory.createCamelContextStartingEvent(context);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
}
- public static boolean notifyServiceStartupFailure(CamelContext context, Object service, Throwable cause) {
- return doNotify(context,
- factory -> factory.createServiceStartupFailureEvent(context, service, cause),
- EventNotifier::isIgnoreServiceEvents);
- }
+ public static boolean notifyCamelContextStarted(CamelContext context) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
- public static boolean notifyRouteStarted(CamelContext context, Route route) {
- return doNotify(context,
- factory -> factory.createRouteStartedEvent(route),
- EventNotifier::isIgnoreRouteEvents);
- }
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
- public static boolean notifyRouteStopped(CamelContext context, Route route) {
- return doNotify(context,
- factory -> factory.createRouteStoppedEvent(route),
- EventNotifier::isIgnoreRouteEvents);
- }
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
- public static boolean notifyRouteAdded(CamelContext context, Route route) {
- return doNotify(context,
- factory -> factory.createRouteAddedEvent(route),
- EventNotifier::isIgnoreRouteEvents);
- }
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreCamelContextEvents()) {
+ continue;
+ }
- public static boolean notifyRouteRemoved(CamelContext context, Route route) {
- return doNotify(context,
- factory -> factory.createRouteRemovedEvent(route),
- EventNotifier::isIgnoreRouteEvents);
+ if (event == null) {
+ // only create event once
+ event = factory.createCamelContextStartedEvent(context);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
}
- public static boolean notifyExchangeCreated(CamelContext context, Exchange exchange) {
- return doNotifyExchange(context, exchange,
- factory -> factory.createExchangeCreatedEvent(exchange),
- EventNotifier::isIgnoreExchangeCreatedEvent);
- }
+ public static boolean notifyCamelContextStartupFailed(CamelContext context, Throwable cause) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
- public static boolean notifyExchangeDone(CamelContext context, Exchange exchange) {
- return doNotifyExchange(context, exchange,
- factory -> factory.createExchangeCompletedEvent(exchange),
- EventNotifier::isIgnoreExchangeCompletedEvent);
- }
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
- public static boolean notifyExchangeFailed(CamelContext context, Exchange exchange) {
- return doNotifyExchange(context, exchange,
- factory -> factory.createExchangeFailedEvent(exchange),
- EventNotifier::isIgnoreExchangeFailedEvents);
- }
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
- public static boolean notifyExchangeFailureHandling(CamelContext context, Exchange exchange, Processor failureHandler,
- boolean deadLetterChannel, String deadLetterUri) {
- return doNotifyExchange(context, exchange,
- factory -> factory.createExchangeFailureHandlingEvent(exchange, failureHandler, deadLetterChannel, deadLetterUri),
- EventNotifier::isIgnoreExchangeFailedEvents);
- }
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreCamelContextEvents()) {
+ continue;
+ }
- public static boolean notifyExchangeFailureHandled(CamelContext context, Exchange exchange, Processor failureHandler,
- boolean deadLetterChannel, String deadLetterUri) {
- return doNotifyExchange(context, exchange,
- factory -> factory.createExchangeFailureHandledEvent(exchange, failureHandler, deadLetterChannel, deadLetterUri),
- EventNotifier::isIgnoreExchangeFailedEvents);
+ if (event == null) {
+ // only create event once
+ event = factory.createCamelContextStartupFailureEvent(context, cause);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
}
- public static boolean notifyExchangeRedelivery(CamelContext context, Exchange exchange, int attempt) {
- return doNotifyExchange(context, exchange,
- factory -> factory.createExchangeRedeliveryEvent(exchange, attempt),
- EventNotifier::isIgnoreExchangeRedeliveryEvents);
- }
+ public static boolean notifyCamelContextStopping(CamelContext context) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
- public static boolean notifyExchangeSending(CamelContext context, Exchange exchange, Endpoint endpoint) {
- return doNotifyExchange(context, exchange,
- factory -> factory.createExchangeSendingEvent(exchange, endpoint),
- EventNotifier::isIgnoreExchangeSendingEvents);
- }
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
- public static boolean notifyExchangeSent(CamelContext context, Exchange exchange, Endpoint endpoint, long timeTaken) {
- return doNotifyExchange(context, exchange,
- factory -> factory.createExchangeSentEvent(exchange, endpoint, timeTaken),
- EventNotifier::isIgnoreExchangeSentEvents);
- }
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
- public static boolean notifyStepStarted(CamelContext context, Exchange exchange, String stepId) {
- return doNotifyStep(context, exchange,
- factory -> factory.createStepStartedEvent(exchange, stepId),
- EventNotifier::isIgnoreStepEvents);
- }
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreCamelContextEvents()) {
+ continue;
+ }
- public static boolean notifyStepDone(CamelContext context, Exchange exchange, String stepId) {
- return doNotifyStep(context, exchange,
- factory -> factory.createStepCompletedEvent(exchange, stepId),
- EventNotifier::isIgnoreStepEvents);
+ if (event == null) {
+ // only create event once
+ event = factory.createCamelContextStoppingEvent(context);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
}
- public static boolean notifyStepFailed(CamelContext context, Exchange exchange, String stepId) {
- return doNotifyStep(context, exchange,
- factory -> factory.createStepFailedEvent(exchange, stepId),
- EventNotifier::isIgnoreStepEvents);
- }
+ public static boolean notifyCamelContextStopped(CamelContext context) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
- public static boolean notifyCamelContextSuspending(CamelContext context) {
- return doNotify(context,
- factory -> factory.createCamelContextSuspendingEvent(context),
- EventNotifier::isIgnoreCamelContextEvents);
- }
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
- public static boolean notifyCamelContextSuspended(CamelContext context) {
- return doNotify(context,
- factory -> factory.createCamelContextSuspendedEvent(context),
- EventNotifier::isIgnoreCamelContextEvents);
- }
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
- public static boolean notifyCamelContextResuming(CamelContext context) {
- return doNotify(context,
- factory -> factory.createCamelContextResumingEvent(context),
- EventNotifier::isIgnoreCamelContextEvents);
- }
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreCamelContextEvents()) {
+ continue;
+ }
- public static boolean notifyCamelContextResumed(CamelContext context) {
- return doNotify(context,
- factory -> factory.createCamelContextResumedEvent(context),
- EventNotifier::isIgnoreCamelContextEvents);
+ if (event == null) {
+ // only create event once
+ event = factory.createCamelContextStoppedEvent(context);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
}
- public static boolean notifyCamelContextResumeFailed(CamelContext context, Throwable cause) {
- return doNotify(context,
- factory -> factory.createCamelContextResumeFailureEvent(context, cause),
- EventNotifier::isIgnoreCamelContextEvents);
- }
+ public static boolean notifyCamelContextStopFailed(CamelContext context, Throwable cause) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
- private static boolean doNotifyExchange(CamelContext context, Exchange exchange, Function<EventFactory, CamelEvent> eventSupplier, Predicate<EventNotifier> notifierFilter) {
- if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) {
- // do not generate events for an notify event
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
return false;
}
- return doNotify(context,
- eventSupplier,
- notifierFilter.or(EventNotifier::isIgnoreExchangeEvents));
- }
- private static boolean doNotifyStep(CamelContext context, Exchange exchange, Function<EventFactory, CamelEvent> eventSupplier, Predicate<EventNotifier> notifierFilter) {
- if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) {
- // do not generate events for an notify event
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
return false;
}
- return doNotify(context,
- eventSupplier,
- notifierFilter.or(EventNotifier::isIgnoreStepEvents));
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreCamelContextEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createCamelContextStopFailureEvent(context, cause);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
}
- private static boolean doNotify(CamelContext context, Function<EventFactory, CamelEvent> eventSupplier, Predicate<EventNotifier> notifierFilter) {
+ public static boolean notifyServiceStopFailure(CamelContext context, Object service, Throwable cause) {
ManagementStrategy management = context.getManagementStrategy();
if (management == null) {
return false;
@@ -279,13 +302,13 @@ public final class EventHelper {
if (notifier.isDisabled()) {
continue;
}
- if (notifierFilter.test(notifier)) {
+ if (notifier.isIgnoreServiceEvents()) {
continue;
}
if (event == null) {
// only create event once
- event = eventSupplier.apply(factory);
+ event = factory.createServiceStopFailureEvent(context, service, cause);
if (event == null) {
// factory could not create event so exit
return false;
@@ -296,9 +319,1046 @@ public final class EventHelper {
return answer;
}
- private static boolean doNotifyEvent(EventNotifier notifier, CamelEvent event) {
- // only notify if notifier is started
- if (!ServiceHelper.isStarted(notifier)) {
+ public static boolean notifyServiceStartupFailure(CamelContext context, Object service, Throwable cause) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreServiceEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createServiceStartupFailureEvent(context, service, cause);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyRouteStarted(CamelContext context, Route route) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreRouteEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createRouteStartedEvent(route);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyRouteStopped(CamelContext context, Route route) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreRouteEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createRouteStoppedEvent(route);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyRouteAdded(CamelContext context, Route route) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreRouteEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createRouteAddedEvent(route);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyRouteRemoved(CamelContext context, Route route) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreRouteEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createRouteRemovedEvent(route);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyExchangeCreated(CamelContext context, Exchange exchange) {
+ if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) {
+ // do not generate events for an notify event
+ return false;
+ }
+
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ // optimise for loop using index access to avoid creating iterator object
+ for (int i = 0; i < notifiers.size(); i++) {
+ EventNotifier notifier = notifiers.get(i);
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeCreatedEvent()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createExchangeCreatedEvent(exchange);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyExchangeDone(CamelContext context, Exchange exchange) {
+ if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) {
+ // do not generate events for an notify event
+ return false;
+ }
+
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ // optimise for loop using index access to avoid creating iterator object
+ for (int i = 0; i < notifiers.size(); i++) {
+ EventNotifier notifier = notifiers.get(i);
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeCompletedEvent()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createExchangeCompletedEvent(exchange);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyExchangeFailed(CamelContext context, Exchange exchange) {
+ if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) {
+ // do not generate events for an notify event
+ return false;
+ }
+
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ // optimise for loop using index access to avoid creating iterator object
+ for (int i = 0; i < notifiers.size(); i++) {
+ EventNotifier notifier = notifiers.get(i);
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeFailedEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createExchangeFailedEvent(exchange);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyExchangeFailureHandling(CamelContext context, Exchange exchange, Processor failureHandler,
+ boolean deadLetterChannel, String deadLetterUri) {
+ if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) {
+ // do not generate events for an notify event
+ return false;
+ }
+
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ // optimise for loop using index access to avoid creating iterator object
+ for (int i = 0; i < notifiers.size(); i++) {
+ EventNotifier notifier = notifiers.get(i);
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeFailedEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createExchangeFailureHandlingEvent(exchange, failureHandler, deadLetterChannel, deadLetterUri);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyExchangeFailureHandled(CamelContext context, Exchange exchange, Processor failureHandler,
+ boolean deadLetterChannel, String deadLetterUri) {
+ if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) {
+ // do not generate events for an notify event
+ return false;
+ }
+
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ // optimise for loop using index access to avoid creating iterator object
+ for (int i = 0; i < notifiers.size(); i++) {
+ EventNotifier notifier = notifiers.get(i);
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeFailedEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createExchangeFailureHandledEvent(exchange, failureHandler, deadLetterChannel, deadLetterUri);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyExchangeRedelivery(CamelContext context, Exchange exchange, int attempt) {
+ if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) {
+ // do not generate events for an notify event
+ return false;
+ }
+
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ // optimise for loop using index access to avoid creating iterator object
+ for (int i = 0; i < notifiers.size(); i++) {
+ EventNotifier notifier = notifiers.get(i);
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeFailedEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createExchangeRedeliveryEvent(exchange, attempt);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyExchangeSending(CamelContext context, Exchange exchange, Endpoint endpoint) {
+ if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) {
+ // do not generate events for an notify event
+ return false;
+ }
+
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ // optimise for loop using index access to avoid creating iterator object
+ for (int i = 0; i < notifiers.size(); i++) {
+ EventNotifier notifier = notifiers.get(i);
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeSendingEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createExchangeSendingEvent(exchange, endpoint);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyExchangeSent(CamelContext context, Exchange exchange, Endpoint endpoint, long timeTaken) {
+ if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) {
+ // do not generate events for an notify event
+ return false;
+ }
+
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ // optimise for loop using index access to avoid creating iterator object
+ for (int i = 0; i < notifiers.size(); i++) {
+ EventNotifier notifier = notifiers.get(i);
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeSentEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createExchangeSentEvent(exchange, endpoint, timeTaken);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyCamelContextSuspending(CamelContext context) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreCamelContextEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createCamelContextSuspendingEvent(context);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyCamelContextSuspended(CamelContext context) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreCamelContextEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createCamelContextSuspendedEvent(context);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyCamelContextResuming(CamelContext context) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreCamelContextEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createCamelContextResumingEvent(context);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyCamelContextResumed(CamelContext context) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreCamelContextEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createCamelContextResumedEvent(context);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyCamelContextResumeFailed(CamelContext context, Throwable cause) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreCamelContextEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createCamelContextResumeFailureEvent(context, cause);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyCamelContextRoutesStarting(CamelContext context) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreCamelContextEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createCamelContextRoutesStartingEvent(context);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyCamelContextRoutesStarted(CamelContext context) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreCamelContextEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createCamelContextRoutesStartedEvent(context);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyCamelContextRoutesStopping(CamelContext context) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreCamelContextEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createCamelContextRoutesStoppingEvent(context);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyCamelContextRoutesStopped(CamelContext context) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreCamelContextEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createCamelContextRoutesStoppedEvent(context);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyStepStarted(CamelContext context, Exchange exchange, String stepId) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreStepEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createStepStartedEvent(exchange, stepId);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyStepDone(CamelContext context, Exchange exchange, String stepId) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreStepEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createStepCompletedEvent(exchange, stepId);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ public static boolean notifyStepFailed(CamelContext context, Exchange exchange, String stepId) {
+ ManagementStrategy management = context.getManagementStrategy();
+ if (management == null) {
+ return false;
+ }
+
+ EventFactory factory = management.getEventFactory();
+ if (factory == null) {
+ return false;
+ }
+
+ List<EventNotifier> notifiers = management.getEventNotifiers();
+ if (notifiers == null || notifiers.isEmpty()) {
+ return false;
+ }
+
+ boolean answer = false;
+ CamelEvent event = null;
+ for (EventNotifier notifier : notifiers) {
+ if (notifier.isDisabled()) {
+ continue;
+ }
+ if (notifier.isIgnoreStepEvents()) {
+ continue;
+ }
+
+ if (event == null) {
+ // only create event once
+ event = factory.createStepFailedEvent(exchange, stepId);
+ if (event == null) {
+ // factory could not create event so exit
+ return false;
+ }
+ }
+ answer |= doNotifyEvent(notifier, event);
+ }
+ return answer;
+ }
+
+ private static boolean doNotifyEvent(EventNotifier notifier, CamelEvent event) {
+ // only notify if notifier is started
+ boolean started = true;
+ if (notifier instanceof StatefulService) {
+ started = ((StatefulService) notifier).isStarted();
+ }
+ if (!started) {
LOG.debug("Ignoring notifying event {}. The EventNotifier has not been started yet: {}", event, notifier);
return false;
}
@@ -317,4 +1377,4 @@ public final class EventHelper {
return true;
}
-}
+}
\ No newline at end of file