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 2015/03/24 08:39:22 UTC
[2/6] camel git commit: CAMEL-8531: Make it easy to get the
management mbean for a given process by its id
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/4b4611dd
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/4b4611dd
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/4b4611dd
Branch: refs/heads/master
Commit: 4b4611dd493ed2741ef2be9bf9a61334585b5508
Parents: ab32a4b
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Mar 24 07:56:03 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Mar 24 08:41:23 2015 +0100
----------------------------------------------------------------------
.../java/org/apache/camel/CamelContext.java | 11 +++++++++++
.../apache/camel/impl/DefaultCamelContext.java | 20 ++++++++++++++++++++
.../management/DefaultManagementAgent.java | 9 +++++++++
.../management/mbean/ManagedCamelContext.java | 4 ++--
.../camel/management/mbean/ManagedRoute.java | 2 +-
.../org/apache/camel/spi/ManagementAgent.java | 9 +++++++++
.../ManagedAggregateControllerTest.java | 8 ++++++++
.../ManagedRouteStopUsingMBeanAPITest.java | 3 +--
8 files changed, 61 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/4b4611dd/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 0b7d8b6..adeb7c2 100644
--- a/camel-core/src/main/java/org/apache/camel/CamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/CamelContext.java
@@ -25,6 +25,7 @@ import java.util.Properties;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
+import org.apache.camel.api.management.mbean.ManagedProcessorMBean;
import org.apache.camel.builder.ErrorHandlerBuilder;
import org.apache.camel.model.DataFormatDefinition;
import org.apache.camel.model.ProcessorDefinition;
@@ -532,6 +533,16 @@ public interface CamelContext extends SuspendableService, RuntimeConfiguration {
<T extends Processor> T getProcessor(String id, Class<T> type);
/**
+ * Gets the managed processor from any of the routes which with the given id
+ *
+ * @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
+ */
+ <T extends ManagedProcessorMBean> T getManagedProcessor(String id, 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/4b4611dd/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 b0874a5..4053a1e 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
@@ -38,6 +38,8 @@ import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
import javax.naming.Context;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
@@ -72,6 +74,7 @@ import org.apache.camel.StatefulService;
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.builder.ErrorHandlerBuilder;
import org.apache.camel.builder.ErrorHandlerBuilderSupport;
import org.apache.camel.component.properties.PropertiesComponent;
@@ -727,6 +730,23 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon
return null;
}
+ public <T extends ManagedProcessorMBean> T getManagedProcessor(String id, Class<T> type) {
+ Processor processor = getProcessor(id);
+ 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);
+ } 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/4b4611dd/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java
index 4c9f768..dcad99f 100644
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java
@@ -31,6 +31,7 @@ import java.util.concurrent.ConcurrentMap;
import javax.management.JMException;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
+import javax.management.MBeanServerInvocationHandler;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
@@ -276,6 +277,14 @@ public class DefaultManagementAgent extends ServiceSupport implements Management
|| server.isRegistered(name);
}
+ public <T> T newProxyClient(ObjectName name, Class<T> mbean) {
+ if (server.isRegistered(name)) {
+ return MBeanServerInvocationHandler.newProxyInstance(server, name, mbean, false);
+ } else {
+ return null;
+ }
+ }
+
protected void doStart() throws Exception {
ObjectHelper.notNull(camelContext, "CamelContext");
http://git-wip-us.apache.org/repos/asf/camel/blob/4b4611dd/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
index 2314da6..598c340 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
@@ -391,7 +391,7 @@ public class ManagedCamelContext extends ManagedPerformanceCounter implements Ti
query = ObjectName.getInstance("org.apache.camel:context=" + prefix + getContext().getManagementName() + ",type=processors,*");
Set<ObjectName> names = server.queryNames(query, null);
for (ObjectName on : names) {
- ManagedProcessorMBean processor = MBeanServerInvocationHandler.newProxyInstance(server, on, ManagedProcessorMBean.class, true);
+ ManagedProcessorMBean processor = context.getManagementStrategy().getManagementAgent().newProxyClient(on, ManagedProcessorMBean.class);
processors.add(processor);
}
}
@@ -400,7 +400,7 @@ public class ManagedCamelContext extends ManagedPerformanceCounter implements Ti
// loop the routes, and append the processor stats if needed
sb.append(" <routeStats>\n");
for (ObjectName on : routes) {
- ManagedRouteMBean route = MBeanServerInvocationHandler.newProxyInstance(server, on, ManagedRouteMBean.class, true);
+ ManagedRouteMBean route = context.getManagementStrategy().getManagementAgent().newProxyClient(on, ManagedRouteMBean.class);
sb.append(" <routeStat").append(String.format(" id=\"%s\" state=\"%s\"", route.getRouteId(), route.getState()));
// use substring as we only want the attributes
stat = route.dumpStatsAsXml(fullStats);
http://git-wip-us.apache.org/repos/asf/camel/blob/4b4611dd/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
index 3bd1dad..d31e4e5 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
@@ -288,7 +288,7 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
Set<ObjectName> names = server.queryNames(query, null);
List<ManagedProcessorMBean> mps = new ArrayList<ManagedProcessorMBean>();
for (ObjectName on : names) {
- ManagedProcessorMBean processor = MBeanServerInvocationHandler.newProxyInstance(server, on, ManagedProcessorMBean.class, true);
+ ManagedProcessorMBean processor = context.getManagementStrategy().getManagementAgent().newProxyClient(on, ManagedProcessorMBean.class);
// the processor must belong to this route
if (getRouteId().equals(processor.getRouteId())) {
http://git-wip-us.apache.org/repos/asf/camel/blob/4b4611dd/camel-core/src/main/java/org/apache/camel/spi/ManagementAgent.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/spi/ManagementAgent.java b/camel-core/src/main/java/org/apache/camel/spi/ManagementAgent.java
index bec9b8b..df1f183 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/ManagementAgent.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/ManagementAgent.java
@@ -66,6 +66,15 @@ public interface ManagementAgent extends Service {
boolean isRegistered(ObjectName name);
/**
+ * Creates a new proxy client
+ *
+ * @param name the mbean name
+ * @param mbean the client interface, such as from the {@link org.apache.camel.api.management.mbean} package.
+ * @return the client or <tt>null</tt> if mbean does not exists
+ */
+ <T> T newProxyClient(ObjectName name, Class<T> mbean);
+
+ /**
* Get the MBeanServer which hosts managed objects.
* <p/>
* <b>Notice:</b> If the JMXEnabled configuration is not set to <tt>true</tt>,
http://git-wip-us.apache.org/repos/asf/camel/blob/4b4611dd/camel-core/src/test/java/org/apache/camel/management/ManagedAggregateControllerTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedAggregateControllerTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedAggregateControllerTest.java
index 2d783f6..ba14824 100644
--- a/camel-core/src/test/java/org/apache/camel/management/ManagedAggregateControllerTest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedAggregateControllerTest.java
@@ -20,6 +20,7 @@ import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.apache.camel.Exchange;
+import org.apache.camel.api.management.mbean.ManagedAggregateProcessorMBean;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.processor.aggregate.AggregateController;
import org.apache.camel.processor.aggregate.AggregationStrategy;
@@ -151,6 +152,13 @@ public class ManagedAggregateControllerTest extends ManagementTestSupport {
pending = (Integer) mbeanServer.invoke(on, "aggregationRepositoryGroups", null, null);
assertEquals(1, pending.intValue());
+
+ // we can also use the client mbean
+ ManagedAggregateProcessorMBean client = context.getManagedProcessor("myAggregator", ManagedAggregateProcessorMBean.class);
+ assertNotNull(client);
+
+ assertEquals(1, client.getCompletedByForce());
+ assertEquals(4, client.getTotalIn());
}
@Override
http://git-wip-us.apache.org/repos/asf/camel/blob/4b4611dd/camel-core/src/test/java/org/apache/camel/management/ManagedRouteStopUsingMBeanAPITest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedRouteStopUsingMBeanAPITest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedRouteStopUsingMBeanAPITest.java
index b9de9c4..e22a631 100644
--- a/camel-core/src/test/java/org/apache/camel/management/ManagedRouteStopUsingMBeanAPITest.java
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedRouteStopUsingMBeanAPITest.java
@@ -18,7 +18,6 @@ package org.apache.camel.management;
import java.util.Set;
import javax.management.MBeanServer;
-import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectName;
import org.apache.camel.ServiceStatus;
@@ -48,7 +47,7 @@ public class ManagedRouteStopUsingMBeanAPITest extends ManagementTestSupport {
ObjectName on = set.iterator().next();
- ManagedRouteMBean mbean = MBeanServerInvocationHandler.newProxyInstance(mbeanServer, on, ManagedRouteMBean.class, false);
+ ManagedRouteMBean mbean = context.getManagementStrategy().getManagementAgent().newProxyClient(on, ManagedRouteMBean.class);
// the route has this starting endpoint uri
assertEquals("direct://start", mbean.getEndpointUri());