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