Repository: camel Updated Branches: refs/heads/master 88664983b -> 85209dca8
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/c3978324 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c3978324 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c3978324 Branch: refs/heads/master Commit: c397832476ed49b34fd8e96b0129227861b33c3b Parents: 8866498 Author: Claus Ibsen <davscl...@apache.org> Authored: Fri Jul 24 12:35:19 2015 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Fri Jul 24 12:35:19 2015 +0200 ---------------------------------------------------------------------- .../mbean/ManagedRandomLoadBalancerMBean.java | 26 +++++++ .../ManagedRoundRobinLoadBalancerMBean.java | 26 +++++++ .../DefaultManagementObjectStrategy.java | 8 ++ .../mbean/ManagedRandomLoadBalancer.java | 41 ++++++++++ .../mbean/ManagedRoundRobinLoadBalancer.java | 41 ++++++++++ .../ManagedRandomLoadBalancerTest.java | 81 ++++++++++++++++++++ .../ManagedRoundRobinLoadBalancerTest.java | 81 ++++++++++++++++++++ 7 files changed, 304 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/c3978324/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRandomLoadBalancerMBean.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRandomLoadBalancerMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRandomLoadBalancerMBean.java new file mode 100644 index 0000000..5242e89 --- /dev/null +++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRandomLoadBalancerMBean.java @@ -0,0 +1,26 @@ +/** + * 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 ManagedRandomLoadBalancerMBean extends ManagedProcessorMBean { + + @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/c3978324/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRoundRobinLoadBalancerMBean.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRoundRobinLoadBalancerMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRoundRobinLoadBalancerMBean.java new file mode 100644 index 0000000..1d57ea4 --- /dev/null +++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRoundRobinLoadBalancerMBean.java @@ -0,0 +1,26 @@ +/** + * 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 ManagedRoundRobinLoadBalancerMBean extends ManagedProcessorMBean { + + @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/c3978324/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 3f6800f..c027967 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 @@ -56,6 +56,7 @@ import org.apache.camel.management.mbean.ManagedPollEnricher; import org.apache.camel.management.mbean.ManagedProcess; import org.apache.camel.management.mbean.ManagedProcessor; import org.apache.camel.management.mbean.ManagedProducer; +import org.apache.camel.management.mbean.ManagedRandomLoadBalancer; import org.apache.camel.management.mbean.ManagedRecipientList; import org.apache.camel.management.mbean.ManagedRemoveHeader; import org.apache.camel.management.mbean.ManagedRemoveHeaders; @@ -63,6 +64,7 @@ import org.apache.camel.management.mbean.ManagedRemoveProperties; import org.apache.camel.management.mbean.ManagedRemoveProperty; import org.apache.camel.management.mbean.ManagedResequencer; import org.apache.camel.management.mbean.ManagedRollback; +import org.apache.camel.management.mbean.ManagedRoundRobinLoadBalancer; import org.apache.camel.management.mbean.ManagedRoute; import org.apache.camel.management.mbean.ManagedRoutingSlip; import org.apache.camel.management.mbean.ManagedSamplingThrottler; @@ -133,6 +135,8 @@ import org.apache.camel.processor.UnmarshalProcessor; import org.apache.camel.processor.WireTapProcessor; 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.validation.PredicateValidatingProcessor; import org.apache.camel.spi.BrowsableEndpoint; import org.apache.camel.spi.EventNotifier; @@ -285,6 +289,10 @@ public class DefaultManagementObjectStrategy implements ManagementObjectStrategy answer = new ManagedMarshal(context, (MarshalProcessor) target, (org.apache.camel.model.MarshalDefinition) definition); } else if (target instanceof UnmarshalProcessor) { answer = new ManagedUnmarshal(context, (UnmarshalProcessor) target, (org.apache.camel.model.UnmarshalDefinition) definition); + } else if (target instanceof RandomLoadBalancer) { + 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 RecipientList) { answer = new ManagedRecipientList(context, (RecipientList) target, (RecipientListDefinition) definition); } else if (target instanceof Splitter) { http://git-wip-us.apache.org/repos/asf/camel/blob/c3978324/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRandomLoadBalancer.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRandomLoadBalancer.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRandomLoadBalancer.java new file mode 100644 index 0000000..a5f6d98 --- /dev/null +++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRandomLoadBalancer.java @@ -0,0 +1,41 @@ +/** + * 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.ManagedRandomLoadBalancerMBean; +import org.apache.camel.model.LoadBalanceDefinition; +import org.apache.camel.processor.loadbalancer.RandomLoadBalancer; + +/** + * @version + */ +@ManagedResource(description = "Managed Random LoadBalancer") +public class ManagedRandomLoadBalancer extends ManagedProcessor implements ManagedRandomLoadBalancerMBean { + private final RandomLoadBalancer processor; + + public ManagedRandomLoadBalancer(CamelContext context, RandomLoadBalancer processor, LoadBalanceDefinition definition) { + super(context, processor, definition); + this.processor = processor; + } + + @Override + public Integer getSize() { + return processor.getProcessors().size(); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/c3978324/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 new file mode 100644 index 0000000..1178fdb --- /dev/null +++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoundRobinLoadBalancer.java @@ -0,0 +1,41 @@ +/** + * 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.ManagedRandomLoadBalancerMBean; +import org.apache.camel.model.LoadBalanceDefinition; +import org.apache.camel.processor.loadbalancer.RoundRobinLoadBalancer; + +/** + * @version + */ +@ManagedResource(description = "Managed RoundRobin LoadBalancer") +public class ManagedRoundRobinLoadBalancer extends ManagedProcessor implements ManagedRandomLoadBalancerMBean { + private final RoundRobinLoadBalancer processor; + + public ManagedRoundRobinLoadBalancer(CamelContext context, RoundRobinLoadBalancer processor, LoadBalanceDefinition definition) { + super(context, processor, definition); + this.processor = processor; + } + + @Override + public Integer getSize() { + return processor.getProcessors().size(); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/c3978324/camel-core/src/test/java/org/apache/camel/management/ManagedRandomLoadBalancerTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedRandomLoadBalancerTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedRandomLoadBalancerTest.java new file mode 100644 index 0000000..9967740 --- /dev/null +++ b/camel-core/src/test/java/org/apache/camel/management/ManagedRandomLoadBalancerTest.java @@ -0,0 +1,81 @@ +/** + * 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 ManagedRandomLoadBalancerTest 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()); + + 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().random().id("mysend") + .to("mock:foo", "mock:bar"); + } + }; + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/c3978324/camel-core/src/test/java/org/apache/camel/management/ManagedRoundRobinLoadBalancerTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedRoundRobinLoadBalancerTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedRoundRobinLoadBalancerTest.java new file mode 100644 index 0000000..1a53f18 --- /dev/null +++ b/camel-core/src/test/java/org/apache/camel/management/ManagedRoundRobinLoadBalancerTest.java @@ -0,0 +1,81 @@ +/** + * 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 ManagedRoundRobinLoadBalancerTest extends ManagementTestSupport { + + public void testManageRoundRobinLoadBalancer() 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()); + + 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().roundRobin().id("mysend") + .to("mock:foo", "mock:bar"); + } + }; + } + +}