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 2010/07/29 15:29:14 UTC

svn commit: r980445 - 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/event/ main/java/org/apache/camel/management/mbean/ main/jav...

Author: davsclaus
Date: Thu Jul 29 13:29:14 2010
New Revision: 980445

URL: http://svn.apache.org/viewvc?rev=980445&view=rev
Log:
CAMEL-3012: Added notification events for suspend/resume

Added:
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumeFailureEvent.java
      - copied, changed from r980423, camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartupFailureEvent.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumedEvent.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumingEvent.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendedEvent.java
      - copied, changed from r980423, camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartedEvent.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendingEvent.java
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/NoSuchEndpointException.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/DefaultRouteContext.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultEventFactory.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifier.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/spi/EventFactory.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/util/EventHelper.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.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=980445&r1=980444&r2=980445&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 Thu Jul 29 13:29:14 2010
@@ -58,12 +58,15 @@ import org.apache.camel.spi.TypeConverte
  *   <li>{@link #resume()} - to resume after a suspend</li>
  * </ul>
  * <p/>
- * <b>Notice:</b> that {@link #stop()} and {@link #suspend()} will graceful stop/suspend routs ensureing any in progress
+ * <b>Notice:</b> that {@link #stop()} and {@link #suspend()} will graceful stop/suspend routs ensuring any in progress
  * messages is given time to complete. See more details at {@link org.apache.camel.spi.ShutdownStrategy}.
  * <p/>
  * If you are doing a hot restart then its adviced to use the suspend/resume methods which ensures a faster
  * restart but also allows any internal state to be kept as is.
  * The stop/start approach will do a <i>cold</i> restart of Camel, where all internal state is reset.
+ * <p/>
+ * End users is adviced to use suspend/resume. Using stop is for shutting down Camel and its not guaranteed that
+ * when its being started again using the start method that everything works out of the box.
  *
  * @version $Revision$
  */

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/NoSuchEndpointException.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/NoSuchEndpointException.java?rev=980445&r1=980444&r2=980445&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/NoSuchEndpointException.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/NoSuchEndpointException.java Thu Jul 29 13:29:14 2010
@@ -16,7 +16,6 @@
  */
 package org.apache.camel;
 
-
 /**
  * A runtime exception thrown if a routing processor such as a
  * {@link org.apache.camel.processor.RecipientList RecipientList} is unable to resolve an

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=980445&r1=980444&r2=980445&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 Thu Jul 29 13:29:14 2010
@@ -989,6 +989,8 @@ public class DefaultCamelContext extends
         if (!suspended.get()) {
             if (suspending.compareAndSet(false, true)) {
                 try {
+                    EventHelper.notifyCamelContextSuspending(this);
+
                     LOG.info("Apache Camel " + getVersion() + " (CamelContext: " + getName() + ") is suspending");
                     StopWatch watch = new StopWatch();
 
@@ -1007,13 +1009,14 @@ public class DefaultCamelContext extends
                         shutdownRoute(entry.getKey());
                     }
 
-                    // TODO: suspended/resumed notification events
                     // TODO: more unit test to ensure suspend/resume with startup ordering is as expected
 
                     watch.stop();
                     if (LOG.isInfoEnabled()) {
                         LOG.info("Apache Camel " + getVersion() + " (CamelContext: " + getName() + ") is suspended in " + TimeUtils.printDuration(watch.taken()));
                     }
+
+                    EventHelper.notifyCamelContextSuspended(this);
                 } finally {
                     suspended.set(true);
                     suspending.set(false);
@@ -1027,6 +1030,8 @@ public class DefaultCamelContext extends
         if (suspended.get()) {
             if (resuming.compareAndSet(false, true)) {
                 try {
+                    EventHelper.notifyCamelContextResuming(this);
+
                     LOG.info("Apache Camel " + getVersion() + " (CamelContext: " + getName() + ") is resuming");
                     StopWatch watch = new StopWatch();
 
@@ -1041,6 +1046,11 @@ public class DefaultCamelContext extends
 
                     // and clear the list as they have been resumed
                     suspendedRouteServices.clear();
+
+                    EventHelper.notifyCamelContextResumed(this);
+                } catch (Exception e) {
+                    EventHelper.notifyCamelContextResumeFailed(this, e);
+                    throw e;
                 } finally {
                     suspended.set(false);
                     suspending.set(false);

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java?rev=980445&r1=980444&r2=980445&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java Thu Jul 29 13:29:14 2010
@@ -121,7 +121,7 @@ public class DefaultRouteContext impleme
         if (ref != null) {
             endpoint = lookup(ref, Endpoint.class);
             if (endpoint == null) {
-                throw new NoSuchEndpointException("ref:" + ref, "check your camel registery with id " + ref);
+                throw new NoSuchEndpointException("ref:" + ref, "check your camel registry with id " + ref);
             }
             // Check the endpoint has the right CamelContext 
             if (!this.getCamelContext().equals(endpoint.getCamelContext())) {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultEventFactory.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultEventFactory.java?rev=980445&r1=980444&r2=980445&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultEventFactory.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultEventFactory.java Thu Jul 29 13:29:14 2010
@@ -23,12 +23,17 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
+import org.apache.camel.management.event.CamelContextResumeFailureEvent;
+import org.apache.camel.management.event.CamelContextResumedEvent;
+import org.apache.camel.management.event.CamelContextResumingEvent;
 import org.apache.camel.management.event.CamelContextStartedEvent;
 import org.apache.camel.management.event.CamelContextStartingEvent;
 import org.apache.camel.management.event.CamelContextStartupFailureEvent;
 import org.apache.camel.management.event.CamelContextStopFailureEvent;
 import org.apache.camel.management.event.CamelContextStoppedEvent;
 import org.apache.camel.management.event.CamelContextStoppingEvent;
+import org.apache.camel.management.event.CamelContextSuspendedEvent;
+import org.apache.camel.management.event.CamelContextSuspendingEvent;
 import org.apache.camel.management.event.ExchangeCompletedEvent;
 import org.apache.camel.management.event.ExchangeCreatedEvent;
 import org.apache.camel.management.event.ExchangeFailedEvent;
@@ -111,4 +116,24 @@ public class DefaultEventFactory impleme
     public EventObject createExchangeSentEvent(Exchange exchange, Endpoint endpoint, long timeTaken) {
         return new ExchangeSentEvent(exchange, endpoint, timeTaken);
     }
+
+    public EventObject createCamelContextSuspendingEvent(CamelContext context) {
+        return new CamelContextSuspendingEvent(context);
+    }
+
+    public EventObject createCamelContextSuspendedEvent(CamelContext context) {
+        return new CamelContextSuspendedEvent(context);
+    }
+
+    public EventObject createCamelContextResumingEvent(CamelContext context) {
+        return new CamelContextResumingEvent(context);
+    }
+
+    public EventObject createCamelContextResumedEvent(CamelContext context) {
+        return new CamelContextResumedEvent(context);
+    }
+
+    public EventObject createCamelContextResumeFailureEvent(CamelContext context, Throwable cause) {
+        return new CamelContextResumeFailureEvent(context, cause);
+    }
 }

Copied: camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumeFailureEvent.java (from r980423, camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartupFailureEvent.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumeFailureEvent.java?p2=camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumeFailureEvent.java&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartupFailureEvent.java&r1=980423&r2=980445&rev=980445&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartupFailureEvent.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumeFailureEvent.java Thu Jul 29 13:29:14 2010
@@ -23,13 +23,13 @@ import org.apache.camel.CamelContext;
 /**
  * @version $Revision$
  */
-public class CamelContextStartupFailureEvent extends EventObject {
-    private static final long serialVersionUID = -4271899927507894567L;
+public class CamelContextResumeFailureEvent extends EventObject {
+    private static final long serialVersionUID = -4271899927507894566L;
 
     private CamelContext context;
     private Throwable cause;
 
-    public CamelContextStartupFailureEvent(CamelContext context, Throwable cause) {
+    public CamelContextResumeFailureEvent(CamelContext context, Throwable cause) {
         super(context);
         this.context = context;
         this.cause = cause;
@@ -45,6 +45,6 @@ public class CamelContextStartupFailureE
 
     @Override
     public String toString() {
-        return "Failed to start Camel: " + context.getName() + " due to " + cause.getMessage();
+        return "Failed to resume Camel: " + context.getName() + " due to " + cause.getMessage();
     }
 }

Added: camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumedEvent.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumedEvent.java?rev=980445&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumedEvent.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumedEvent.java Thu Jul 29 13:29:14 2010
@@ -0,0 +1,44 @@
+/**
+ * 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.event;
+
+import java.util.EventObject;
+
+import org.apache.camel.CamelContext;
+
+/**
+ * @version $Revision: 835593 $
+ */
+public class CamelContextResumedEvent extends EventObject {
+    private static final long serialVersionUID = 6761726800283234512L;
+
+    private final CamelContext context;
+
+    public CamelContextResumedEvent(CamelContext source) {
+        super(source);
+        this.context = source;
+    }
+
+    public CamelContext getContext() {
+        return context;
+    }
+
+    @Override
+    public String toString() {
+        return "Resumed CamelContext: " + context.getName();
+    }
+}

Added: camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumingEvent.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumingEvent.java?rev=980445&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumingEvent.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextResumingEvent.java Thu Jul 29 13:29:14 2010
@@ -0,0 +1,44 @@
+/**
+ * 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.event;
+
+import java.util.EventObject;
+
+import org.apache.camel.CamelContext;
+
+/**
+ * @version $Revision: 835593 $
+ */
+public class CamelContextResumingEvent extends EventObject {
+    private static final long serialVersionUID = 6761726800283234511L;
+
+    private final CamelContext context;
+
+    public CamelContextResumingEvent(CamelContext source) {
+        super(source);
+        this.context = source;
+    }
+
+    public CamelContext getContext() {
+        return context;
+    }
+
+    @Override
+    public String toString() {
+        return "Resuming CamelContext: " + context.getName();
+    }
+}

Copied: camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendedEvent.java (from r980423, camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartedEvent.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendedEvent.java?p2=camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendedEvent.java&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartedEvent.java&r1=980423&r2=980445&rev=980445&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartedEvent.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendedEvent.java Thu Jul 29 13:29:14 2010
@@ -23,12 +23,12 @@ import org.apache.camel.CamelContext;
 /**
  * @version $Revision$
  */
-public class CamelContextStartedEvent extends EventObject {
-    private static final long serialVersionUID = 6761726800283073490L;
+public class CamelContextSuspendedEvent extends EventObject {
+    private static final long serialVersionUID = 6761726800283072242L;
 
     private final CamelContext context;
 
-    public CamelContextStartedEvent(CamelContext source) {
+    public CamelContextSuspendedEvent(CamelContext source) {
         super(source);
         this.context = source;
     }
@@ -39,6 +39,6 @@ public class CamelContextStartedEvent ex
 
     @Override
     public String toString() {
-        return "Started CamelContext: " + context.getName();
+        return "Suspended CamelContext: " + context.getName();
     }
 }

Added: camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendingEvent.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendingEvent.java?rev=980445&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendingEvent.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextSuspendingEvent.java Thu Jul 29 13:29:14 2010
@@ -0,0 +1,44 @@
+/**
+ * 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.event;
+
+import java.util.EventObject;
+
+import org.apache.camel.CamelContext;
+
+/**
+ * @version $Revision: 835593 $
+ */
+public class CamelContextSuspendingEvent extends EventObject {
+    private static final long serialVersionUID = 6761726800283072241L;
+
+    private final CamelContext context;
+
+    public CamelContextSuspendingEvent(CamelContext source) {
+        super(source);
+        this.context = source;
+    }
+
+    public CamelContext getContext() {
+        return context;
+    }
+
+    @Override
+    public String toString() {
+        return "Suspending CamelContext: " + context.getName();
+    }
+}

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifier.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifier.java?rev=980445&r1=980444&r2=980445&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifier.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifier.java Thu Jul 29 13:29:14 2010
@@ -130,7 +130,8 @@ public class ManagedEventNotifier extend
         // all the class names in the event package
         String[] names = {"CamelContextStartedEvent", "CamelContextStartingEvent", "CamelContextStartupFailureEvent"
                 , "CamelContextStopFailureEvent", "CamelContextStoppedEvent", "CamelContextStoppingEvent"
-                , "ExchangeCompletedEvent", "ExchangeCreatedEvent", "ExchangeFailedEvent"
+                , "CamelContextSuspendingEvent", "CamelContextSuspendedEvent", "CamelContextResumingEvent", "CamelContextResumedEvent"
+                , "CamelContextResumeFailureEvent", "ExchangeCompletedEvent", "ExchangeCreatedEvent", "ExchangeFailedEvent"
                 , "ExchangeFailureHandledEvent", "ExchangeRedeliveryEvents", "ExchangeSentEvent", "RouteStartedEvent"
                 , "RouteStoppedEvent", "ServiceStartupFailureEvent", "ServiceStopFailureEvent"};
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/EventFactory.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/EventFactory.java?rev=980445&r1=980444&r2=980445&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/EventFactory.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/EventFactory.java Thu Jul 29 13:29:14 2010
@@ -173,4 +173,45 @@ public interface EventFactory {
      */
     EventObject createExchangeSentEvent(Exchange exchange, Endpoint endpoint, long timeTaken);
 
+    /**
+     * Creates an {@link EventObject} for Camel is suspending.
+     *
+     * @param context camel context
+     * @return the created event
+     */
+    EventObject createCamelContextSuspendingEvent(CamelContext context);
+
+    /**
+     * Creates an {@link EventObject} for Camel has been suspended successfully.
+     *
+     * @param context camel context
+     * @return the created event
+     */
+    EventObject createCamelContextSuspendedEvent(CamelContext context);
+
+    /**
+     * Creates an {@link EventObject} for Camel is resuming.
+     *
+     * @param context camel context
+     * @return the created event
+     */
+    EventObject createCamelContextResumingEvent(CamelContext context);
+
+    /**
+     * Creates an {@link EventObject} for Camel has been resumed successfully.
+     *
+     * @param context camel context
+     * @return the created event
+     */
+    EventObject createCamelContextResumedEvent(CamelContext context);
+
+    /**
+     * Creates an {@link EventObject} for Camel failing to resume
+     *
+     * @param context camel context
+     * @param cause   the cause exception
+     * @return the created event
+     */
+    EventObject createCamelContextResumeFailureEvent(CamelContext context, Throwable cause);
+
 }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/EventHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/EventHelper.java?rev=980445&r1=980444&r2=980445&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/EventHelper.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/EventHelper.java Thu Jul 29 13:29:14 2010
@@ -411,6 +411,121 @@ public final class EventHelper {
         }
     }
 
+    public static void notifyCamelContextSuspending(CamelContext context) {
+        List<EventNotifier> notifiers = context.getManagementStrategy().getEventNotifiers();
+        if (notifiers == null || notifiers.isEmpty()) {
+            return;
+        }
+
+        for (EventNotifier notifier : notifiers) {
+            if (notifier.isIgnoreCamelContextEvents()) {
+                continue;
+            }
+
+            EventFactory factory = context.getManagementStrategy().getEventFactory();
+            if (factory == null) {
+                return;
+            }
+            EventObject event = factory.createCamelContextSuspendingEvent(context);
+            if (event == null) {
+                return;
+            }
+            doNotifyEvent(notifier, event);
+        }
+    }
+
+    public static void notifyCamelContextSuspended(CamelContext context) {
+        List<EventNotifier> notifiers = context.getManagementStrategy().getEventNotifiers();
+        if (notifiers == null || notifiers.isEmpty()) {
+            return;
+        }
+
+        for (EventNotifier notifier : notifiers) {
+            if (notifier.isIgnoreCamelContextEvents()) {
+                continue;
+            }
+
+            EventFactory factory = context.getManagementStrategy().getEventFactory();
+            if (factory == null) {
+                return;
+            }
+            EventObject event = factory.createCamelContextSuspendedEvent(context);
+            if (event == null) {
+                return;
+            }
+            doNotifyEvent(notifier, event);
+        }
+    }
+
+    public static void notifyCamelContextResuming(CamelContext context) {
+        List<EventNotifier> notifiers = context.getManagementStrategy().getEventNotifiers();
+        if (notifiers == null || notifiers.isEmpty()) {
+            return;
+        }
+
+        for (EventNotifier notifier : notifiers) {
+            if (notifier.isIgnoreCamelContextEvents()) {
+                continue;
+            }
+
+            EventFactory factory = context.getManagementStrategy().getEventFactory();
+            if (factory == null) {
+                return;
+            }
+            EventObject event = factory.createCamelContextResumingEvent(context);
+            if (event == null) {
+                return;
+            }
+            doNotifyEvent(notifier, event);
+        }
+    }
+
+    public static void notifyCamelContextResumed(CamelContext context) {
+        List<EventNotifier> notifiers = context.getManagementStrategy().getEventNotifiers();
+        if (notifiers == null || notifiers.isEmpty()) {
+            return;
+        }
+
+        for (EventNotifier notifier : notifiers) {
+            if (notifier.isIgnoreCamelContextEvents()) {
+                continue;
+            }
+
+            EventFactory factory = context.getManagementStrategy().getEventFactory();
+            if (factory == null) {
+                return;
+            }
+            EventObject event = factory.createCamelContextResumedEvent(context);
+            if (event == null) {
+                return;
+            }
+            doNotifyEvent(notifier, event);
+        }
+    }
+
+    public static void notifyCamelContextResumeFailed(CamelContext context, Throwable cause) {
+        List<EventNotifier> notifiers = context.getManagementStrategy().getEventNotifiers();
+        if (notifiers == null || notifiers.isEmpty()) {
+            return;
+        }
+
+        for (EventNotifier notifier : notifiers) {
+            if (notifier.isIgnoreCamelContextEvents()) {
+                continue;
+            }
+
+            EventFactory factory = context.getManagementStrategy().getEventFactory();
+            if (factory == null) {
+                return;
+            }
+            EventObject event = factory.createCamelContextResumeFailureEvent(context, cause);
+            if (event == null) {
+                return;
+            }
+            doNotifyEvent(notifier, event);
+        }
+    }
+
     private static void doNotifyEvent(EventNotifier notifier, EventObject event) {
         // only notify if notifier is started
         boolean started = true;

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java?rev=980445&r1=980444&r2=980445&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java Thu Jul 29 13:29:14 2010
@@ -24,10 +24,14 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.management.event.CamelContextResumedEvent;
+import org.apache.camel.management.event.CamelContextResumingEvent;
 import org.apache.camel.management.event.CamelContextStartedEvent;
 import org.apache.camel.management.event.CamelContextStartingEvent;
 import org.apache.camel.management.event.CamelContextStoppedEvent;
 import org.apache.camel.management.event.CamelContextStoppingEvent;
+import org.apache.camel.management.event.CamelContextSuspendedEvent;
+import org.apache.camel.management.event.CamelContextSuspendingEvent;
 import org.apache.camel.management.event.ExchangeCompletedEvent;
 import org.apache.camel.management.event.ExchangeCreatedEvent;
 import org.apache.camel.management.event.ExchangeFailedEvent;
@@ -128,6 +132,30 @@ public class EventNotifierEventsTest ext
         assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(10));
     }
 
+    public void testSuspendResume() throws Exception {
+        assertEquals(4, events.size());
+        assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(1));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(2));
+        assertIsInstanceOf(CamelContextStartedEvent.class, events.get(3));
+
+        context.suspend();
+
+        assertEquals(8, events.size());
+        assertIsInstanceOf(CamelContextSuspendingEvent.class, events.get(4));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(5));
+        assertIsInstanceOf(RouteStoppedEvent.class, events.get(6));
+        assertIsInstanceOf(CamelContextSuspendedEvent.class, events.get(7));
+
+        context.resume();
+
+        assertEquals(12, events.size());
+        assertIsInstanceOf(CamelContextResumingEvent.class, events.get(8));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(9));
+        assertIsInstanceOf(RouteStartedEvent.class, events.get(10));
+        assertIsInstanceOf(CamelContextResumedEvent.class, events.get(11));
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {