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 2023/05/18 07:56:50 UTC
[camel] branch camel-3.x updated: CAMEL-19366: camel-core - Trigger reload via dev console make it async
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-3.x by this push:
new 98c3d9d69b1 CAMEL-19366: camel-core - Trigger reload via dev console make it async
98c3d9d69b1 is described below
commit 98c3d9d69b19835b3aa37890388220b4e131b4b2
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu May 18 09:56:19 2023 +0200
CAMEL-19366: camel-core - Trigger reload via dev console make it async
---
.../camel/impl/console/ReloadDevConsole.java | 44 ++++++++++++++++------
1 file changed, 33 insertions(+), 11 deletions(-)
diff --git a/core/camel-console/src/main/java/org/apache/camel/impl/console/ReloadDevConsole.java b/core/camel-console/src/main/java/org/apache/camel/impl/console/ReloadDevConsole.java
index 3133e8a7d63..e512151128a 100644
--- a/core/camel-console/src/main/java/org/apache/camel/impl/console/ReloadDevConsole.java
+++ b/core/camel-console/src/main/java/org/apache/camel/impl/console/ReloadDevConsole.java
@@ -18,6 +18,7 @@ package org.apache.camel.impl.console;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ExecutorService;
import org.apache.camel.spi.ReloadStrategy;
import org.apache.camel.spi.annotations.DevConsole;
@@ -28,6 +29,9 @@ import org.apache.camel.util.json.JsonObject;
@DevConsole("reload")
public class ReloadDevConsole extends AbstractDevConsole {
+ // reload on demand should run async to avoid blocking
+ private volatile ExecutorService reloadThread;
+
/**
* Option to trigger reloading
*/
@@ -44,11 +48,12 @@ public class ReloadDevConsole extends AbstractDevConsole {
Set<ReloadStrategy> rs = getCamelContext().hasServices(ReloadStrategy.class);
for (ReloadStrategy r : rs) {
if ("true".equals(trigger)) {
- r.onReload("ReloadDevConsole");
+ getOrCreateReloadTask().submit(() -> r.onReload("ReloadDevConsole"));
+ } else {
+ sb.append(String.format("\nReloadStrategy: %s", r.getClass().getName()));
+ sb.append(String.format("\n Reloaded: %s", r.getReloadCounter()));
+ sb.append(String.format("\n Failed: %s", r.getFailedCounter()));
}
- sb.append(String.format("\nReloadStrategy: %s", r.getClass().getName()));
- sb.append(String.format("\n Reloaded: %s", r.getReloadCounter()));
- sb.append(String.format("\n Failed: %s", r.getFailedCounter()));
}
sb.append("\n");
@@ -60,20 +65,37 @@ public class ReloadDevConsole extends AbstractDevConsole {
JsonObject root = new JsonObject();
JsonArray arr = new JsonArray();
- root.put("reloadStrategies", arr);
Set<ReloadStrategy> rs = getCamelContext().hasServices(ReloadStrategy.class);
for (ReloadStrategy r : rs) {
if ("true".equals(trigger)) {
- r.onReload("ReloadDevConsole");
+ getOrCreateReloadTask().submit(() -> r.onReload("ReloadDevConsole"));
+ } else {
+ if (root.isEmpty()) {
+ root.put("reloadStrategies", arr);
+ }
+ JsonObject jo = new JsonObject();
+ arr.add(jo);
+ jo.put("className", r.getClass().getName());
+ jo.put("reloaded", r.getReloadCounter());
+ jo.put("failed", r.getFailedCounter());
}
- JsonObject jo = new JsonObject();
- arr.add(jo);
- jo.put("className", r.getClass().getName());
- jo.put("reloadCounter", r.getReloadCounter());
- jo.put("failedCounter", r.getFailedCounter());
}
return root;
}
+ protected ExecutorService getOrCreateReloadTask() {
+ if (reloadThread == null) {
+ reloadThread = getCamelContext().getExecutorServiceManager().newSingleThreadExecutor(this, "ReloadOnDemand");
+ }
+ return reloadThread;
+ }
+
+ @Override
+ protected void doStop() throws Exception {
+ if (reloadThread != null) {
+ getCamelContext().getExecutorServiceManager().shutdown(reloadThread);
+ reloadThread = null;
+ }
+ }
}