CAMEL-8526: Add more EIP as specialized mbeans

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f19c32c6
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f19c32c6
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f19c32c6

Branch: refs/heads/master
Commit: f19c32c645da2cd871cf701727d2eb2ad62c5010
Parents: 55b3c42
Author: Claus Ibsen <davscl...@apache.org>
Authored: Tue Jul 21 14:28:52 2015 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Tue Jul 21 14:28:52 2015 +0200

----------------------------------------------------------------------
 .../mbean/ManagedDynamicRouterMBean.java        | 35 ++++++++
 .../mbean/ManagedRoutingSlipMBean.java          | 35 ++++++++
 .../DefaultManagementObjectStrategy.java        |  8 ++
 .../management/mbean/ManagedDynamicRouter.java  | 58 ++++++++++++
 .../management/mbean/ManagedRoutingSlip.java    | 58 ++++++++++++
 .../org/apache/camel/processor/RoutingSlip.java |  8 ++
 .../management/ManagedDynamicRouterTest.java    | 92 ++++++++++++++++++++
 .../management/ManagedRoutingSlipTest.java      | 91 +++++++++++++++++++
 8 files changed, 385 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/f19c32c6/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDynamicRouterMBean.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDynamicRouterMBean.java
 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDynamicRouterMBean.java
new file mode 100644
index 0000000..303b514
--- /dev/null
+++ 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedDynamicRouterMBean.java
@@ -0,0 +1,35 @@
+/**
+ * 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.api.management.mbean;
+
+import org.apache.camel.api.management.ManagedAttribute;
+
+public interface ManagedDynamicRouterMBean extends ManagedProcessorMBean {
+
+    @ManagedAttribute(description = "Expression to call that returns the 
endpoint(s) to route to in the dynamic routing")
+    String getExpression();
+
+    @ManagedAttribute(description = "The uri delimiter to use")
+    String getUriDelimiter();
+
+    @ManagedAttribute(description = "Sets the maximum size used by the 
ProducerCache which is used to cache and reuse producers")
+    Integer getCacheSize();
+
+    @ManagedAttribute(description = "Ignore the invalidate endpoint exception 
when try to create a producer with that endpoint")
+    Boolean isIgnoreInvalidEndpoints();
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/f19c32c6/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRoutingSlipMBean.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRoutingSlipMBean.java
 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRoutingSlipMBean.java
new file mode 100644
index 0000000..95130bb
--- /dev/null
+++ 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRoutingSlipMBean.java
@@ -0,0 +1,35 @@
+/**
+ * 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.api.management.mbean;
+
+import org.apache.camel.api.management.ManagedAttribute;
+
+public interface ManagedRoutingSlipMBean extends ManagedProcessorMBean {
+
+    @ManagedAttribute(description = "Expression to define the routing slip, 
which defines which endpoints to route the message in a pipeline style.")
+    String getExpression();
+
+    @ManagedAttribute(description = "The uri delimiter to use")
+    String getUriDelimiter();
+
+    @ManagedAttribute(description = "Sets the maximum size used by the 
ProducerCache which is used to cache and reuse producers")
+    Integer getCacheSize();
+
+    @ManagedAttribute(description = "Ignore the invalidate endpoint exception 
when try to create a producer with that endpoint")
+    Boolean isIgnoreInvalidEndpoints();
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/f19c32c6/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
 
b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
index bb2426c..0265623 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
@@ -38,6 +38,7 @@ import org.apache.camel.management.mbean.ManagedCamelContext;
 import org.apache.camel.management.mbean.ManagedComponent;
 import org.apache.camel.management.mbean.ManagedConsumer;
 import org.apache.camel.management.mbean.ManagedDelayer;
+import org.apache.camel.management.mbean.ManagedDynamicRouter;
 import org.apache.camel.management.mbean.ManagedEndpoint;
 import org.apache.camel.management.mbean.ManagedEnricher;
 import org.apache.camel.management.mbean.ManagedErrorHandler;
@@ -48,6 +49,7 @@ import org.apache.camel.management.mbean.ManagedPollEnricher;
 import org.apache.camel.management.mbean.ManagedProcessor;
 import org.apache.camel.management.mbean.ManagedProducer;
 import org.apache.camel.management.mbean.ManagedRoute;
+import org.apache.camel.management.mbean.ManagedRoutingSlip;
 import org.apache.camel.management.mbean.ManagedScheduledPollConsumer;
 import org.apache.camel.management.mbean.ManagedSendDynamicProcessor;
 import org.apache.camel.management.mbean.ManagedSendProcessor;
@@ -60,10 +62,12 @@ import 
org.apache.camel.management.mbean.ManagedWireTapProcessor;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.Delayer;
+import org.apache.camel.processor.DynamicRouter;
 import org.apache.camel.processor.Enricher;
 import org.apache.camel.processor.ErrorHandler;
 import org.apache.camel.processor.FilterProcessor;
 import org.apache.camel.processor.PollEnricher;
+import org.apache.camel.processor.RoutingSlip;
 import org.apache.camel.processor.SendDynamicProcessor;
 import org.apache.camel.processor.SendProcessor;
 import org.apache.camel.processor.Throttler;
@@ -191,6 +195,10 @@ public class DefaultManagementObjectStrategy implements 
ManagementObjectStrategy
                 answer = new ManagedDelayer(context, (Delayer) target, 
definition);
             } else if (target instanceof Throttler) {
                 answer = new ManagedThrottler(context, (Throttler) target, 
definition);
+            } else if (target instanceof DynamicRouter) {
+                answer = new ManagedDynamicRouter(context, (DynamicRouter) 
target, definition);
+            } else if (target instanceof RoutingSlip) {
+                answer = new ManagedRoutingSlip(context, (RoutingSlip) target, 
definition);
             } else if (target instanceof FilterProcessor) {
                 answer = new ManagedFilter(context, (FilterProcessor) target, 
definition);
             } else if (target instanceof WireTapProcessor) {

http://git-wip-us.apache.org/repos/asf/camel/blob/f19c32c6/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDynamicRouter.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDynamicRouter.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDynamicRouter.java
new file mode 100644
index 0000000..640effa
--- /dev/null
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedDynamicRouter.java
@@ -0,0 +1,58 @@
+/**
+ * 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.management.mbean;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.api.management.ManagedResource;
+import org.apache.camel.api.management.mbean.ManagedDynamicRouterMBean;
+import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.processor.DynamicRouter;
+
+/**
+ * @version 
+ */
+@ManagedResource(description = "Managed DynamicRouter")
+public class ManagedDynamicRouter extends ManagedProcessor implements 
ManagedDynamicRouterMBean {
+    private final DynamicRouter processor;
+    private final String uri;
+
+    public ManagedDynamicRouter(CamelContext context, DynamicRouter processor, 
ProcessorDefinition<?> definition) {
+        super(context, processor, definition);
+        this.processor = processor;
+        this.uri = processor.getExpression().toString();
+    }
+
+    @Override
+    public String getExpression() {
+        return uri;
+    }
+
+    @Override
+    public String getUriDelimiter() {
+        return processor.getUriDelimiter();
+    }
+
+    @Override
+    public Integer getCacheSize() {
+        return processor.getCacheSize();
+    }
+
+    @Override
+    public Boolean isIgnoreInvalidEndpoints() {
+        return processor.isIgnoreInvalidEndpoints();
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/f19c32c6/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoutingSlip.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoutingSlip.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoutingSlip.java
new file mode 100644
index 0000000..d2a0b4e
--- /dev/null
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoutingSlip.java
@@ -0,0 +1,58 @@
+/**
+ * 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.management.mbean;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.api.management.ManagedResource;
+import org.apache.camel.api.management.mbean.ManagedDynamicRouterMBean;
+import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.processor.RoutingSlip;
+
+/**
+ * @version 
+ */
+@ManagedResource(description = "Managed RoutingSlip")
+public class ManagedRoutingSlip extends ManagedProcessor implements 
ManagedDynamicRouterMBean {
+    private final RoutingSlip processor;
+    private final String uri;
+
+    public ManagedRoutingSlip(CamelContext context, RoutingSlip processor, 
ProcessorDefinition<?> definition) {
+        super(context, processor, definition);
+        this.processor = processor;
+        this.uri = processor.getExpression().toString();
+    }
+
+    @Override
+    public String getExpression() {
+        return uri;
+    }
+
+    @Override
+    public String getUriDelimiter() {
+        return processor.getUriDelimiter();
+    }
+
+    @Override
+    public Integer getCacheSize() {
+        return processor.getCacheSize();
+    }
+
+    @Override
+    public Boolean isIgnoreInvalidEndpoints() {
+        return processor.isIgnoreInvalidEndpoints();
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/f19c32c6/camel-core/src/main/java/org/apache/camel/processor/RoutingSlip.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/processor/RoutingSlip.java 
b/camel-core/src/main/java/org/apache/camel/processor/RoutingSlip.java
index 8de6624..c41112e 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/RoutingSlip.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/RoutingSlip.java
@@ -113,6 +113,14 @@ public class RoutingSlip extends ServiceSupport implements 
AsyncProcessor, Trace
         this.id = id;
     }
 
+    public Expression getExpression() {
+        return expression;
+    }
+
+    public String getUriDelimiter() {
+        return uriDelimiter;
+    }
+
     public void setDelimiter(String delimiter) {
         this.uriDelimiter = delimiter;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/f19c32c6/camel-core/src/test/java/org/apache/camel/management/ManagedDynamicRouterTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/management/ManagedDynamicRouterTest.java
 
b/camel-core/src/test/java/org/apache/camel/management/ManagedDynamicRouterTest.java
new file mode 100644
index 0000000..10432b9
--- /dev/null
+++ 
b/camel-core/src/test/java/org/apache/camel/management/ManagedDynamicRouterTest.java
@@ -0,0 +1,92 @@
+/**
+ * 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.management;
+
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.management.openmbean.TabularData;
+
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+
+/**
+ * @version 
+ */
+public class ManagedDynamicRouterTest extends ManagementTestSupport {
+
+    public void testManageDynamicRouter() throws Exception {
+        // JMX tests dont work well on AIX CI servers (hangs them)
+        if (isPlatform("aix")) {
+            return;
+        }
+
+        MockEndpoint foo = getMockEndpoint("mock:foo");
+        foo.expectedMessageCount(1);
+
+        template.sendBodyAndHeader("direct:start", "Hello World", "whereTo", 
"direct:foo");
+
+        assertMockEndpointsSatisfied();
+
+        // get the stats for the route
+        MBeanServer mbeanServer = getMBeanServer();
+
+        // get the object name for the delayer
+        ObjectName on = 
ObjectName.getInstance("org.apache.camel:context=camel-1,type=processors,name=\"mysend\"");
+
+        // should be on route1
+        String routeId = (String) mbeanServer.getAttribute(on, "RouteId");
+        assertEquals("route1", routeId);
+
+        String camelId = (String) mbeanServer.getAttribute(on, "CamelId");
+        assertEquals("camel-1", camelId);
+
+        String state = (String) mbeanServer.getAttribute(on, "State");
+        assertEquals(ServiceStatus.Started.name(), state);
+
+        String uri = (String) mbeanServer.getAttribute(on, "Expression");
+        assertEquals("header(whereTo)", uri);
+
+        TabularData data = (TabularData) mbeanServer.invoke(on, "explain", new 
Object[]{false}, new String[]{"boolean"});
+        assertNotNull(data);
+        assertEquals(2, data.size());
+
+        data = (TabularData) mbeanServer.invoke(on, "explain", new 
Object[]{true}, new String[]{"boolean"});
+        assertNotNull(data);
+        assertEquals(6, data.size());
+
+        String json = (String) mbeanServer.invoke(on, "informationJson", null, 
null);
+        assertNotNull(json);
+        assertTrue(json.contains("\"description\": \"Routes messages based on 
dynamic rules"));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .dynamicRouter(header("whereTo")).id("mysend");
+
+                from("direct:foo")
+                    .to("mock:foo")
+                    .removeHeader("whereTo");
+            }
+        };
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/f19c32c6/camel-core/src/test/java/org/apache/camel/management/ManagedRoutingSlipTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/management/ManagedRoutingSlipTest.java
 
b/camel-core/src/test/java/org/apache/camel/management/ManagedRoutingSlipTest.java
new file mode 100644
index 0000000..0cb0ae4
--- /dev/null
+++ 
b/camel-core/src/test/java/org/apache/camel/management/ManagedRoutingSlipTest.java
@@ -0,0 +1,91 @@
+/**
+ * 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.management;
+
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.management.openmbean.TabularData;
+
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+
+/**
+ * @version 
+ */
+public class ManagedRoutingSlipTest extends ManagementTestSupport {
+
+    public void testManageRoutingSlip() throws Exception {
+        // JMX tests dont work well on AIX CI servers (hangs them)
+        if (isPlatform("aix")) {
+            return;
+        }
+
+        MockEndpoint foo = getMockEndpoint("mock:foo");
+        foo.expectedMessageCount(1);
+
+        template.sendBodyAndHeader("direct:start", "Hello World", "whereTo", 
"direct:foo");
+
+        assertMockEndpointsSatisfied();
+
+        // get the stats for the route
+        MBeanServer mbeanServer = getMBeanServer();
+
+        // get the object name for the delayer
+        ObjectName on = 
ObjectName.getInstance("org.apache.camel:context=camel-1,type=processors,name=\"mysend\"");
+
+        // should be on route1
+        String routeId = (String) mbeanServer.getAttribute(on, "RouteId");
+        assertEquals("route1", routeId);
+
+        String camelId = (String) mbeanServer.getAttribute(on, "CamelId");
+        assertEquals("camel-1", camelId);
+
+        String state = (String) mbeanServer.getAttribute(on, "State");
+        assertEquals(ServiceStatus.Started.name(), state);
+
+        String uri = (String) mbeanServer.getAttribute(on, "Expression");
+        assertEquals("header(whereTo)", uri);
+
+        TabularData data = (TabularData) mbeanServer.invoke(on, "explain", new 
Object[]{false}, new String[]{"boolean"});
+        assertNotNull(data);
+        assertEquals(3, data.size());
+
+        data = (TabularData) mbeanServer.invoke(on, "explain", new 
Object[]{true}, new String[]{"boolean"});
+        assertNotNull(data);
+        assertEquals(6, data.size());
+
+        String json = (String) mbeanServer.invoke(on, "informationJson", null, 
null);
+        assertNotNull(json);
+        assertTrue(json.contains("\"description\": \"Routes a message through 
a series of steps that are pre-determined (the slip)"));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .routingSlip(header("whereTo")).id("mysend");
+
+                from("direct:foo")
+                    .to("mock:foo");
+            }
+        };
+    }
+
+}

Reply via email to