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 2009/09/02 15:54:41 UTC

svn commit: r810506 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/impl/ main/java/org/apache/camel/management/ main/java/org/apache/camel/management/mbean/ main/java/org/apache/camel/spi/ test/java/org/apache/camel/impl/ test/java/org/ap...

Author: davsclaus
Date: Wed Sep  2 13:54:40 2009
New Revision: 810506

URL: http://svn.apache.org/viewvc?rev=810506&view=rev
Log:
CAMEL-1980: JMX. Route id is now displayed for consumers.

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/RouteService.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedConsumer.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedScheduledPollConsumer.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/spi/LifecycleStrategy.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DummyLifecycleStrategy.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedBrowseableEndpointTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedScheduledPollConsumerTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedUnregisterConsumerTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/RouteService.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/RouteService.java?rev=810506&r1=810505&r2=810506&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/RouteService.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/RouteService.java Wed Sep  2 13:54:40 2009
@@ -21,6 +21,7 @@
 import java.util.List;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.Consumer;
 import org.apache.camel.Navigate;
 import org.apache.camel.Route;
 import org.apache.camel.Service;
@@ -98,7 +99,8 @@
             for (Service service : services) {
                 doGetChildServies(list, service);
             }
-            startChildService(list);
+
+            startChildService(route, list);
 
             // start the route itself
             ServiceHelper.startService(route);
@@ -125,7 +127,7 @@
             for (Service service : services) {
                 doGetChildServies(list, service);
             }
-            stopChildService(list);
+            stopChildService(route, list);
 
             // stop the route itself
             ServiceHelper.stopService(route);
@@ -137,20 +139,34 @@
         camelContext.removeRouteCollection(routes);
     }
 
-    protected void startChildService(List<Service> services) throws Exception {
+    protected void startChildService(Route route, List<Service> services) throws Exception {
+        boolean first = true;
         for (Service service : services) {
             for (LifecycleStrategy strategy : camelContext.getLifecycleStrategies()) {
-                strategy.onServiceAdd(camelContext, service);
+                // the first one is the input consumer
+                if (first && service instanceof Consumer) {
+                    strategy.onRouteConsumerAdd(route, (Consumer) service);
+                } else {
+                    strategy.onServiceAdd(camelContext, service);
+                    first = false;
+                }
             }
             ServiceHelper.startService(service);
             addChildService(service);
         }
     }
 
-    protected void stopChildService(List<Service> services) throws Exception {
+    protected void stopChildService(Route route, List<Service> services) throws Exception {
+        boolean first = true;
         for (Service service : services) {
             for (LifecycleStrategy strategy : camelContext.getLifecycleStrategies()) {
-                strategy.onServiceRemove(camelContext, service);
+                // the first one is the input consumer
+                if (first && service instanceof Consumer) {
+                    strategy.onRouteConsumerRemove(route, (Consumer) service);
+                } else {
+                    strategy.onServiceRemove(camelContext, service);
+                    first = false;
+                }
             }
             ServiceHelper.stopService(service);
             removeChildService(service);

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java?rev=810506&r1=810505&r2=810506&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java Wed Sep  2 13:54:40 2009
@@ -255,7 +255,7 @@
         } else if (service instanceof Producer) {
             return new ManagedProducer(context, (Producer) service);
         } else if (service instanceof ScheduledPollConsumer) {
-                return new ManagedScheduledPollConsumer(context, (ScheduledPollConsumer) service);
+            return new ManagedScheduledPollConsumer(context, (ScheduledPollConsumer) service);
         } else if (service instanceof Consumer) {
             return new ManagedConsumer(context, (Consumer) service);
         } else if (service instanceof Processor) {
@@ -307,6 +307,48 @@
         return new ManagedProcessor(context, processor, definition);
     }
 
+    public void onRouteConsumerAdd(Route route, Consumer consumer) {
+        // the agent hasn't been started
+        if (!initialized) {
+            return;
+        }
+
+        Object managedObject;
+        if (consumer instanceof ManagementAware) {
+            managedObject = ((ManagementAware) consumer).getManagedObject(consumer);
+        } else if (consumer instanceof ScheduledPollConsumer) {
+            managedObject = new ManagedScheduledPollConsumer(route.getRouteContext().getCamelContext(), (ScheduledPollConsumer) consumer, route);
+        } else {
+            managedObject = new ManagedConsumer(route.getRouteContext().getCamelContext(), consumer, route);
+        }
+        try {
+            getStrategy().manageObject(managedObject);
+        } catch (Exception e) {
+            LOG.warn("Could not register consumer MBean.", e);
+        }
+    }
+
+    public void onRouteConsumerRemove(Route route, Consumer consumer) {
+        // the agent hasn't been started
+        if (!initialized) {
+            return;
+        }
+
+        Object managedObject;
+        if (consumer instanceof ManagementAware) {
+            managedObject = ((ManagementAware) consumer).getManagedObject(consumer);
+        } else if (consumer instanceof ScheduledPollConsumer) {
+            managedObject = new ManagedScheduledPollConsumer(route.getRouteContext().getCamelContext(), (ScheduledPollConsumer) consumer, route);
+        } else {
+            managedObject = new ManagedConsumer(route.getRouteContext().getCamelContext(), consumer, route);
+        }
+        try {
+            getStrategy().unmanageObject(managedObject);
+        } catch (Exception e) {
+            LOG.warn("Could not register consumer MBean.", e);
+        }
+    }
+
     public void onRoutesAdd(Collection<Route> routes) {
         // the agent hasn't been started
         if (!initialized) {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedConsumer.java?rev=810506&r1=810505&r2=810506&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedConsumer.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedConsumer.java Wed Sep  2 13:54:40 2009
@@ -18,6 +18,7 @@
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Consumer;
+import org.apache.camel.Route;
 import org.springframework.jmx.export.annotation.ManagedAttribute;
 import org.springframework.jmx.export.annotation.ManagedResource;
 
@@ -27,20 +28,38 @@
 @ManagedResource(description = "Managed Consumer")
 public class ManagedConsumer extends ManagedService {
 
-    private Consumer consumer;
+    private final Consumer consumer;
+    private final Route route;
 
     public ManagedConsumer(CamelContext context, Consumer consumer) {
+        this(context, consumer, null);
+    }
+
+    public ManagedConsumer(CamelContext context, Consumer consumer, Route route) {
         super(context, consumer);
         this.consumer = consumer;
+        this.route = route;
     }
 
     public Consumer getConsumer() {
         return consumer;
     }
 
+    public Route getRoute() {
+        return route;
+    }
+
     @ManagedAttribute(description = "Endpoint Uri")
     public String getEndpointUri() {
         return consumer.getEndpoint().getEndpointUri();
     }
 
+    @ManagedAttribute(description = "Route id")
+    public String getRouteId() {
+        if (route != null) {
+            return route.getId();
+        }
+        return null;
+    }
+
 }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedScheduledPollConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedScheduledPollConsumer.java?rev=810506&r1=810505&r2=810506&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedScheduledPollConsumer.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedScheduledPollConsumer.java Wed Sep  2 13:54:40 2009
@@ -19,6 +19,7 @@
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.Route;
 import org.apache.camel.impl.ScheduledPollConsumer;
 import org.springframework.jmx.export.annotation.ManagedAttribute;
 import org.springframework.jmx.export.annotation.ManagedResource;
@@ -36,6 +37,11 @@
         this.consumer = consumer;
     }
 
+    public ManagedScheduledPollConsumer(CamelContext context, ScheduledPollConsumer consumer, Route route) {
+        super(context, consumer, route);
+        this.consumer = consumer;
+    }
+
     public ScheduledPollConsumer getConsumer() {
         return consumer;
     }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/LifecycleStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/LifecycleStrategy.java?rev=810506&r1=810505&r2=810506&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/LifecycleStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/LifecycleStrategy.java Wed Sep  2 13:54:40 2009
@@ -20,14 +20,13 @@
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
+import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Route;
 import org.apache.camel.Service;
 
 /**
  * Strategy for lifecycle notifications.
- * <p/>
- * <b>Node:</b> Subject to change in Camel 2.1
  */
 public interface LifecycleStrategy {
 
@@ -84,6 +83,16 @@
     void onServiceAdd(CamelContext context, Service service);
 
     /**
+     * Notification on adding a {@link Consumer} as input to a given {@link Route}
+     *
+     * @param route
+     * @param consumer      the consumer
+     */
+    void onRouteConsumerAdd(Route route, Consumer consumer);
+
+    void onRouteConsumerRemove(Route route, Consumer consumer);
+
+    /**
      * Notification on removing a {@link Service}.
      *
      * @param context the camel context

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DummyLifecycleStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DummyLifecycleStrategy.java?rev=810506&r1=810505&r2=810506&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DummyLifecycleStrategy.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DummyLifecycleStrategy.java Wed Sep  2 13:54:40 2009
@@ -22,6 +22,7 @@
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
+import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Route;
 import org.apache.camel.Service;
@@ -67,6 +68,14 @@
         events.add("onServiceRemove");
     }
 
+    public void onRouteConsumerAdd(Route route, Consumer consumer) {
+        events.add("onRouteConsumerAdd");
+    }
+
+    public void onRouteConsumerRemove(Route route, Consumer consumer) {
+        events.add("onRouteConsumerRemove");
+    }
+
     public void onRoutesAdd(Collection<Route> routes) {
         events.add("onRoutesAdd");
     }

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedBrowseableEndpointTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedBrowseableEndpointTest.java?rev=810506&r1=810505&r2=810506&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedBrowseableEndpointTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedBrowseableEndpointTest.java Wed Sep  2 13:54:40 2009
@@ -56,11 +56,11 @@
 
         String out = (String) mbeanServer.invoke(name, "browseExchange", new Object[]{0}, new String[]{"java.lang.Integer"});
         assertNotNull(out);
-        assertTrue(out.contains("Hello World") );
+        assertTrue(out.contains("Hello World"));
 
         out = (String) mbeanServer.invoke(name, "browseExchange", new Object[]{1}, new String[]{"java.lang.Integer"});
         assertNotNull(out);
-        assertTrue(out.contains("Bye World") );
+        assertTrue(out.contains("Bye World"));
     }
 
     @Override

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedScheduledPollConsumerTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedScheduledPollConsumerTest.java?rev=810506&r1=810505&r2=810506&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedScheduledPollConsumerTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedScheduledPollConsumerTest.java Wed Sep  2 13:54:40 2009
@@ -55,6 +55,9 @@
         Long delay = (Long) mbeanServer.getAttribute(on, "Delay");
         assertEquals(4000, delay.longValue());
 
+        String routeId = (String) mbeanServer.getAttribute(on, "RouteId");
+        assertEquals("route1", routeId);
+
         // stop it
         mbeanServer.invoke(on, "stop", null, null);
 

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedUnregisterConsumerTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedUnregisterConsumerTest.java?rev=810506&r1=810505&r2=810506&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedUnregisterConsumerTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedUnregisterConsumerTest.java Wed Sep  2 13:54:40 2009
@@ -51,6 +51,9 @@
         String uri = (String) mbeanServer.getAttribute(on, "EndpointUri");
         assertEquals("direct://start", uri);
 
+        String routeId = (String) mbeanServer.getAttribute(on, "RouteId");
+        assertEquals("route1", routeId);
+
         context.stop();
 
         assertFalse("Should no longer be registered", mbeanServer.isRegistered(on));