Repository: camel
Updated Branches:
  refs/heads/master 648c751bc -> 85a5bfbf3


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/85a5bfbf
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/85a5bfbf
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/85a5bfbf

Branch: refs/heads/master
Commit: 85a5bfbf31ae0bf3bfc9bc5dfb43f5155bc53502
Parents: 648c751
Author: Claus Ibsen <davscl...@apache.org>
Authored: Wed Jul 22 13:25:56 2015 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Wed Jul 22 13:32:54 2015 +0200

----------------------------------------------------------------------
 .../management/mbean/ManagedChoiceMBean.java    | 21 +++++
 .../DefaultManagementObjectStrategy.java        |  4 +
 .../camel/management/mbean/ManagedChoice.java   | 37 ++++++++
 .../apache/camel/model/ChoiceDefinition.java    |  6 +-
 .../apache/camel/processor/ChoiceProcessor.java | 11 ++-
 .../apache/camel/builder/RouteBuilderTest.java  |  4 +-
 .../camel/management/ManagedChoiceTest.java     | 89 ++++++++++++++++++++
 7 files changed, 163 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/85a5bfbf/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedChoiceMBean.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedChoiceMBean.java
 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedChoiceMBean.java
new file mode 100644
index 0000000..64ae27b
--- /dev/null
+++ 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedChoiceMBean.java
@@ -0,0 +1,21 @@
+/**
+ * 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;
+
+public interface ManagedChoiceMBean extends ManagedProcessorMBean {
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/85a5bfbf/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 5470bb4..983eb7d 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
@@ -36,6 +36,7 @@ import 
org.apache.camel.management.mbean.ManagedAggregateProcessor;
 import org.apache.camel.management.mbean.ManagedBeanProcessor;
 import org.apache.camel.management.mbean.ManagedBrowsableEndpoint;
 import org.apache.camel.management.mbean.ManagedCamelContext;
+import org.apache.camel.management.mbean.ManagedChoice;
 import org.apache.camel.management.mbean.ManagedComponent;
 import org.apache.camel.management.mbean.ManagedConsumer;
 import org.apache.camel.management.mbean.ManagedConvertBody;
@@ -91,6 +92,7 @@ import org.apache.camel.model.ProcessDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RecipientListDefinition;
 import org.apache.camel.model.ThreadsDefinition;
+import org.apache.camel.processor.ChoiceProcessor;
 import org.apache.camel.processor.ConvertBodyProcessor;
 import org.apache.camel.processor.Delayer;
 import org.apache.camel.processor.DynamicRouter;
@@ -263,6 +265,8 @@ public class DefaultManagementObjectStrategy implements 
ManagementObjectStrategy
 
             if (target instanceof ConvertBodyProcessor) {
                 answer = new ManagedConvertBody(context, 
(ConvertBodyProcessor) target, definition);
+            } else if (target instanceof ChoiceProcessor) {
+                answer = new ManagedChoice(context, (ChoiceProcessor) target, 
definition);
             } else if (target instanceof Delayer) {
                 answer = new ManagedDelayer(context, (Delayer) target, 
definition);
             } else if (target instanceof Throttler) {

http://git-wip-us.apache.org/repos/asf/camel/blob/85a5bfbf/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedChoice.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedChoice.java 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedChoice.java
new file mode 100644
index 0000000..d4a8d67
--- /dev/null
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedChoice.java
@@ -0,0 +1,37 @@
+/**
+ * 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.ManagedChoiceMBean;
+import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.processor.ChoiceProcessor;
+
+/**
+ * @version 
+ */
+@ManagedResource(description = "Managed Choice")
+public class ManagedChoice extends ManagedProcessor implements 
ManagedChoiceMBean {
+    private final ChoiceProcessor processor;
+
+    public ManagedChoice(CamelContext context, ChoiceProcessor processor, 
ProcessorDefinition<?> definition) {
+        super(context, processor, definition);
+        this.processor = processor;
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/85a5bfbf/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java 
b/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
index e33e460..60370cc 100644
--- a/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/ChoiceDefinition.java
@@ -29,6 +29,7 @@ import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.ExpressionClause;
 import org.apache.camel.processor.ChoiceProcessor;
+import org.apache.camel.processor.FilterProcessor;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.CollectionStringBuffer;
@@ -129,9 +130,10 @@ public class ChoiceDefinition extends 
ProcessorDefinition<ChoiceDefinition> {
 
     @Override
     public Processor createProcessor(RouteContext routeContext) throws 
Exception {
-        List<Processor> filters = new ArrayList<Processor>();
+        List<FilterProcessor> filters = new ArrayList<FilterProcessor>();
         for (WhenDefinition whenClause : whenClauses) {
-            filters.add(createProcessor(routeContext, whenClause));
+            FilterProcessor filter = (FilterProcessor) 
createProcessor(routeContext, whenClause);
+            filters.add(filter);
         }
         Processor otherwiseProcessor = null;
         if (otherwise != null) {

http://git-wip-us.apache.org/repos/asf/camel/blob/85a5bfbf/camel-core/src/main/java/org/apache/camel/processor/ChoiceProcessor.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/processor/ChoiceProcessor.java 
b/camel-core/src/main/java/org/apache/camel/processor/ChoiceProcessor.java
index acd7cf5..c2a02b1 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/ChoiceProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/ChoiceProcessor.java
@@ -46,10 +46,10 @@ import static 
org.apache.camel.processor.PipelineHelper.continueProcessing;
 public class ChoiceProcessor extends ServiceSupport implements AsyncProcessor, 
Navigate<Processor>, Traceable, IdAware {
     private static final Logger LOG = 
LoggerFactory.getLogger(ChoiceProcessor.class);
     private String id;
-    private final List<Processor> filters;
+    private final List<FilterProcessor> filters;
     private final Processor otherwise;
 
-    public ChoiceProcessor(List<Processor> filters, Processor otherwise) {
+    public ChoiceProcessor(List<FilterProcessor> filters, Processor otherwise) 
{
         this.filters = filters;
         this.otherwise = otherwise;
     }
@@ -85,7 +85,7 @@ public class ChoiceProcessor extends ServiceSupport 
implements AsyncProcessor, N
             // evaluate the predicate on filter predicate early to be faster
             // and avoid issues when having nested choices
             // as we should only pick one processor
-            boolean matches = true;
+            boolean matches = false;
             if (processor instanceof FilterProcessor) {
                 FilterProcessor filter = (FilterProcessor) processor;
                 try {
@@ -96,6 +96,9 @@ public class ChoiceProcessor extends ServiceSupport 
implements AsyncProcessor, N
                 } catch (Throwable e) {
                     exchange.setException(e);
                 }
+            } else {
+                // its the otherwise processor, so its a match
+                matches = true;
             }
 
             // check for error if so we should break out
@@ -143,7 +146,7 @@ public class ChoiceProcessor extends ServiceSupport 
implements AsyncProcessor, N
         return "choice";
     }
 
-    public List<Processor> getFilters() {
+    public List<FilterProcessor> getFilters() {
         return filters;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/85a5bfbf/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java 
b/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java
index 9eaed57..0818017 100644
--- a/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java
+++ b/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java
@@ -157,15 +157,13 @@ public class RouteBuilderTest extends TestSupport {
             Channel channel = unwrapChannel(consumer.getProcessor());
 
             ChoiceProcessor choiceProcessor = 
assertIsInstanceOf(ChoiceProcessor.class, channel.getNextProcessor());
-            List<Processor> filters = choiceProcessor.getFilters();
+            List<FilterProcessor> filters = choiceProcessor.getFilters();
             assertEquals("Should be two when clauses", 2, filters.size());
 
             Processor filter1 = filters.get(0);
-            assertTrue(filter1 instanceof FilterProcessor);
             assertSendTo(unwrapChannel(((FilterProcessor) 
filter1).getProcessor()).getNextProcessor(), "direct://b");
 
             Processor filter2 = filters.get(1);
-            assertTrue(filter2 instanceof FilterProcessor);
             assertSendTo(unwrapChannel(((FilterProcessor) 
filter2).getProcessor()).getNextProcessor(), "direct://c");
 
             
assertSendTo(unwrapChannel(choiceProcessor.getOtherwise()).getNextProcessor(), 
"direct://d");

http://git-wip-us.apache.org/repos/asf/camel/blob/85a5bfbf/camel-core/src/test/java/org/apache/camel/management/ManagedChoiceTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/management/ManagedChoiceTest.java 
b/camel-core/src/test/java/org/apache/camel/management/ManagedChoiceTest.java
new file mode 100644
index 0000000..62cdb3b
--- /dev/null
+++ 
b/camel-core/src/test/java/org/apache/camel/management/ManagedChoiceTest.java
@@ -0,0 +1,89 @@
+/**
+ * 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 ManagedChoiceTest extends ManagementTestSupport {
+
+    public void testManageChoice() 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", "foo", 
"123");
+
+        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);
+
+        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(4, data.size());
+
+        String json = (String) mbeanServer.invoke(on, "informationJson", null, 
null);
+        assertNotNull(json);
+        assertTrue(json.contains("\"description\": \"Routes messages based on 
a series of predicates"));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .choice().id("mysend")
+                        .when(header("foo"))
+                            .to("mock:foo")
+                        .otherwise()
+                            .to("mock:bar");
+            }
+        };
+    }
+
+}

Reply via email to