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/08/26 17:38:36 UTC

svn commit: r808058 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/ main/java/org/apache/camel/impl/ main/java/org/apache/camel/management/ main/java/org/apache/camel/management/mbean/ main/java/org/apache/camel/model/ test/java/org/apach...

Author: davsclaus
Date: Wed Aug 26 15:38:36 2009
New Revision: 808058

URL: http://svn.apache.org/viewvc?rev=808058&view=rev
Log:
CAMEL-1933: Overhaul of JMX. Improved management of routes. To be continued...

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/Route.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/ServiceStatus.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRoute.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ServiceSupport.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagedLifecycleStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedRegisterRouteTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java?rev=808058&r1=808057&r2=808058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java Wed Aug 26 15:38:36 2009
@@ -433,8 +433,17 @@
     /**
      * Returns the current status of the given route
      *
+     * @param routeId the route id
+     * @return the status for the route
+     */
+    ServiceStatus getRouteStatus(String routeId);
+
+    /**
+     * Returns the current status of the given route
+     *
      * @param route the route
      * @return the status for the route
+     * @deprecated will be removed in Camel 2.2
      */
     ServiceStatus getRouteStatus(RouteDefinition route);
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/Route.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/Route.java?rev=808058&r1=808057&r2=808058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/Route.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/Route.java Wed Aug 26 15:38:36 2009
@@ -26,6 +26,13 @@
     String GROUP_PROPERTY = "group";
 
     /**
+     * Gets the route id
+     *
+     * @return the route id
+     */
+    String getId();
+
+    /**
      * Gets the inbound endpoint
      */
     Endpoint getEndpoint();

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/ServiceStatus.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/ServiceStatus.java?rev=808058&r1=808057&r2=808058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/ServiceStatus.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/ServiceStatus.java Wed Aug 26 15:38:36 2009
@@ -16,19 +16,29 @@
  */
 package org.apache.camel;
 
+import java.io.Serializable;
+
 /**
  * Reresents the status of a {@link Service} instance
  *
  * @version $Revision$
  */
-public enum ServiceStatus {
-    Created, Starting, Started, Stopping, Stopped;
+public enum ServiceStatus implements Serializable {
+    Starting, Started, Stopping, Stopped;
 
     public boolean isStartable() {
-        return this == Created || this == Stopped;
+        return this == Stopped;
     }
 
     public boolean isStoppable() {
         return this == Starting || this == Started;
     }
+
+    public boolean isStarted() {
+        return this == Started;
+    }
+
+    public boolean isStopped() {
+        return this == Stopped;
+    }
 }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=808058&r1=808057&r2=808058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Wed Aug 26 15:38:36 2009
@@ -582,9 +582,6 @@
         return getRouteStatus(route.idOrCreate(nodeIdFactory));
     }
 
-    /**
-     * Returns the status of the service of the given ID or null if there is no service created yet
-     */
     public ServiceStatus getRouteStatus(String key) {
         RouteService routeService = routeServices.get(key);
         if (routeService != null) {
@@ -600,7 +597,6 @@
         startRouteService(routeService);
     }
 
-
     public void stopRoute(RouteDefinition route) throws Exception {
         stopRoute(route.idOrCreate(nodeIdFactory));
     }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRoute.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRoute.java?rev=808058&r1=808057&r2=808058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRoute.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRoute.java Wed Aug 26 15:38:36 2009
@@ -56,6 +56,10 @@
         return "Route";
     }
 
+    public String getId() {
+        return (String) properties.get(Route.ID_PROPERTY);
+    }
+
     public Endpoint getEndpoint() {
         return endpoint;
     }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ServiceSupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ServiceSupport.java?rev=808058&r1=808057&r2=808058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ServiceSupport.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ServiceSupport.java Wed Aug 26 15:38:36 2009
@@ -109,7 +109,9 @@
         if (isStopped()) {
             return ServiceStatus.Stopped;
         }
-        return ServiceStatus.Created;
+
+        // use stopped as fallback
+        return ServiceStatus.Stopped;
     }
     
     /**

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagedLifecycleStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagedLifecycleStrategy.java?rev=808058&r1=808057&r2=808058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagedLifecycleStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagedLifecycleStrategy.java Wed Aug 26 15:38:36 2009
@@ -333,7 +333,7 @@
         }
 
         for (Route route : routes) {
-            ManagedRoute mr = new ManagedRoute(getStrategy(), route);
+            ManagedRoute mr = new ManagedRoute(getStrategy(), context, route);
 
             // get the wrapped instrumentation processor from this route
             // and set me as the counter
@@ -362,14 +362,8 @@
             return;
         }
 
-        for (Route route : routes) {
-            ManagedRoute mr = new ManagedRoute(getStrategy(), route);
-            try {
-                getStrategy().unmanageObject(mr);
-            } catch (Exception e) {
-                LOG.warn("Could not unregister Route MBean", e);
-            }
-        }
+        // keep the route in the mbean so its still there, it will still be unregistered
+        // when camel itself is shutting down
     }
 
     public void onRouteContextCreate(RouteContext routeContext) {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java?rev=808058&r1=808057&r2=808058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java Wed Aug 26 15:38:36 2009
@@ -141,7 +141,7 @@
     public ObjectName getObjectName(ManagedRoute mbean) throws MalformedObjectNameException {
         Route route = mbean.getRoute();
         Endpoint ep = route.getEndpoint();
-        String id = (String)route.getProperties().get(Route.ID_PROPERTY);
+        String id = route.getId();
 
         StringBuffer buffer = new StringBuffer();
         buffer.append(domainName).append(":");

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java?rev=808058&r1=808057&r2=808058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java Wed Aug 26 15:38:36 2009
@@ -16,8 +16,10 @@
  */
 package org.apache.camel.management.mbean;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Route;
+import org.apache.camel.ServiceStatus;
 import org.apache.camel.spi.ManagementStrategy;
 import org.springframework.jmx.export.annotation.ManagedAttribute;
 import org.springframework.jmx.export.annotation.ManagedOperation;
@@ -29,10 +31,12 @@
     public static final String VALUE_UNKNOWN = "Unknown";
     private Route route;
     private String description;
+    private CamelContext context;
 
-    public ManagedRoute(ManagementStrategy strategy, Route route) {
+    public ManagedRoute(ManagementStrategy strategy, CamelContext context, Route route) {
         super(strategy);
         this.route = route;
+        this.context = context;
         this.description = route.toString();
     }
 
@@ -40,10 +44,17 @@
         return route;
     }
 
+    public CamelContext getContext() {
+        return context;
+    }
+
     @ManagedAttribute(description = "Route id")
     public String getId() {
-        Object id = route.getProperties().get(Route.ID_PROPERTY);
-        return id != null ? id.toString() : VALUE_UNKNOWN;
+        String id = route.getId();
+        if (id == null) {
+            id = VALUE_UNKNOWN;
+        }
+        return id;
     }
 
     @ManagedAttribute(description = "Route Description")
@@ -57,6 +68,17 @@
         return ep != null ? ep.getEndpointUri() : VALUE_UNKNOWN;
     }
 
+    @ManagedAttribute(description = "Route state")
+    public String getState() {
+        // must use String type to be sure remote JMX can read the attribute without requiring Camel classes.
+        ServiceStatus status = context.getRouteStatus(route.getId());
+        // if no status exists then its stopped
+        if (status == null) {
+            status = ServiceStatus.Stopped;
+        }
+        return status.name();
+    }
+
     @ManagedOperation(description = "Start Route")
     public void start() throws Exception {
         throw new IllegalArgumentException("Start not supported");

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java?rev=808058&r1=808057&r2=808058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java Wed Aug 26 15:38:36 2009
@@ -87,7 +87,7 @@
      */
     public ServiceStatus getStatus() {
         if (camelContext != null) {
-            ServiceStatus answer = camelContext.getRouteStatus(this);
+            ServiceStatus answer = camelContext.getRouteStatus(this.getId());
             if (answer == null) {
                 answer = ServiceStatus.Stopped;
             }

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedRegisterRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedRegisterRouteTest.java?rev=808058&r1=808057&r2=808058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedRegisterRouteTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedRegisterRouteTest.java Wed Aug 26 15:38:36 2009
@@ -21,6 +21,7 @@
 import javax.management.ObjectName;
 
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.ServiceStatus;
 import org.apache.camel.builder.RouteBuilder;
 
 /**
@@ -36,9 +37,26 @@
 
         ObjectName on = set.iterator().next();
 
+        boolean registered = mbeanServer.isRegistered(on);
+        assertEquals("Should be registered", true, registered);
+
         String uri = (String) mbeanServer.getAttribute(on, "EndpointUri");
         // the route has this starting endpoint uri
         assertEquals("direct://start", uri);
+
+        // should be started
+        String state = (String) mbeanServer.getAttribute(on, "State");
+        assertEquals("Should be started", ServiceStatus.Started.name(), state);
+
+        // stop the route
+        context.stopRoute(context.getRouteDefinitions().get(0));
+
+        registered = mbeanServer.isRegistered(on);
+        assertEquals("Should be registered", true, registered);
+
+        // should be stopped, eg its removed
+        state = (String) mbeanServer.getAttribute(on, "State");
+        assertEquals("Should be stopped", ServiceStatus.Stopped.name(), state);
     }
 
     @Override