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");
+ }
+ };
+ }
+
+}