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/10 12:14:22 UTC
svn commit: r813351 - in /camel/trunk/camel-core/src:
main/java/org/apache/camel/impl/ main/java/org/apache/camel/management/
main/java/org/apache/camel/management/event/
main/java/org/apache/camel/spi/ main/java/org/apache/camel/util/
test/java/org/ap...
Author: davsclaus
Date: Thu Sep 10 10:14:21 2009
New Revision: 813351
URL: http://svn.apache.org/viewvc?rev=813351&view=rev
Log:
CAMEL-2000: More roboust when shutting down camel. Notification events fired when a service failed to stop while shutting down Camel.
Added:
camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ServiceStoppingFailedEvent.java
- copied, changed from r813000, camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartingFailedEvent.java
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextStopFailureTest.java (with props)
camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierServiceStoppingFailedEventTest.java (with props)
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.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/DefaultManagementLifecycleStrategy.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/impl/MultipleLifecycleStrategyTest.java
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=813351&r1=813350&r2=813351&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 Sep 10 10:14:21 2009
@@ -861,7 +861,7 @@
doStartCamel();
} catch (Exception e) {
// fire event that we failed to start
- EventHelper.notifyCamelContextStartingFailedEvent(this, e);
+ EventHelper.notifyCamelContextStartingFailed(this, e);
// rethrown cause
throw e;
}
@@ -900,6 +900,8 @@
}
}
+ // start management strategy before lifecycles are started
+ getManagementStrategy().start();
Iterator<LifecycleStrategy> it = lifecycleStrategies.iterator();
while (it.hasNext()) {
@@ -952,13 +954,23 @@
LOG.warn("Cannot stop lifecycle strategies: " + e.getMessage());
}
- LOG.info("Apache Camel " + getVersion() + " (CamelContext:" + getName() + ") stopped");
+
+ // stop management as the last one
+ stopServices(getManagementStrategy());
+
EventHelper.notifyCamelContextStopped(this);
+ LOG.info("Apache Camel " + getVersion() + " (CamelContext:" + getName() + ") stopped");
}
private void stopServices(Object service) throws Exception {
// allow us to do custom work before delegating to service helper
- ServiceHelper.stopService(service);
+ try {
+ ServiceHelper.stopService(service);
+ } catch (Exception e) {
+ LOG.warn("Error occurred while stopping service: " + service + ". This exception will be ignored.");
+ // fire event
+ EventHelper.notifyServiceStoppingFailed(this, service, e);
+ }
}
@SuppressWarnings("unchecked")
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=813351&r1=813350&r2=813351&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 Sep 10 10:14:21 2009
@@ -33,6 +33,7 @@
import org.apache.camel.management.event.ExchangeFailureHandledEvent;
import org.apache.camel.management.event.RouteStartedEvent;
import org.apache.camel.management.event.RouteStoppedEvent;
+import org.apache.camel.management.event.ServiceStoppingFailedEvent;
import org.apache.camel.spi.EventFactory;
/**
@@ -60,6 +61,10 @@
return new CamelContextStartingFailedEvent(context, cause);
}
+ public EventObject createServiceStoppingFailedEvent(CamelContext context, Object service, Exception cause) {
+ return new ServiceStoppingFailedEvent(context, service, cause);
+ }
+
public EventObject createRouteStartedEvent(Route route) {
return new RouteStartedEvent(route);
}
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=813351&r1=813350&r2=813351&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 Thu Sep 10 10:14:21 2009
@@ -95,11 +95,8 @@
try {
initialized = true;
- // call addService so that context will handle lifecycle on the strategy
- context.addService(getStrategy());
-
ManagedCamelContext mc = new ManagedCamelContext(context);
- getStrategy().manageObject(mc);
+ getManagementStrategy().manageObject(mc);
} catch (Exception e) {
// must rethrow to allow CamelContext fallback to non JMX agent to allow
@@ -116,8 +113,8 @@
try {
ManagedCamelContext mc = new ManagedCamelContext(context);
// the context could have been removed already
- if (getStrategy().isManaged(null, mc)) {
- getStrategy().unmanageObject(mc);
+ if (getManagementStrategy().isManaged(null, mc)) {
+ getManagementStrategy().unmanageObject(mc);
}
} catch (Exception e) {
LOG.warn("Could not unregister CamelContext MBean", e);
@@ -131,7 +128,7 @@
}
try {
Object mc = getManagedObjectForComponent(name, component);
- getStrategy().manageObject(mc);
+ getManagementStrategy().manageObject(mc);
} catch (Exception e) {
LOG.warn("Could not register Component MBean", e);
}
@@ -144,7 +141,7 @@
}
try {
Object mc = getManagedObjectForComponent(name, component);
- getStrategy().unmanageObject(mc);
+ getManagementStrategy().unmanageObject(mc);
} catch (Exception e) {
LOG.warn("Could not unregister Component MBean", e);
}
@@ -175,7 +172,7 @@
try {
Object me = getManagedObjectForEndpoint(endpoint);
- getStrategy().manageObject(me);
+ getManagementStrategy().manageObject(me);
} catch (Exception e) {
LOG.warn("Could not register Endpoint MBean for uri: " + endpoint.getEndpointUri(), e);
}
@@ -189,7 +186,7 @@
try {
Object me = getManagedObjectForEndpoint(endpoint);
- getStrategy().unmanageObject(me);
+ getManagementStrategy().unmanageObject(me);
} catch (Exception e) {
LOG.warn("Could not unregister Endpoint MBean for uri: " + endpoint.getEndpointUri(), e);
}
@@ -222,7 +219,7 @@
}
// skip already managed services, for example if a route has been restarted
- if (getStrategy().isManaged(managedObject, null)) {
+ if (getManagementStrategy().isManaged(managedObject, null)) {
if (LOG.isTraceEnabled()) {
LOG.trace("The service is already managed: " + service);
}
@@ -230,7 +227,7 @@
}
try {
- getStrategy().manageObject(managedObject);
+ getManagementStrategy().manageObject(managedObject);
} catch (Exception e) {
LOG.warn("Could not register service: " + service + " as Service MBean.", e);
}
@@ -245,7 +242,7 @@
Object managedObject = getManagedObjectForService(context, service, route);
if (managedObject != null) {
try {
- getStrategy().unmanageObject(managedObject);
+ getManagementStrategy().unmanageObject(managedObject);
} catch (Exception e) {
LOG.warn("Could not unregister service: " + service + " as Service MBean.", e);
}
@@ -340,10 +337,10 @@
}
for (Route route : routes) {
- ManagedRoute mr = new ManagedRoute(getStrategy(), context, route);
+ ManagedRoute mr = new ManagedRoute(getManagementStrategy(), context, route);
// skip already managed routes, for example if the route has been restarted
- if (getStrategy().isManaged(mr, null)) {
+ if (getManagementStrategy().isManaged(mr, null)) {
if (LOG.isTraceEnabled()) {
LOG.trace("The route is already managed: " + route);
}
@@ -362,7 +359,7 @@
}
try {
- getStrategy().manageObject(mr);
+ getManagementStrategy().manageObject(mr);
} catch (JMException e) {
LOG.warn("Could not register Route MBean", e);
} catch (Exception e) {
@@ -385,7 +382,7 @@
Object managedObject = new ManagedErrorHandler(routeContext, errorHandler, errorHandlerBuilder);
// skip already managed services, for example if a route has been restarted
- if (getStrategy().isManaged(managedObject, null)) {
+ if (getManagementStrategy().isManaged(managedObject, null)) {
if (LOG.isTraceEnabled()) {
LOG.trace("The error handler builder is already managed: " + errorHandlerBuilder);
}
@@ -393,7 +390,7 @@
}
try {
- getStrategy().manageObject(managedObject);
+ getManagementStrategy().manageObject(managedObject);
} catch (Exception e) {
LOG.warn("Could not register error handler builder: " + errorHandlerBuilder + " as ErrorHandlerMBean.", e);
}
@@ -444,7 +441,7 @@
// okay this is a processor we would like to manage so create the
// performance counter that is the base for processors
- ManagedPerformanceCounter pc = new ManagedPerformanceCounter(getStrategy());
+ ManagedPerformanceCounter pc = new ManagedPerformanceCounter(getManagementStrategy());
// set statistics enabled depending on the option
boolean enabled = context.getManagementStrategy().getStatisticsLevel() == ManagementStatisticsLevel.All;
pc.setStatisticsEnabled(enabled);
@@ -481,15 +478,15 @@
}
// only if custom id assigned
- if (getStrategy().isOnlyManageProcessorWithCustomId()) {
+ if (getManagementStrategy().isOnlyManageProcessorWithCustomId()) {
return processor.hasCustomIdAssigned();
}
// use customer filter
- return getStrategy().manageProcessor(processor);
+ return getManagementStrategy().manageProcessor(processor);
}
- private ManagementStrategy getStrategy() {
+ private ManagementStrategy getManagementStrategy() {
return context.getManagementStrategy();
}
Copied: camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ServiceStoppingFailedEvent.java (from r813000, camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartingFailedEvent.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ServiceStoppingFailedEvent.java?p2=camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ServiceStoppingFailedEvent.java&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartingFailedEvent.java&r1=813000&r2=813351&rev=813351&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/CamelContextStartingFailedEvent.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ServiceStoppingFailedEvent.java Thu Sep 10 10:14:21 2009
@@ -23,14 +23,16 @@
/**
* @version $Revision$
*/
-public class CamelContextStartingFailedEvent extends EventObject {
+public class ServiceStoppingFailedEvent extends EventObject {
private CamelContext context;
+ private Object service;
private Exception cause;
- public CamelContextStartingFailedEvent(CamelContext context, Exception cause) {
- super(context);
+ public ServiceStoppingFailedEvent(CamelContext context, Object service, Exception cause) {
+ super(service);
this.context = context;
+ this.service = service;
this.cause = cause;
}
@@ -38,13 +40,17 @@
return context;
}
+ public Object getService() {
+ return service;
+ }
+
public Exception getCause() {
return cause;
}
@Override
public String toString() {
- return "Starting CamelContext: " + context.getName() + " failed due to " + cause.getMessage();
+ return "Stopping service: " + service + " failed due to " + cause.getMessage();
}
-}
+}
\ No newline at end of file
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=813351&r1=813350&r2=813351&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 Sep 10 10:14:21 2009
@@ -74,6 +74,16 @@
EventObject createCamelContextStoppedEvent(CamelContext context);
/**
+ * Creates an {@link EventObject} for a Service failed to stop with success
+ *
+ * @param context camel context
+ * @param service the service
+ * @param cause the cause exception that prevents Camel from starting
+ * @return the created event
+ */
+ EventObject createServiceStoppingFailedEvent(CamelContext context, Object service, Exception cause);
+
+ /**
* Creates an {@link EventObject} for {@link Route} has been started successfully.
*
* @param route the route
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=813351&r1=813350&r2=813351&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 Sep 10 10:14:21 2009
@@ -71,7 +71,7 @@
doNotifyEvent(notifier, event);
}
- public static void notifyCamelContextStartingFailedEvent(CamelContext context, Exception cause) {
+ public static void notifyCamelContextStartingFailed(CamelContext context, Exception cause) {
EventNotifier notifier = context.getManagementStrategy().getEventNotifier();
if (notifier == null) {
return;
@@ -119,6 +119,22 @@
doNotifyEvent(notifier, event);
}
+ public static void notifyServiceStoppingFailed(CamelContext context, Object service, Exception cause) {
+ EventNotifier notifier = context.getManagementStrategy().getEventNotifier();
+ if (notifier == null) {
+ return;
+ }
+ EventFactory factory = context.getManagementStrategy().getEventFactory();
+ if (factory == null) {
+ return;
+ }
+ EventObject event = factory.createServiceStoppingFailedEvent(context, service, cause);
+ if (event == null) {
+ return;
+ }
+ doNotifyEvent(notifier, event);
+ }
+
public static void notifyRouteStarted(CamelContext context, Route route) {
EventNotifier notifier = context.getManagementStrategy().getEventNotifier();
if (notifier == null) {
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextStopFailureTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextStopFailureTest.java?rev=813351&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextStopFailureTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextStopFailureTest.java Thu Sep 10 10:14:21 2009
@@ -0,0 +1,68 @@
+/**
+ * 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.impl;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Service;
+
+/**
+ * @version $Revision$
+ */
+public class DefaultCamelContextStopFailureTest extends ContextTestSupport {
+
+ private static String stopOrder;
+
+ @Override
+ protected CamelContext createCamelContext() throws Exception {
+ CamelContext context = super.createCamelContext();
+ context.addService(new MyService("A", false));
+ context.addService(new MyService("B", true));
+ context.addService(new MyService("C", false));
+ return context;
+ }
+
+ public void testStopWithFailure() throws Exception {
+ stopOrder = "";
+
+ context.stop();
+
+ assertEquals("CBA", stopOrder);
+ }
+
+ private class MyService implements Service {
+
+ private String name;
+ private boolean fail;
+
+ private MyService(String name, boolean fail) {
+ this.name = name;
+ this.fail = fail;
+ }
+
+ public void start() throws Exception {
+ }
+
+ public void stop() throws Exception {
+ stopOrder = stopOrder + name;
+
+ if (fail) {
+ throw new IllegalArgumentException("Fail " + name);
+ }
+ }
+ }
+}
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextStopFailureTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextStopFailureTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java?rev=813351&r1=813350&r2=813351&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java Thu Sep 10 10:14:21 2009
@@ -50,21 +50,19 @@
context.stop();
- assertEquals(6, dummy1.getEvents().size());
- assertEquals(6, dummy2.getEvents().size());
+ assertEquals(5, dummy1.getEvents().size());
+ assertEquals(5, dummy2.getEvents().size());
- assertEquals("onServiceAdd", dummy1.getEvents().get(0));
- assertEquals("onServiceAdd", dummy2.getEvents().get(0));
- assertEquals("onContextStart", dummy1.getEvents().get(1));
- assertEquals("onContextStart", dummy2.getEvents().get(1));
- assertEquals("onComponentAdd", dummy1.getEvents().get(2));
- assertEquals("onComponentAdd", dummy2.getEvents().get(2));
- assertEquals("onEndpointAdd", dummy1.getEvents().get(3));
- assertEquals("onEndpointAdd", dummy2.getEvents().get(3));
- assertEquals("onComponentRemove", dummy1.getEvents().get(4));
- assertEquals("onComponentRemove", dummy2.getEvents().get(4));
- assertEquals("onContextStop", dummy1.getEvents().get(5));
- assertEquals("onContextStop", dummy2.getEvents().get(5));
+ assertEquals("onContextStart", dummy1.getEvents().get(0));
+ assertEquals("onContextStart", dummy2.getEvents().get(0));
+ assertEquals("onComponentAdd", dummy1.getEvents().get(1));
+ assertEquals("onComponentAdd", dummy2.getEvents().get(1));
+ assertEquals("onEndpointAdd", dummy1.getEvents().get(2));
+ assertEquals("onEndpointAdd", dummy2.getEvents().get(2));
+ assertEquals("onComponentRemove", dummy1.getEvents().get(3));
+ assertEquals("onComponentRemove", dummy2.getEvents().get(3));
+ assertEquals("onContextStop", dummy1.getEvents().get(4));
+ assertEquals("onContextStop", dummy2.getEvents().get(4));
}
}
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierServiceStoppingFailedEventTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierServiceStoppingFailedEventTest.java?rev=813351&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierServiceStoppingFailedEventTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierServiceStoppingFailedEventTest.java Thu Sep 10 10:14:21 2009
@@ -0,0 +1,112 @@
+/**
+ * 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;
+
+import java.util.ArrayList;
+import java.util.EventObject;
+import java.util.List;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Service;
+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.ServiceStoppingFailedEvent;
+import org.apache.camel.spi.EventNotifier;
+
+/**
+ * @version $Revision$
+ */
+public class EventNotifierServiceStoppingFailedEventTest extends ContextTestSupport {
+
+ private static List<EventObject> events = new ArrayList<EventObject>();
+ private static String stopOrder;
+
+ @Override
+ public void setUp() throws Exception {
+ events.clear();
+ super.setUp();
+ }
+
+ @Override
+ protected CamelContext createCamelContext() throws Exception {
+ CamelContext context = super.createCamelContext();
+ context.addService(new MyService("A", false));
+ context.addService(new MyService("B", true));
+ context.addService(new MyService("C", false));
+
+ context.getManagementStrategy().setEventNotifier(new EventNotifier() {
+ public void notify(EventObject event) throws Exception {
+ events.add(event);
+ }
+
+ public boolean isEnabled(EventObject event) {
+ return true;
+ }
+ });
+ return context;
+ }
+
+ public void testStopWithFailure() throws Exception {
+ stopOrder = "";
+
+ context.stop();
+
+ assertEquals("CBA", stopOrder);
+
+ assertEquals(5, events.size());
+
+ assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
+ assertIsInstanceOf(CamelContextStartedEvent.class, events.get(1));
+ assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(2));
+ ServiceStoppingFailedEvent event = assertIsInstanceOf(ServiceStoppingFailedEvent.class, events.get(3));
+ assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(4));
+
+ assertEquals("Fail B", event.getCause().getMessage());
+ assertEquals("Stopping service: B failed due to Fail B", event.toString());
+ }
+
+ private class MyService implements Service {
+
+ private String name;
+ private boolean fail;
+
+ private MyService(String name, boolean fail) {
+ this.name = name;
+ this.fail = fail;
+ }
+
+ public void start() throws Exception {
+ }
+
+ public void stop() throws Exception {
+ stopOrder = stopOrder + name;
+
+ if (fail) {
+ throw new IllegalArgumentException("Fail " + name);
+ }
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+ }
+
+}
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierServiceStoppingFailedEventTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierServiceStoppingFailedEventTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date