This is an automated email from the ASF dual-hosted git repository. jbonofre pushed a commit to branch camel-karaf-4.8.x in repository https://gitbox.apache.org/repos/asf/camel-karaf.git
The following commit(s) were added to refs/heads/camel-karaf-4.8.x by this push: new 266070050 Make camel context optional in most of camel:* shell commands 266070050 is described below commit 26607005040c4e3ce3005f1848bd044b71557371 Author: JB Onofré <jbono...@apache.org> AuthorDate: Thu Apr 3 18:54:05 2025 +0200 Make camel context optional in most of camel:* shell commands (cherry picked from commit 79db2d4449b3e915b7acc5e9b93e9549f86315eb) --- .../camel/karaf/shell/CamelCommandSupport.java | 7 ++- .../apache/camel/karaf/shell/ContextInflight.java | 45 ++++++++------- .../apache/camel/karaf/shell/ContextResume.java | 8 ++- .../org/apache/camel/karaf/shell/ContextStart.java | 8 ++- .../org/apache/camel/karaf/shell/ContextStop.java | 8 ++- .../apache/camel/karaf/shell/ContextSuspend.java | 8 ++- .../org/apache/camel/karaf/shell/EndpointList.java | 43 +++++++------- .../apache/camel/karaf/shell/EndpointStats.java | 66 +++++++++++----------- .../org/apache/camel/karaf/shell/RestApiDoc.java | 10 ++-- .../apache/camel/karaf/shell/RestRegistryList.java | 6 +- .../org/apache/camel/karaf/shell/RouteList.java | 44 +++++++-------- .../apache/camel/karaf/shell/RouteResetStats.java | 29 +++++----- .../org/apache/camel/karaf/shell/RouteResume.java | 14 ++--- .../org/apache/camel/karaf/shell/RouteStart.java | 14 ++--- .../org/apache/camel/karaf/shell/RouteStop.java | 14 ++--- .../org/apache/camel/karaf/shell/RouteSuspend.java | 14 ++--- .../karaf/shell/completers/RouteCompleter.java | 7 ++- 17 files changed, 178 insertions(+), 167 deletions(-) diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/CamelCommandSupport.java b/shell/src/main/java/org/apache/camel/karaf/shell/CamelCommandSupport.java index b45502063..a18d192c6 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/CamelCommandSupport.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/CamelCommandSupport.java @@ -62,10 +62,13 @@ public abstract class CamelCommandSupport { } - public CamelContext getCamelContext(String name) throws Exception { + public List<CamelContext> getCamelContext(String name) throws Exception { + if (name == null) { + return getCamelContexts(); + } for (CamelContext camelContext : getCamelContexts()) { if (camelContext.getName().equals(name)) { - return camelContext; + return List.of(camelContext); } } return null; diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/ContextInflight.java b/shell/src/main/java/org/apache/camel/karaf/shell/ContextInflight.java index 55c45c0ab..07c96b2e1 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/ContextInflight.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/ContextInflight.java @@ -30,13 +30,14 @@ import javax.management.openmbean.CompositeData; import javax.management.openmbean.TabularData; import java.util.Collection; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; @Command(scope = "camel", name = "context-inflight", description = "List inflight exchanges") @Service public class ContextInflight extends CamelCommandSupport implements Action { - @Argument(index = 0, name = "context", description = "The Camel context name", required = true, multiValued = false) + @Argument(index = 0, name = "context", description = "The Camel context name", required = false, multiValued = false) @Completion(CamelContextCompleter.class) String name; @@ -52,37 +53,35 @@ public class ContextInflight extends CamelCommandSupport implements Action { @Override public Object execute() throws Exception { - CamelContext camelContext = getCamelContext(name); - - if (camelContext == null) { - System.err.println("Camel context " + name + " not found"); - return null; - } + List<CamelContext> camelContexts = getCamelContext(name); ShellTable table = new ShellTable(); table.column("ExchangeId"); table.column("From Route"); + table.column("Context"); table.column("Route"); table.column("Node"); table.column("Elapsed (ms)"); table.column("Duration (ms)"); - ManagementAgent agent = camelContext.getManagementStrategy().getManagementAgent(); - if (agent != null) { - MBeanServer mBeanServer = agent.getMBeanServer(); - ObjectName on = new ObjectName(agent.getMBeanObjectDomainName() + ":type=services,name=DefaultInflightRepository,context=" + camelContext.getManagementName()); - if (mBeanServer.isRegistered(on)) { - TabularData list = (TabularData) mBeanServer.invoke(on, "browse", new Object[]{route, limit, sortByLongestDuration}, new String[]{"java.lang.String", "int", "boolean"}); - Collection<CompositeData> values = (Collection<CompositeData>) list.values(); - for (CompositeData data : values) { - Map<String, Object> row = new LinkedHashMap<>(); - Object exchangeId = data.get("exchangeId"); - Object fromRouteId = data.get("fromRouteId"); - Object routeId = data.get("routeId"); - Object nodeId = data.get("nodeId"); - Object elapsed = data.get("elapsed"); - Object duration = data.get("duration"); - table.addRow().addContent(exchangeId, fromRouteId, routeId, nodeId, elapsed, duration); + for (CamelContext camelContext : camelContexts) { + ManagementAgent agent = camelContext.getManagementStrategy().getManagementAgent(); + if (agent != null) { + MBeanServer mBeanServer = agent.getMBeanServer(); + ObjectName on = new ObjectName(agent.getMBeanObjectDomainName() + ":type=services,name=DefaultInflightRepository,context=" + camelContext.getManagementName()); + if (mBeanServer.isRegistered(on)) { + TabularData list = (TabularData) mBeanServer.invoke(on, "browse", new Object[]{route, limit, sortByLongestDuration}, new String[]{"java.lang.String", "int", "boolean"}); + Collection<CompositeData> values = (Collection<CompositeData>) list.values(); + for (CompositeData data : values) { + Map<String, Object> row = new LinkedHashMap<>(); + Object exchangeId = data.get("exchangeId"); + Object fromRouteId = data.get("fromRouteId"); + Object routeId = data.get("routeId"); + Object nodeId = data.get("nodeId"); + Object elapsed = data.get("elapsed"); + Object duration = data.get("duration"); + table.addRow().addContent(exchangeId, fromRouteId, camelContext.getName(), routeId, nodeId, elapsed, duration); + } } } } diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/ContextResume.java b/shell/src/main/java/org/apache/camel/karaf/shell/ContextResume.java index 647b39fd9..9705b1fe4 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/ContextResume.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/ContextResume.java @@ -24,6 +24,8 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.Completion; import org.apache.karaf.shell.api.action.lifecycle.Service; +import java.util.List; + @Command(scope = "camel", name = "context-resume", description = "Resumes a Camel context") @Service public class ContextResume extends CamelCommandSupport implements Action { @@ -34,14 +36,14 @@ public class ContextResume extends CamelCommandSupport implements Action { @Override public Object execute() throws Exception { - CamelContext camelContext = getCamelContext(name); + List<CamelContext> camelContexts = getCamelContext(name); - if (camelContext == null) { + if (camelContexts.size() != 1) { System.err.println("Camel context " + name + " not found"); return null; } - camelContext.resume(); + camelContexts.get(0).resume(); return null; } diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/ContextStart.java b/shell/src/main/java/org/apache/camel/karaf/shell/ContextStart.java index 1f4e7ca62..cbb76b4d4 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/ContextStart.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/ContextStart.java @@ -25,6 +25,8 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.Completion; import org.apache.karaf.shell.api.action.lifecycle.Service; +import java.util.List; + @Command(scope = "camel", name = "context-start", description = "Starts a Camel context") @Service public class ContextStart extends CamelCommandSupport implements Action { @@ -35,13 +37,15 @@ public class ContextStart extends CamelCommandSupport implements Action { @Override public Object execute() throws Exception { - CamelContext camelContext = getCamelContext(name); + List<CamelContext> camelContexts = getCamelContext(name); - if (camelContext == null) { + if (camelContexts.size() != 1) { System.err.println("Camel context " + name + " not found"); return null; } + CamelContext camelContext = camelContexts.get(0); + if (camelContext.getStatus().equals(ServiceStatus.Suspended)) { camelContext.resume(); } else { diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/ContextStop.java b/shell/src/main/java/org/apache/camel/karaf/shell/ContextStop.java index d78e55fe2..287c064d2 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/ContextStop.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/ContextStop.java @@ -24,6 +24,8 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.Completion; import org.apache.karaf.shell.api.action.lifecycle.Service; +import java.util.List; + @Command(scope = "camel", name = "context-stop", description = "Stop a Camel context, it becomes unavailable and can not be started again") @Service public class ContextStop extends CamelCommandSupport implements Action { @@ -34,14 +36,14 @@ public class ContextStop extends CamelCommandSupport implements Action { @Override public Object execute() throws Exception { - CamelContext camelContext = getCamelContext(name); + List<CamelContext> camelContexts = getCamelContext(name); - if (camelContext == null) { + if (camelContexts.size() != 1) { System.err.println("Camel context " + name + " not found"); return null; } - camelContext.stop(); + camelContexts.get(0).stop(); return null; } diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/ContextSuspend.java b/shell/src/main/java/org/apache/camel/karaf/shell/ContextSuspend.java index 5b8b672ad..c94bcc072 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/ContextSuspend.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/ContextSuspend.java @@ -24,6 +24,8 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.Completion; import org.apache.karaf.shell.api.action.lifecycle.Service; +import java.util.List; + @Command(scope = "camel", name = "context-suspend", description = "Suspends a Camel context") @Service public class ContextSuspend extends CamelCommandSupport implements Action { @@ -34,14 +36,14 @@ public class ContextSuspend extends CamelCommandSupport implements Action { @Override public Object execute() throws Exception { - CamelContext camelContext = getCamelContext(name); + List<CamelContext> camelContexts = getCamelContext(name); - if (camelContext == null) { + if (camelContexts.size() != 1) { System.err.println("Camel context " + name + " not found"); return null; } - camelContext.suspend(); + camelContexts.get(0).suspend(); return null; } diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/EndpointList.java b/shell/src/main/java/org/apache/camel/karaf/shell/EndpointList.java index 76e9bee5a..ff8a57c3b 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/EndpointList.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/EndpointList.java @@ -36,7 +36,7 @@ import java.util.List; @Service public class EndpointList extends CamelCommandSupport implements Action { - @Argument(index = 0, name = "context", description = "The name of the Camel context (support wildcard)", required = true, multiValued = false) + @Argument(index = 0, name = "context", description = "The name of the Camel context (support wildcard)", required = false, multiValued = false) @Completion(CamelContextCompleter.class) String name; @@ -51,30 +51,27 @@ public class EndpointList extends CamelCommandSupport implements Action { table.column("Uri"); table.column("Status"); - CamelContext camelContext = getCamelContext(name); + List<CamelContext> camelContexts = getCamelContext(name); - if (camelContext == null) { - System.err.println("Camel context " + name + " not found"); - return null; - } - - List<Endpoint> endpoints = new ArrayList<>(camelContext.getEndpoints()); - // sort routes - Collections.sort(endpoints, new Comparator<Endpoint>() { - @Override - public int compare(Endpoint e1, Endpoint e2) { - return e1.getEndpointKey().compareTo(e2.getEndpointKey()); - } - }); - for (Endpoint endpoint : endpoints) { - String uri = endpoint.getEndpointUri(); - if (decode) { - // decode uri so its more human readable - uri = URLDecoder.decode(uri, "UTF-8"); + for (CamelContext camelContext : camelContexts) { + List<Endpoint> endpoints = new ArrayList<>(camelContext.getEndpoints()); + // sort routes + Collections.sort(endpoints, new Comparator<Endpoint>() { + @Override + public int compare(Endpoint e1, Endpoint e2) { + return e1.getEndpointKey().compareTo(e2.getEndpointKey()); + } + }); + for (Endpoint endpoint : endpoints) { + String uri = endpoint.getEndpointUri(); + if (decode) { + // decode uri so its more human readable + uri = URLDecoder.decode(uri, "UTF-8"); + } + // sanitize and mask uri so we don't see passwords + uri = URISupport.sanitizeUri(uri); + table.addRow().addContent(camelContext.getName(), uri, getEndpointState(endpoint)); } - // sanitize and mask uri so we don't see passwords - uri = URISupport.sanitizeUri(uri); - table.addRow().addContent(camelContext.getName(), uri, getEndpointState(endpoint)); } table.print(System.out); diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/EndpointStats.java b/shell/src/main/java/org/apache/camel/karaf/shell/EndpointStats.java index 9720569a3..5b6fbb805 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/EndpointStats.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/EndpointStats.java @@ -26,12 +26,13 @@ import org.apache.karaf.shell.api.action.lifecycle.Service; import org.apache.karaf.shell.support.table.ShellTable; import java.net.URLDecoder; +import java.util.List; @Command(scope = "camel", name = "endpoint-stats", description = "List the statistics of the Camel endpoints") @Service public class EndpointStats extends CamelCommandSupport implements Action { - @Argument(index = 0, name = "context", description = "The name of the Camel context (support wildcard)", required = true, multiValued = false) + @Argument(index = 0, name = "context", description = "The name of the Camel context (support wildcard)", required = false, multiValued = false) @Completion(CamelContextCompleter.class) String name; @@ -52,41 +53,38 @@ public class EndpointStats extends CamelCommandSupport implements Action { table.column("Dynamic"); table.column("Total #"); - CamelContext camelContext = getCamelContext(name); + List<CamelContext> camelContexts = getCamelContext(name); + + for (CamelContext camelContext : camelContexts) { + if (camelContext.getRuntimeEndpointRegistry() != null) { + EndpointRegistry endpointRegistry = camelContext.getEndpointRegistry(); + for (RuntimeEndpointRegistry.Statistic stat : camelContext.getRuntimeEndpointRegistry().getEndpointStatistics()) { + String uri = stat.getUri(); + String routeId = stat.getRouteId(); + String direction = stat.getDirection(); + boolean isStatic = endpointRegistry.isStatic(uri); + boolean isDynamic = endpointRegistry.isDynamic(uri); + long hits = stat.getHits(); + + if (decode) { + // decode uri so it's more human readable + uri = URLDecoder.decode(uri, "UTF-8"); + } + // sanitize and mask uri so we don't see passwords + uri = URISupport.sanitizeUri(uri); + + // should we filter ? + if (isValidRow(direction, Boolean.toString(isStatic), Boolean.toString(isDynamic))) { + table.addRow().addContent(camelContext.getName(), + uri, + routeId, + direction, + isStatic, + isDynamic, + hits); + } - if (camelContext == null) { - System.err.println("Camel context " + name + " not found"); - return null; - } - - if (camelContext.getRuntimeEndpointRegistry() != null) { - EndpointRegistry endpointRegistry = camelContext.getEndpointRegistry(); - for (RuntimeEndpointRegistry.Statistic stat : camelContext.getRuntimeEndpointRegistry().getEndpointStatistics()) { - String uri = stat.getUri(); - String routeId = stat.getRouteId(); - String direction = stat.getDirection(); - boolean isStatic = endpointRegistry.isStatic(uri); - boolean isDynamic = endpointRegistry.isDynamic(uri); - long hits = stat.getHits(); - - if (decode) { - // decode uri so it's more human readable - uri = URLDecoder.decode(uri, "UTF-8"); } - // sanitize and mask uri so we don't see passwords - uri = URISupport.sanitizeUri(uri); - - // should we filter ? - if (isValidRow(direction, Boolean.toString(isStatic), Boolean.toString(isDynamic))) { - table.addRow().addContent(camelContext.getName(), - uri, - routeId, - direction, - isStatic, - isDynamic, - hits); - } - } } diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/RestApiDoc.java b/shell/src/main/java/org/apache/camel/karaf/shell/RestApiDoc.java index 789a334c9..7ab111df6 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/RestApiDoc.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/RestApiDoc.java @@ -24,24 +24,26 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.Completion; import org.apache.karaf.shell.api.action.lifecycle.Service; +import java.util.List; + @Command(scope = "camel", name = "rest-api-doc", description = "List the Camel REST services API documentation (requires camel-swagger-java on classpath)") @Service public class RestApiDoc extends CamelCommandSupport implements Action { - @Argument(index = 0, name = "context", description = "The Camel context name where to look for the REST services", required = true, multiValued = false) + @Argument(index = 0, name = "context", description = "The Camel context name where to look for the REST services", required = false, multiValued = false) @Completion(CamelContextCompleter.class) String name; @Override public Object execute() throws Exception { - CamelContext camelContext = getCamelContext(name); + List<CamelContext> camelContexts = getCamelContext(name); - if (camelContext == null) { + if (camelContexts.size() != 1) { System.err.println("Camel context " + name + " not found"); return null; } - String json = camelContext.getRestRegistry().apiDocAsJson(); + String json = camelContexts.get(0).getRestRegistry().apiDocAsJson(); if (json != null) { System.out.println(json); } else { diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/RestRegistryList.java b/shell/src/main/java/org/apache/camel/karaf/shell/RestRegistryList.java index a4cc16ded..b1beffdb3 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/RestRegistryList.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/RestRegistryList.java @@ -50,13 +50,13 @@ public class RestRegistryList extends CamelCommandSupport implements Action { table.column("Method"); table.column("State"); - CamelContext camelContext = getCamelContext(name); - if (camelContext == null) { + List<CamelContext> camelContexts = getCamelContext(name); + if (camelContexts.size() != 1) { System.err.println("Camel context " + name + " not found"); return null; } - List<RestRegistry.RestService> services = new ArrayList<>(camelContext.getRestRegistry().listAllRestServices()); + List<RestRegistry.RestService> services = new ArrayList<>(camelContexts.get(0).getRestRegistry().listAllRestServices()); Collections.sort(services, new Comparator<RestRegistry.RestService>() { @Override public int compare(RestRegistry.RestService s1, RestRegistry.RestService s2) { diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/RouteList.java b/shell/src/main/java/org/apache/camel/karaf/shell/RouteList.java index 149bb856f..6af7e4cf1 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/RouteList.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/RouteList.java @@ -29,6 +29,8 @@ import org.apache.karaf.shell.api.action.Completion; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.apache.karaf.shell.support.table.ShellTable; +import java.util.List; + @Command(scope = "camel", name = "route-list", description = "List Camel routes") @Service public class RouteList extends CamelCommandSupport implements Action { @@ -48,30 +50,28 @@ public class RouteList extends CamelCommandSupport implements Action { table.column("Inflight #"); table.column("Uptime"); - CamelContext camelContext = getCamelContext(name); - if (camelContext == null) { - System.err.println("Camel context " + name + " not found"); - return null; - } + List<CamelContext> camelContexts = getCamelContext(name); - for (Route route : camelContext.getRoutes()) { - ManagedCamelContext mcc = camelContext.getCamelContextExtension().getContextPlugin(ManagedCamelContext.class); - long exchangesTotal = 0; - long exchangesInflight = 0; - long exchangesFailed = 0; - if (mcc != null && mcc.getManagedCamelContext() != null) { - ManagedRouteMBean mr = mcc.getManagedRoute(route.getId()); - exchangesFailed = mr.getExchangesFailed(); - exchangesInflight = mr.getExchangesInflight(); - exchangesTotal = mr.getExchangesTotal(); + for (CamelContext camelContext : camelContexts) { + for (Route route : camelContext.getRoutes()) { + ManagedCamelContext mcc = camelContext.getCamelContextExtension().getContextPlugin(ManagedCamelContext.class); + long exchangesTotal = 0; + long exchangesInflight = 0; + long exchangesFailed = 0; + if (mcc != null && mcc.getManagedCamelContext() != null) { + ManagedRouteMBean mr = mcc.getManagedRoute(route.getId()); + exchangesFailed = mr.getExchangesFailed(); + exchangesInflight = mr.getExchangesInflight(); + exchangesTotal = mr.getExchangesTotal(); + } + table.addRow().addContent(route.getCamelContext().getName(), + route.getId(), + getRouteState(route), + exchangesTotal, + exchangesFailed, + exchangesInflight, + route.getUptime()); } - table.addRow().addContent(route.getCamelContext().getName(), - route.getId(), - getRouteState(route), - exchangesTotal, - exchangesFailed, - exchangesInflight, - route.getUptime()); } table.print(System.out); diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/RouteResetStats.java b/shell/src/main/java/org/apache/camel/karaf/shell/RouteResetStats.java index ad44adfad..562174e77 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/RouteResetStats.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/RouteResetStats.java @@ -27,6 +27,7 @@ import org.apache.karaf.shell.api.action.lifecycle.Service; import javax.management.MBeanServer; import javax.management.ObjectName; +import java.util.List; import java.util.Set; @Command(scope = "camel", name = "route-reset-stats", description = "Reset route performance stats from a Camel context") @@ -40,23 +41,21 @@ public class RouteResetStats extends CamelCommandSupport implements Action { @Override public Object execute() throws Exception { - CamelContext camelContext = getCamelContext(name); - if (camelContext == null) { - System.err.println("Camel context " + name + " not found"); - return null; - } + List<CamelContext> camelContexts = getCamelContext(name); - ManagementAgent agent = camelContext.getManagementStrategy().getManagementAgent(); - if (agent != null) { - MBeanServer mBeanServer = agent.getMBeanServer(); + for (CamelContext camelContext : camelContexts) { + ManagementAgent agent = camelContext.getManagementStrategy().getManagementAgent(); + if (agent != null) { + MBeanServer mBeanServer = agent.getMBeanServer(); - // reset route mbeans - ObjectName query = ObjectName.getInstance(agent.getMBeanObjectDomainName() + ":type=routes,*"); - Set<ObjectName> mBeans = mBeanServer.queryNames(query, null); - for (ObjectName routeMBean : mBeans) { - String camelId = (String) mBeanServer.getAttribute(routeMBean, "CamelId"); - if (camelId != null && camelId.equals(camelContext.getName())) { - mBeanServer.invoke(routeMBean, "reset", new Object[]{true}, new String[]{"boolean"}); + // reset route mbeans + ObjectName query = ObjectName.getInstance(agent.getMBeanObjectDomainName() + ":type=routes,*"); + Set<ObjectName> mBeans = mBeanServer.queryNames(query, null); + for (ObjectName routeMBean : mBeans) { + String camelId = (String) mBeanServer.getAttribute(routeMBean, "CamelId"); + if (camelId != null && camelId.equals(camelContext.getName())) { + mBeanServer.invoke(routeMBean, "reset", new Object[]{true}, new String[]{"boolean"}); + } } } } diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/RouteResume.java b/shell/src/main/java/org/apache/camel/karaf/shell/RouteResume.java index 24984b2be..f61676b36 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/RouteResume.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/RouteResume.java @@ -25,11 +25,13 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.Completion; import org.apache.karaf.shell.api.action.lifecycle.Service; +import java.util.List; + @Command(scope = "camel", name = "route-resume", description = "Resume a Camel route") @Service public class RouteResume extends CamelCommandSupport implements Action { - @Argument(index = 0, name = "context", description = "The Camel context name", required = true, multiValued = false) + @Argument(index = 0, name = "context", description = "The Camel context name", required = false, multiValued = false) @Completion(CamelContextCompleter.class) String context; @@ -39,13 +41,11 @@ public class RouteResume extends CamelCommandSupport implements Action { @Override public Object execute() throws Exception { - CamelContext camelContext = getCamelContext(context); - if (camelContext == null) { - System.err.println("Camel context " + context + " not found"); - return null; - } + List<CamelContext> camelContexts = getCamelContext(context); - camelContext.getRouteController().resumeRoute(route); + for (CamelContext camelContext : camelContexts) { + camelContext.getRouteController().resumeRoute(route); + } return null; } diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/RouteStart.java b/shell/src/main/java/org/apache/camel/karaf/shell/RouteStart.java index f1e1837e3..eab1d02e9 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/RouteStart.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/RouteStart.java @@ -25,11 +25,13 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.Completion; import org.apache.karaf.shell.api.action.lifecycle.Service; +import java.util.List; + @Command(scope = "camel", name = "route-start", description = "Start a Camel route") @Service public class RouteStart extends CamelCommandSupport implements Action { - @Argument(index = 0, name = "context", description = "The Camel context name", required = true, multiValued = false) + @Argument(index = 0, name = "context", description = "The Camel context name", required = false, multiValued = false) @Completion(CamelContextCompleter.class) String context; @@ -39,13 +41,11 @@ public class RouteStart extends CamelCommandSupport implements Action { @Override public Object execute() throws Exception { - CamelContext camelContext = getCamelContext(context); - if (camelContext == null) { - System.err.println("Camel context " + context + " not found"); - return null; - } + List<CamelContext> camelContexts = getCamelContext(context); - camelContext.getRouteController().startRoute(route); + for (CamelContext camelContext : camelContexts) { + camelContext.getRouteController().startRoute(route); + } return null; } diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/RouteStop.java b/shell/src/main/java/org/apache/camel/karaf/shell/RouteStop.java index 61bd47435..dd046a15a 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/RouteStop.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/RouteStop.java @@ -25,11 +25,13 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.Completion; import org.apache.karaf.shell.api.action.lifecycle.Service; +import java.util.List; + @Command(scope = "camel", name = "route-stop", description = "Stop a Camel route") @Service public class RouteStop extends CamelCommandSupport implements Action { - @Argument(index = 0, name = "context", description = "The Camel context name", required = true, multiValued = false) + @Argument(index = 0, name = "context", description = "The Camel context name", required = false, multiValued = false) @Completion(CamelContextCompleter.class) String context; @@ -39,13 +41,11 @@ public class RouteStop extends CamelCommandSupport implements Action { @Override public Object execute() throws Exception { - CamelContext camelContext = getCamelContext(context); - if (camelContext == null) { - System.err.println("Camel context " + context + " not found"); - return null; - } + List<CamelContext> camelContexts = getCamelContext(context); - camelContext.getRouteController().stopRoute(route); + for (CamelContext camelContext : camelContexts) { + camelContext.getRouteController().stopRoute(route); + } return null; } diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/RouteSuspend.java b/shell/src/main/java/org/apache/camel/karaf/shell/RouteSuspend.java index 57d8d7233..3931d8d98 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/RouteSuspend.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/RouteSuspend.java @@ -25,11 +25,13 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.Completion; import org.apache.karaf.shell.api.action.lifecycle.Service; +import java.util.List; + @Command(scope = "camel", name = "route-suspend", description = "Suspend a Camel route") @Service public class RouteSuspend extends CamelCommandSupport implements Action { - @Argument(index = 0, name = "context", description = "The Camel context name", required = true, multiValued = false) + @Argument(index = 0, name = "context", description = "The Camel context name", required = false, multiValued = false) @Completion(CamelContextCompleter.class) String context; @@ -39,13 +41,11 @@ public class RouteSuspend extends CamelCommandSupport implements Action { @Override public Object execute() throws Exception { - CamelContext camelContext = getCamelContext(context); - if (camelContext == null) { - System.err.println("Camel context " + context + " not found"); - return null; - } + List<CamelContext> camelContexts = getCamelContext(context); - camelContext.getRouteController().suspendRoute(route); + for (CamelContext camelContext : camelContexts) { + camelContext.getRouteController().suspendRoute(route); + } return null; } diff --git a/shell/src/main/java/org/apache/camel/karaf/shell/completers/RouteCompleter.java b/shell/src/main/java/org/apache/camel/karaf/shell/completers/RouteCompleter.java index 6018ce7d8..11dd3d9cc 100644 --- a/shell/src/main/java/org/apache/camel/karaf/shell/completers/RouteCompleter.java +++ b/shell/src/main/java/org/apache/camel/karaf/shell/completers/RouteCompleter.java @@ -16,6 +16,7 @@ */ package org.apache.camel.karaf.shell.completers; +import org.apache.camel.CamelContext; import org.apache.camel.Route; import org.apache.camel.karaf.shell.CamelCommandSupport; import org.apache.karaf.shell.api.action.lifecycle.Service; @@ -42,8 +43,10 @@ public class RouteCompleter extends CamelCommandSupport implements Completer { try { StringsCompleter delegate = new StringsCompleter(); - for (Route route : getCamelContext(contextName).getRoutes()) { - delegate.getStrings().add(route.getRouteId()); + for (CamelContext camelContext : getCamelContext(contextName)) { + for (Route route : camelContext.getRoutes()) { + delegate.getStrings().add(route.getRouteId()); + } } return delegate.complete(session, commandLine, candidates); } catch (Exception e) {