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 2012/01/30 15:11:10 UTC

svn commit: r1237666 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/component/seda/ camel-core/src/main/java/org/apache/camel/management/ camel-core/src/main/java/org/apache/camel/management/mbean/ camel-core/src/test/java/org/apache/came...

Author: davsclaus
Date: Mon Jan 30 14:11:10 2012
New Revision: 1237666

URL: http://svn.apache.org/viewvc?rev=1237666&view=rev
Log:
CAMEL-4938: Fixed seda endpoint with JMX not being able to invoke certain methods.

Added:
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSedaEndpoint.java
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedSedaEndpointTest.java
    camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedSedaEndpointTest.xml
      - copied, changed from r1237572, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedNamePatternTest.xml
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedSedaEndpointTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java?rev=1237666&r1=1237665&r2=1237666&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java Mon Jan 30 14:11:10 2012
@@ -32,9 +32,6 @@ import org.apache.camel.MultipleConsumer
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.WaitForTaskToComplete;
-import org.apache.camel.api.management.ManagedAttribute;
-import org.apache.camel.api.management.ManagedOperation;
-import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.impl.DefaultEndpoint;
 import org.apache.camel.processor.MulticastProcessor;
 import org.apache.camel.spi.BrowsableEndpoint;
@@ -45,7 +42,6 @@ import org.apache.camel.util.ServiceHelp
  * href="http://camel.apache.org/queue.html">Queue components</a> for
  * asynchronous SEDA exchanges on a {@link BlockingQueue} within a CamelContext
  */
-@ManagedResource(description = "Managed SedaEndpoint")
 public class SedaEndpoint extends DefaultEndpoint implements BrowsableEndpoint, MultipleConsumersSupport {
     private volatile BlockingQueue<Exchange> queue;
     private int size;
@@ -137,7 +133,6 @@ public class SedaEndpoint extends Defaul
         this.size = queue.remainingCapacity();
     }
 
-    @ManagedAttribute(description = "Queue max capacity")
     public int getSize() {
         return size;
     }
@@ -146,7 +141,6 @@ public class SedaEndpoint extends Defaul
         this.size = size;
     }
 
-    @ManagedAttribute(description = "Current queue size")
     public int getCurrentQueueSize() {
         return queue.size();
     }
@@ -155,7 +149,6 @@ public class SedaEndpoint extends Defaul
         this.blockWhenFull = blockWhenFull;
     }
 
-    @ManagedAttribute(description = "Whether the caller will block sending to a full queue")
     public boolean isBlockWhenFull() {
         return blockWhenFull;
     }
@@ -164,12 +157,10 @@ public class SedaEndpoint extends Defaul
         this.concurrentConsumers = concurrentConsumers;
     }
 
-    @ManagedAttribute(description = "Number of concurrent consumers")
     public int getConcurrentConsumers() {
         return concurrentConsumers;
     }
 
-    @ManagedAttribute
     public WaitForTaskToComplete getWaitForTaskToComplete() {
         return waitForTaskToComplete;
     }
@@ -178,7 +169,6 @@ public class SedaEndpoint extends Defaul
         this.waitForTaskToComplete = waitForTaskToComplete;
     }
 
-    @ManagedAttribute
     public long getTimeout() {
         return timeout;
     }
@@ -187,7 +177,6 @@ public class SedaEndpoint extends Defaul
         this.timeout = timeout;
     }
 
-    @ManagedAttribute
     public boolean isMultipleConsumers() {
         return multipleConsumers;
     }
@@ -207,7 +196,6 @@ public class SedaEndpoint extends Defaul
         return new ArrayList<Exchange>(getQueue());
     }
 
-    @ManagedAttribute
     public boolean isMultipleConsumersSupported() {
         return isMultipleConsumers();
     }
@@ -215,7 +203,6 @@ public class SedaEndpoint extends Defaul
     /**
      * Purges the queue
      */
-    @ManagedOperation(description = "Purges the seda queue")
     public void purgeQueue() {
         queue.clear();
     }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java?rev=1237666&r1=1237665&r2=1237666&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java Mon Jan 30 14:11:10 2012
@@ -29,6 +29,7 @@ import org.apache.camel.Producer;
 import org.apache.camel.Route;
 import org.apache.camel.Service;
 import org.apache.camel.component.bean.BeanProcessor;
+import org.apache.camel.component.seda.SedaEndpoint;
 import org.apache.camel.impl.ScheduledPollConsumer;
 import org.apache.camel.management.mbean.ManagedBeanProcessor;
 import org.apache.camel.management.mbean.ManagedBrowsableEndpoint;
@@ -43,6 +44,7 @@ import org.apache.camel.management.mbean
 import org.apache.camel.management.mbean.ManagedProducer;
 import org.apache.camel.management.mbean.ManagedRoute;
 import org.apache.camel.management.mbean.ManagedScheduledPollConsumer;
+import org.apache.camel.management.mbean.ManagedSedaEndpoint;
 import org.apache.camel.management.mbean.ManagedSendProcessor;
 import org.apache.camel.management.mbean.ManagedService;
 import org.apache.camel.management.mbean.ManagedSuspendableRoute;
@@ -90,6 +92,10 @@ public class DefaultManagementObjectStra
 
         if (endpoint instanceof org.apache.camel.spi.ManagementAware) {
             return ((org.apache.camel.spi.ManagementAware<Endpoint>) endpoint).getManagedObject(endpoint);
+        } else if (endpoint instanceof SedaEndpoint) {
+            ManagedSedaEndpoint me = new ManagedSedaEndpoint((SedaEndpoint) endpoint);
+            me.init(context.getManagementStrategy());
+            return me;
         } else if (endpoint instanceof BrowsableEndpoint) {
             ManagedBrowsableEndpoint me = new ManagedBrowsableEndpoint((BrowsableEndpoint) endpoint);
             me.init(context.getManagementStrategy());

Added: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSedaEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSedaEndpoint.java?rev=1237666&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSedaEndpoint.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSedaEndpoint.java Mon Jan 30 14:11:10 2012
@@ -0,0 +1,107 @@
+/**
+ * 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.api.management.ManagedAttribute;
+import org.apache.camel.api.management.ManagedOperation;
+import org.apache.camel.api.management.ManagedResource;
+import org.apache.camel.component.seda.SedaEndpoint;
+
+/**
+ *
+ */
+@ManagedResource(description = "Managed SedaEndpoint")
+public class ManagedSedaEndpoint extends ManagedBrowsableEndpoint {
+
+    public ManagedSedaEndpoint(SedaEndpoint endpoint) {
+        super(endpoint);
+    }
+
+    @Override
+    public SedaEndpoint getInstance() {
+        return getEndpoint();
+    }
+
+    @Override
+    public SedaEndpoint getEndpoint() {
+        return (SedaEndpoint) super.getEndpoint();
+    }
+
+    @ManagedAttribute(description = "Queue max capacity")
+    public int getSize() {
+        return getEndpoint().getSize();
+    }
+
+    public void setSize(int size) {
+        getEndpoint().setSize(size);
+    }
+
+    @ManagedAttribute(description = "Current queue size")
+    public int getCurrentQueueSize() {
+        return getEndpoint().getCurrentQueueSize();
+    }
+
+    public void setBlockWhenFull(boolean blockWhenFull) {
+        getEndpoint().setBlockWhenFull(blockWhenFull);
+    }
+
+    @ManagedAttribute(description = "Whether the caller will block sending to a full queue")
+    public boolean isBlockWhenFull() {
+        return getEndpoint().isBlockWhenFull();
+    }
+
+    public void setConcurrentConsumers(int concurrentConsumers) {
+        getEndpoint().setConcurrentConsumers(concurrentConsumers);
+    }
+
+    @ManagedAttribute(description = "Number of concurrent consumers")
+    public int getConcurrentConsumers() {
+        return getEndpoint().getConcurrentConsumers();
+    }
+
+    @ManagedAttribute
+    public long getTimeout() {
+        return getEndpoint().getTimeout();
+    }
+
+    public void setTimeout(long timeout) {
+        getEndpoint().setTimeout(timeout);
+    }
+
+    @ManagedAttribute
+    public boolean isMultipleConsumers() {
+        return getEndpoint().isMultipleConsumers();
+    }
+
+    @ManagedAttribute
+    public boolean isMultipleConsumersSupported() {
+        return isMultipleConsumers();
+    }
+
+    public void setMultipleConsumers(boolean multipleConsumers) {
+        getEndpoint().setMultipleConsumers(multipleConsumers);
+    }
+
+    /**
+     * Purges the queue
+     */
+    @ManagedOperation(description = "Purges the seda queue")
+    public void purgeQueue() {
+        getEndpoint().purgeQueue();
+    }
+
+}

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedSedaEndpointTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedSedaEndpointTest.java?rev=1237666&r1=1237665&r2=1237666&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedSedaEndpointTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedSedaEndpointTest.java Mon Jan 30 14:11:10 2012
@@ -55,6 +55,13 @@ public class ManagedSedaEndpointTest ext
         size = (Integer) mbeanServer.getAttribute(name, "CurrentQueueSize");
         assertEquals(1, size.intValue());
 
+        Long size2 = (Long) mbeanServer.invoke(name, "queueSize", null, null);
+        assertEquals(1, size2.longValue());
+
+        String out = (String) mbeanServer.invoke(name, "browseExchange", new Object[]{0}, new String[]{"java.lang.Integer"});
+        assertNotNull(out);
+        assertTrue(out.contains("Hi World"));
+
         mbeanServer.invoke(name, "purgeQueue", null, null);
 
         size = (Integer) mbeanServer.getAttribute(name, "CurrentQueueSize");

Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedSedaEndpointTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedSedaEndpointTest.java?rev=1237666&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedSedaEndpointTest.java (added)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedSedaEndpointTest.java Mon Jan 30 14:11:10 2012
@@ -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.spring.management;
+
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
+import org.apache.camel.spring.SpringTestSupport;
+import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ *
+ */
+public class SpringManagedSedaEndpointTest extends SpringTestSupport {
+
+    @Override
+    protected AbstractXmlApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/spring/management/SpringManagedSedaEndpointTest.xml");
+    }
+
+    protected MBeanServer getMBeanServer() {
+        return context.getManagementStrategy().getManagementAgent().getMBeanServer();
+    }
+
+    public void testSedaEndpoint() throws Exception {
+        getMockEndpoint("mock:result").expectedMessageCount(2);
+
+        template.sendBody("seda:start", "Hello World");
+        template.sendBody("seda:start", "Bye World");
+
+        assertMockEndpointsSatisfied();
+
+        MBeanServer mbeanServer = getMBeanServer();
+
+        ObjectName name = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=endpoints,name=\"seda://start\"");
+        String uri = (String) mbeanServer.getAttribute(name, "EndpointUri");
+        assertEquals("seda://start", uri);
+
+        Long timeout = (Long) mbeanServer.getAttribute(name, "Timeout");
+        assertEquals(30000, timeout.intValue());
+
+        Integer size = (Integer) mbeanServer.getAttribute(name, "CurrentQueueSize");
+        assertEquals(0, size.intValue());
+
+        // stop route
+        context.stopRoute("foo");
+
+        // send a message to queue
+        template.sendBody("seda:start", "Hi World");
+
+        size = (Integer) mbeanServer.getAttribute(name, "CurrentQueueSize");
+        assertEquals(1, size.intValue());
+
+        Long size2 = (Long) mbeanServer.invoke(name, "queueSize", null, null);
+        assertEquals(1, size2.longValue());
+
+        String out = (String) mbeanServer.invoke(name, "browseExchange", new Object[]{0}, new String[]{"java.lang.Integer"});
+        assertNotNull(out);
+        assertTrue(out.contains("Hi World"));
+
+        mbeanServer.invoke(name, "purgeQueue", null, null);
+
+        size = (Integer) mbeanServer.getAttribute(name, "CurrentQueueSize");
+        assertEquals(0, size.intValue());
+    }
+}

Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedSedaEndpointTest.xml (from r1237572, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedNamePatternTest.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedSedaEndpointTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedSedaEndpointTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedNamePatternTest.xml&r1=1237572&r2=1237666&rev=1237666&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedNamePatternTest.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedSedaEndpointTest.xml Mon Jan 30 14:11:10 2012
@@ -27,15 +27,14 @@
     <property name="domainName" value="org.apache.camel"/>
   </bean>
 
-  <!-- START SNIPPET: example -->
-  <camelContext managementNamePattern="cool-#name#" xmlns="http://camel.apache.org/schema/spring">
+  <camelContext xmlns="http://camel.apache.org/schema/spring">
     <jmxAgent id="agent"/>
 
-    <route>
-      <from uri="direct:start"/>
+    <route id="foo">
+      <from uri="seda:start"/>
+      <to uri="log:foo"/>
       <to uri="mock:result"/>
     </route>
   </camelContext>
-  <!-- END SNIPPET: example -->
 
 </beans>