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/07/24 13:46:16 UTC

[2/6] camel git commit: CAMEL-8526: Add more EIP as specialized mbeans

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

Branch: refs/heads/master
Commit: 6f27b9ac63618f0cbd38ce4c6ef30f2c8eb687fb
Parents: c397832
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Jul 24 12:48:36 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Jul 24 12:48:36 2015 +0200

----------------------------------------------------------------------
 .../mbean/ManagedStickyLoadBalancerMBean.java   | 32 +++++++
 .../DefaultManagementObjectStrategy.java        |  4 +
 .../mbean/ManagedRoundRobinLoadBalancer.java    |  4 +-
 .../mbean/ManagedStickyLoadBalancer.java        | 59 +++++++++++++
 .../camel/model/LoadBalanceDefinition.java      |  2 +-
 .../StickyLoadBalancerDefinition.java           |  9 ++
 .../loadbalancer/StickyLoadBalancer.java        |  1 +
 .../ManagedStickyLoadBalancerTest.java          | 87 ++++++++++++++++++++
 8 files changed, 195 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/6f27b9ac/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedStickyLoadBalancerMBean.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedStickyLoadBalancerMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedStickyLoadBalancerMBean.java
new file mode 100644
index 0000000..b2bff85
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedStickyLoadBalancerMBean.java
@@ -0,0 +1,32 @@
+/**
+ * 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 ManagedStickyLoadBalancerMBean extends ManagedProcessorMBean {
+
+    @ManagedAttribute(description = "The language for the expression")
+    String getExpressionLanguage();
+
+    @ManagedAttribute(description = "The correlation expression to use to calculate the correlation key")
+    String getExpression();
+
+    @ManagedAttribute(description = "Number of processors in the load balancer")
+    Integer getSize();
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/6f27b9ac/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 c027967..e4562af 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
@@ -78,6 +78,7 @@ import org.apache.camel.management.mbean.ManagedSetExchangePattern;
 import org.apache.camel.management.mbean.ManagedSetHeader;
 import org.apache.camel.management.mbean.ManagedSetProperty;
 import org.apache.camel.management.mbean.ManagedSplitter;
+import org.apache.camel.management.mbean.ManagedStickyLoadBalancer;
 import org.apache.camel.management.mbean.ManagedStop;
 import org.apache.camel.management.mbean.ManagedSuspendableRoute;
 import org.apache.camel.management.mbean.ManagedThreadPool;
@@ -137,6 +138,7 @@ import org.apache.camel.processor.aggregate.AggregateProcessor;
 import org.apache.camel.processor.idempotent.IdempotentConsumer;
 import org.apache.camel.processor.loadbalancer.RandomLoadBalancer;
 import org.apache.camel.processor.loadbalancer.RoundRobinLoadBalancer;
+import org.apache.camel.processor.loadbalancer.StickyLoadBalancer;
 import org.apache.camel.processor.validation.PredicateValidatingProcessor;
 import org.apache.camel.spi.BrowsableEndpoint;
 import org.apache.camel.spi.EventNotifier;
@@ -293,6 +295,8 @@ public class DefaultManagementObjectStrategy implements ManagementObjectStrategy
                 answer = new ManagedRandomLoadBalancer(context, (RandomLoadBalancer) target, (org.apache.camel.model.LoadBalanceDefinition) definition);
             } else if (target instanceof RoundRobinLoadBalancer) {
                 answer = new ManagedRoundRobinLoadBalancer(context, (RoundRobinLoadBalancer) target, (org.apache.camel.model.LoadBalanceDefinition) definition);
+            } else if (target instanceof StickyLoadBalancer) {
+                answer = new ManagedStickyLoadBalancer(context, (StickyLoadBalancer) target, (org.apache.camel.model.LoadBalanceDefinition) definition);
             } else if (target instanceof RecipientList) {
                 answer = new ManagedRecipientList(context, (RecipientList) target, (RecipientListDefinition) definition);
             } else if (target instanceof Splitter) {

http://git-wip-us.apache.org/repos/asf/camel/blob/6f27b9ac/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoundRobinLoadBalancer.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoundRobinLoadBalancer.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoundRobinLoadBalancer.java
index 1178fdb..c8de3fe 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoundRobinLoadBalancer.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoundRobinLoadBalancer.java
@@ -18,7 +18,7 @@ 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.ManagedRandomLoadBalancerMBean;
+import org.apache.camel.api.management.mbean.ManagedRoundRobinLoadBalancerMBean;
 import org.apache.camel.model.LoadBalanceDefinition;
 import org.apache.camel.processor.loadbalancer.RoundRobinLoadBalancer;
 
@@ -26,7 +26,7 @@ import org.apache.camel.processor.loadbalancer.RoundRobinLoadBalancer;
  * @version 
  */
 @ManagedResource(description = "Managed RoundRobin LoadBalancer")
-public class ManagedRoundRobinLoadBalancer extends ManagedProcessor implements ManagedRandomLoadBalancerMBean {
+public class ManagedRoundRobinLoadBalancer extends ManagedProcessor implements ManagedRoundRobinLoadBalancerMBean {
     private final RoundRobinLoadBalancer processor;
 
     public ManagedRoundRobinLoadBalancer(CamelContext context, RoundRobinLoadBalancer processor, LoadBalanceDefinition definition) {

http://git-wip-us.apache.org/repos/asf/camel/blob/6f27b9ac/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedStickyLoadBalancer.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedStickyLoadBalancer.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedStickyLoadBalancer.java
new file mode 100644
index 0000000..0835aa7
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedStickyLoadBalancer.java
@@ -0,0 +1,59 @@
+/**
+ * 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.ManagedStickyLoadBalancerMBean;
+import org.apache.camel.model.LoadBalanceDefinition;
+import org.apache.camel.model.loadbalancer.StickyLoadBalancerDefinition;
+import org.apache.camel.processor.loadbalancer.StickyLoadBalancer;
+
+/**
+ * @version 
+ */
+@ManagedResource(description = "Managed Sticky LoadBalancer")
+public class ManagedStickyLoadBalancer extends ManagedProcessor implements ManagedStickyLoadBalancerMBean {
+    private final StickyLoadBalancer processor;
+
+    public ManagedStickyLoadBalancer(CamelContext context, StickyLoadBalancer processor, LoadBalanceDefinition definition) {
+        super(context, processor, definition);
+        this.processor = processor;
+    }
+
+    @Override
+    public LoadBalanceDefinition getDefinition() {
+        return (LoadBalanceDefinition) super.getDefinition();
+    }
+
+    @Override
+    public String getExpressionLanguage() {
+        StickyLoadBalancerDefinition sticky = (StickyLoadBalancerDefinition) getDefinition().getLoadBalancerType();
+        return sticky.getCorrelationExpression().getExpressionType().getLanguage();
+    }
+
+    @Override
+    public String getExpression() {
+        StickyLoadBalancerDefinition sticky = (StickyLoadBalancerDefinition) getDefinition().getLoadBalancerType();
+        return sticky.getCorrelationExpression().getExpressionType().getExpression();
+    }
+
+    @Override
+    public Integer getSize() {
+        return processor.getProcessors().size();
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/6f27b9ac/camel-core/src/main/java/org/apache/camel/model/LoadBalanceDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/LoadBalanceDefinition.java b/camel-core/src/main/java/org/apache/camel/model/LoadBalanceDefinition.java
index e41e2c5..ecb7145 100644
--- a/camel-core/src/main/java/org/apache/camel/model/LoadBalanceDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/LoadBalanceDefinition.java
@@ -286,7 +286,7 @@ public class LoadBalanceDefinition extends ProcessorDefinition<LoadBalanceDefini
      */
     public LoadBalanceDefinition sticky(Expression correlationExpression) {
         StickyLoadBalancerDefinition def = new StickyLoadBalancerDefinition();
-        def.setCorrelationExpression(new ExpressionSubElementDefinition(correlationExpression));
+        def.setCorrelationExpression(correlationExpression);
         setLoadBalancerType(def);
         return this;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/6f27b9ac/camel-core/src/main/java/org/apache/camel/model/loadbalancer/StickyLoadBalancerDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/loadbalancer/StickyLoadBalancerDefinition.java b/camel-core/src/main/java/org/apache/camel/model/loadbalancer/StickyLoadBalancerDefinition.java
index ae2dd8c..72ae1a2 100644
--- a/camel-core/src/main/java/org/apache/camel/model/loadbalancer/StickyLoadBalancerDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/loadbalancer/StickyLoadBalancerDefinition.java
@@ -21,8 +21,11 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.camel.Expression;
+import org.apache.camel.model.ExpressionNodeHelper;
 import org.apache.camel.model.ExpressionSubElementDefinition;
 import org.apache.camel.model.LoadBalancerDefinition;
+import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.processor.loadbalancer.LoadBalancer;
 import org.apache.camel.processor.loadbalancer.StickyLoadBalancer;
 import org.apache.camel.spi.Metadata;
@@ -60,6 +63,12 @@ public class StickyLoadBalancerDefinition extends LoadBalancerDefinition {
         this.correlationExpression = correlationExpression;
     }
 
+    public void setCorrelationExpression(Expression expression) {
+        ExpressionDefinition def = ExpressionNodeHelper.toExpressionDefinition(expression);
+        this.correlationExpression = new ExpressionSubElementDefinition();
+        this.correlationExpression.setExpressionType(def);
+    }
+
     @Override
     public String toString() {
         return "StickyLoadBalancer[" + correlationExpression + "]";

http://git-wip-us.apache.org/repos/asf/camel/blob/6f27b9ac/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/StickyLoadBalancer.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/StickyLoadBalancer.java b/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/StickyLoadBalancer.java
index 519a93a..cea84d5 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/StickyLoadBalancer.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/StickyLoadBalancer.java
@@ -83,6 +83,7 @@ public class StickyLoadBalancer extends QueueLoadBalancer {
 
     // Properties
     //-------------------------------------------------------------------------
+
     public int getNumberOfHashGroups() {
         return numberOfHashGroups;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/6f27b9ac/camel-core/src/test/java/org/apache/camel/management/ManagedStickyLoadBalancerTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedStickyLoadBalancerTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedStickyLoadBalancerTest.java
new file mode 100644
index 0000000..4f6a9ff
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedStickyLoadBalancerTest.java
@@ -0,0 +1,87 @@
+/**
+ * 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;
+
+/**
+ * @version 
+ */
+public class ManagedStickyLoadBalancerTest extends ManagementTestSupport {
+
+    public void testManageRandomLoadBalancer() throws Exception {
+        // JMX tests dont work well on AIX CI servers (hangs them)
+        if (isPlatform("aix")) {
+            return;
+        }
+
+        // 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);
+
+        Integer size = (Integer) mbeanServer.getAttribute(on, "Size");
+        assertEquals(2, size.intValue());
+
+        String lan = (String) mbeanServer.getAttribute(on, "ExpressionLanguage");
+        assertEquals("header", lan);
+
+        String uri = (String) mbeanServer.getAttribute(on, "Expression");
+        assertEquals("num", 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(5, data.size());
+
+        String json = (String) mbeanServer.invoke(on, "informationJson", null, null);
+        assertNotNull(json);
+        assertTrue(json.contains("\"description\": \"Balances message processing among a number of nodes"));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                    .loadBalance().sticky(header("num")).id("mysend")
+                        .to("mock:foo", "mock:bar");
+            }
+        };
+    }
+
+}