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() {