CAMEL-8531: Make it easy to get the management mbean for a given process by its id
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/601c97c5 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/601c97c5 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/601c97c5 Branch: refs/heads/master Commit: 601c97c54de2687d9a32f4662ab24db31295807b Parents: 4b4611d Author: Claus Ibsen <davscl...@apache.org> Authored: Tue Mar 24 08:30:30 2015 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Tue Mar 24 08:41:23 2015 +0100 ---------------------------------------------------------------------- .../main/java/org/apache/camel/CamelContext.java | 13 ++++++++++++- .../org/apache/camel/impl/DefaultCamelContext.java | 17 ++++++++++++++++- .../ManagedRouteSuspendAndResumeTest.java | 8 +++++++- 3 files changed, 35 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/601c97c5/camel-core/src/main/java/org/apache/camel/CamelContext.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/CamelContext.java b/camel-core/src/main/java/org/apache/camel/CamelContext.java index adeb7c2..51888c8 100644 --- a/camel-core/src/main/java/org/apache/camel/CamelContext.java +++ b/camel-core/src/main/java/org/apache/camel/CamelContext.java @@ -26,6 +26,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import org.apache.camel.api.management.mbean.ManagedProcessorMBean; +import org.apache.camel.api.management.mbean.ManagedRouteMBean; import org.apache.camel.builder.ErrorHandlerBuilder; import org.apache.camel.model.DataFormatDefinition; import org.apache.camel.model.ProcessorDefinition; @@ -538,11 +539,21 @@ public interface CamelContext extends SuspendableService, RuntimeConfiguration { * @param id id of the processor * @param type the managed processor type from the {@link org.apache.camel.api.management.mbean} package. * @return the processor or <tt>null</tt> if not found - * @throws java.lang.ClassCastException is thrown if the type is not correct type + * @throws IllegalArgumentException if the type is not compliant */ <T extends ManagedProcessorMBean> T getManagedProcessor(String id, Class<T> type); /** + * Gets the managed route with the given route id + * + * @param routeId id of the route + * @param type the managed route type from the {@link org.apache.camel.api.management.mbean} package. + * @return the route or <tt>null</tt> if not found + * @throws IllegalArgumentException if the type is not compliant + */ + <T extends ManagedRouteMBean> T getManagedRoute(String routeId, Class<T> type); + + /** * Gets the processor definition from any of the routes which with the given id * * @param id id of the processor definition http://git-wip-us.apache.org/repos/asf/camel/blob/601c97c5/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java index 4053a1e..25956e0 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java @@ -75,6 +75,7 @@ import org.apache.camel.SuspendableService; import org.apache.camel.TypeConverter; import org.apache.camel.VetoCamelContextStartException; import org.apache.camel.api.management.mbean.ManagedProcessorMBean; +import org.apache.camel.api.management.mbean.ManagedRouteMBean; import org.apache.camel.builder.ErrorHandlerBuilder; import org.apache.camel.builder.ErrorHandlerBuilderSupport; import org.apache.camel.component.properties.PropertiesComponent; @@ -735,7 +736,6 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon ProcessorDefinition def = getProcessorDefinition(id); if (processor != null && def != null) { - // lookup the processor in mbean try { ObjectName on = getManagementStrategy().getManagementNamingStrategy().getObjectNameForProcessor(this, processor, def); return getManagementStrategy().getManagementAgent().newProxyClient(on, type); @@ -747,6 +747,21 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon return null; } + public <T extends ManagedRouteMBean> T getManagedRoute(String routeId, Class<T> type) { + Route route = getRoute(routeId); + + if (route != null) { + try { + ObjectName on = getManagementStrategy().getManagementNamingStrategy().getObjectNameForRoute(route); + return getManagementStrategy().getManagementAgent().newProxyClient(on, type); + } catch (MalformedObjectNameException e) { + throw ObjectHelper.wrapRuntimeCamelException(e); + } + } + + return null; + } + public ProcessorDefinition getProcessorDefinition(String id) { for (RouteDefinition route : getRouteDefinitions()) { Iterator<ProcessorDefinition> it = ProcessorDefinitionHelper.filterTypeInOutputs(route.getOutputs(), ProcessorDefinition.class); http://git-wip-us.apache.org/repos/asf/camel/blob/601c97c5/camel-core/src/test/java/org/apache/camel/management/ManagedRouteSuspendAndResumeTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedRouteSuspendAndResumeTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedRouteSuspendAndResumeTest.java index e68bcc4..d6d673c 100644 --- a/camel-core/src/test/java/org/apache/camel/management/ManagedRouteSuspendAndResumeTest.java +++ b/camel-core/src/test/java/org/apache/camel/management/ManagedRouteSuspendAndResumeTest.java @@ -22,6 +22,7 @@ import javax.management.ObjectName; import org.apache.camel.Exchange; import org.apache.camel.ServiceStatus; +import org.apache.camel.api.management.mbean.ManagedSuspendableRouteMBean; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; @@ -84,6 +85,11 @@ public class ManagedRouteSuspendAndResumeTest extends ManagementTestSupport { // this time the file is consumed mock.assertIsSatisfied(); + + ManagedSuspendableRouteMBean route = context.getManagedRoute("foo", ManagedSuspendableRouteMBean.class); + assertNotNull(route); + + assertEquals(2, route.getExchangesCompleted()); } static ObjectName getRouteObjectName(MBeanServer mbeanServer) throws Exception { @@ -98,7 +104,7 @@ public class ManagedRouteSuspendAndResumeTest extends ManagementTestSupport { return new RouteBuilder() { @Override public void configure() throws Exception { - from("file://target/managed").to("mock:result"); + from("file://target/managed").routeId("foo").to("mock:result"); } }; }