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


The following commit(s) were added to refs/heads/main by this push:
     new 1427430ab70 camel-core - Trigger CamelContextReloadedEvent when 
context is reloaded.
1427430ab70 is described below

commit 1427430ab7099eca8c90675dd57e701703919edf
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Thu Sep 8 07:47:39 2022 +0200

    camel-core - Trigger CamelContextReloadedEvent when context is reloaded.
---
 .../vault/CloudTrailReloadTriggerTask.java         |  2 +-
 .../main/java/org/apache/camel/spi/CamelEvent.java |  8 ++++
 .../java/org/apache/camel/spi/EventFactory.java    |  9 +++++
 .../impl/engine/DefaultContextReloadStrategy.java  |  3 +-
 .../impl/event/CamelContextReloadedEvent.java      | 45 ++++++++++++++++++++++
 .../camel/impl/event/DefaultEventFactory.java      |  9 +++++
 .../java/org/apache/camel/support/EventHelper.java | 39 +++++++++++++++++++
 7 files changed, 113 insertions(+), 2 deletions(-)

diff --git 
a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/vault/CloudTrailReloadTriggerTask.java
 
b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/vault/CloudTrailReloadTriggerTask.java
index f72fdc9daf0..2dc00a01533 100644
--- 
a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/vault/CloudTrailReloadTriggerTask.java
+++ 
b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/vault/CloudTrailReloadTriggerTask.java
@@ -205,7 +205,7 @@ public class CloudTrailReloadTriggerTask extends 
ServiceSupport implements Camel
             ContextReloadStrategy reload = 
camelContext.hasService(ContextReloadStrategy.class);
             if (reload != null) {
                 // trigger reload
-                reload.onReload(camelContext.getName());
+                reload.onReload(this);
             }
         }
     }
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/CamelEvent.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/CamelEvent.java
index 69ddfa91a0f..34eee1d96e5 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/CamelEvent.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/CamelEvent.java
@@ -41,6 +41,7 @@ public interface CamelEvent {
         CamelContextStopping,
         CamelContextSuspended,
         CamelContextSuspending,
+        CamelContextReloaded,
         ExchangeCompleted,
         ExchangeCreated,
         ExchangeFailed,
@@ -220,6 +221,13 @@ public interface CamelEvent {
         }
     }
 
+    interface CamelContextReloadedEvent extends CamelContextEvent {
+        @Override
+        default Type getType() {
+            return Type.CamelContextStartupFailure;
+        }
+    }
+
     interface ExchangeEvent extends CamelEvent {
 
         Exchange getExchange();
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/EventFactory.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/EventFactory.java
index 08e86d11dcf..ffc210879e9 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/EventFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/EventFactory.java
@@ -137,6 +137,15 @@ public interface EventFactory {
      */
     CamelEvent createCamelContextRoutesStoppedEvent(CamelContext context);
 
+    /**
+     * Creates an {@link CamelEvent} for {@link CamelContext} has been 
reloaded successfully.
+     *
+     * @param  context camel context
+     * @param  source  the source triggered reload
+     * @return         the reloaded event
+     */
+    CamelEvent createCamelContextReloaded(CamelContext context, Object source);
+
     /**
      * Creates an {@link CamelEvent} for a Service failed to start cleanly
      *
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultContextReloadStrategy.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultContextReloadStrategy.java
index 3b524bda07b..36b38f87264 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultContextReloadStrategy.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultContextReloadStrategy.java
@@ -22,6 +22,7 @@ import org.apache.camel.api.management.ManagedOperation;
 import org.apache.camel.spi.ContextReloadStrategy;
 import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.spi.PropertiesSource;
+import org.apache.camel.support.EventHelper;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.support.service.ServiceSupport;
 import org.slf4j.Logger;
@@ -48,11 +49,11 @@ public class DefaultContextReloadStrategy extends 
ServiceSupport implements Cont
     @Override
     public void onReload(Object source) {
         LOG.info("Reloading CamelContext ({}) triggered by: {}", 
camelContext.getName(), source);
-
         try {
             reloadProperties(source);
             reloadRoutes(source);
             incSucceededCounter();
+            EventHelper.notifyContextReloaded(getCamelContext(), source);
         } catch (Exception e) {
             incFailedCounter();
             LOG.warn("Error reloading CamelContext (" + camelContext.getName() 
+ ") due to: " + e.getMessage(), e);
diff --git 
a/core/camel-base/src/main/java/org/apache/camel/impl/event/CamelContextReloadedEvent.java
 
b/core/camel-base/src/main/java/org/apache/camel/impl/event/CamelContextReloadedEvent.java
new file mode 100644
index 00000000000..69e9bf66847
--- /dev/null
+++ 
b/core/camel-base/src/main/java/org/apache/camel/impl/event/CamelContextReloadedEvent.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.impl.event;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
+
+public class CamelContextReloadedEvent extends AbstractContextEvent
+        implements CamelEvent.CamelContextReloadedEvent {
+
+    private static final long serialVersionUID = 7966471393751298719L;
+
+    private final Object action;
+
+    public CamelContextReloadedEvent(CamelContext context, Object action) {
+        super(context);
+        this.action = action;
+    }
+
+    /**
+     * The action which triggered reloading
+     */
+    public Object getAction() {
+        return action;
+    }
+
+    @Override
+    public String toString() {
+        return "CamelContext reloaded";
+    }
+}
diff --git 
a/core/camel-base/src/main/java/org/apache/camel/impl/event/DefaultEventFactory.java
 
b/core/camel-base/src/main/java/org/apache/camel/impl/event/DefaultEventFactory.java
index df048ec95ba..5054844a1d9 100644
--- 
a/core/camel-base/src/main/java/org/apache/camel/impl/event/DefaultEventFactory.java
+++ 
b/core/camel-base/src/main/java/org/apache/camel/impl/event/DefaultEventFactory.java
@@ -150,6 +150,15 @@ public class DefaultEventFactory implements EventFactory {
         return answer;
     }
 
+    @Override
+    public CamelEvent createCamelContextReloaded(CamelContext context, Object 
source) {
+        CamelEvent answer = new CamelContextReloadedEvent(context, source);
+        if (timestampEnabled) {
+            answer.setTimestamp(System.currentTimeMillis());
+        }
+        return answer;
+    }
+
     @Override
     public CamelEvent createServiceStartupFailureEvent(CamelContext context, 
Object service, Throwable cause) {
         CamelEvent answer = new ServiceStartupFailureEvent(context, service, 
cause);
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 dd051887b2b..ef22e850313 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
@@ -501,6 +501,45 @@ public final class EventHelper {
         return answer;
     }
 
+    public static boolean notifyContextReloaded(CamelContext context, Object 
source) {
+        ManagementStrategy management = context.getManagementStrategy();
+        if (management == null) {
+            return false;
+        }
+
+        EventFactory factory = management.getEventFactory();
+        if (factory == null) {
+            return false;
+        }
+
+        List<EventNotifier> notifiers = management.getStartedEventNotifiers();
+        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.createCamelContextReloaded(context, source);
+                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) {
         ManagementStrategy management = context.getManagementStrategy();
         if (management == null) {

Reply via email to