Author: davsclaus Date: Fri Jul 9 12:06:55 2010 New Revision: 962496 URL: http://svn.apache.org/viewvc?rev=962496&view=rev Log: CAMEL-2932: Added event for redelivery attempt. Renamed ExchangeFailureEvent to ExchangeFailedEvent which is a better name.
Added: camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailedEvent.java (contents, props changed) - copied, changed from r962466, camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailureEvent.java camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeRedeliveryEvent.java - copied, changed from r962466, camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeSentEvent.java camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierRedeliveryEventsTest.java - copied, changed from r962466, camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierFailureHandledEventsTest.java Removed: camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailureEvent.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NotifyBuilder.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/EventNotifierSupport.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/management/mbean/ManagedEventNotifierMBean.java camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java camel/trunk/camel-core/src/main/java/org/apache/camel/spi/EventFactory.java camel/trunk/camel-core/src/main/java/org/apache/camel/spi/EventNotifier.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 camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeSentTest.java camel/trunk/camel-core/src/test/java/org/apache/camel/management/MultipleEventNotifierEventsTest.java camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionEventBreakpointTest.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NotifyBuilder.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NotifyBuilder.java?rev=962496&r1=962495&r2=962496&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NotifyBuilder.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NotifyBuilder.java Fri Jul 9 12:06:55 2010 @@ -35,7 +35,7 @@ import org.apache.camel.component.mock.M import org.apache.camel.management.EventNotifierSupport; import org.apache.camel.management.event.ExchangeCompletedEvent; import org.apache.camel.management.event.ExchangeCreatedEvent; -import org.apache.camel.management.event.ExchangeFailureEvent; +import org.apache.camel.management.event.ExchangeFailedEvent; import org.apache.camel.spi.EventNotifier; import org.apache.camel.util.EndpointHelper; import org.apache.camel.util.ObjectHelper; @@ -288,7 +288,7 @@ public class NotifyBuilder { } @Override - public boolean onExchangeFailure(Exchange exchange) { + public boolean onExchangeFailed(Exchange exchange) { current++; return true; } @@ -363,7 +363,7 @@ public class NotifyBuilder { private int current; @Override - public boolean onExchangeFailure(Exchange exchange) { + public boolean onExchangeFailed(Exchange exchange) { current++; return true; } @@ -404,7 +404,7 @@ public class NotifyBuilder { } @Override - public boolean onExchangeFailure(Exchange exchange) { + public boolean onExchangeFailed(Exchange exchange) { current++; return true; } @@ -473,7 +473,7 @@ public class NotifyBuilder { private int current; @Override - public boolean onExchangeFailure(Exchange exchange) { + public boolean onExchangeFailed(Exchange exchange) { current++; return true; } @@ -528,7 +528,7 @@ public class NotifyBuilder { } @Override - public boolean onExchangeFailure(Exchange exchange) { + public boolean onExchangeFailed(Exchange exchange) { if (!received && !matches) { matches = predicate.matches(exchange); } @@ -597,7 +597,7 @@ public class NotifyBuilder { } @Override - public boolean onExchangeFailure(Exchange exchange) { + public boolean onExchangeFailed(Exchange exchange) { if (!received && matches) { matches = predicate.matches(exchange); } @@ -680,7 +680,7 @@ public class NotifyBuilder { } @Override - public boolean onExchangeFailure(Exchange exchange) { + public boolean onExchangeFailed(Exchange exchange) { if (!received) { sendToMock(exchange); } @@ -780,7 +780,7 @@ public class NotifyBuilder { } @Override - public boolean onExchangeFailure(Exchange exchange) { + public boolean onExchangeFailed(Exchange exchange) { if (!received) { sendToMock(exchange); } @@ -908,7 +908,7 @@ public class NotifyBuilder { } @Override - public boolean onExchangeFailure(Exchange exchange) { + public boolean onExchangeFailed(Exchange exchange) { if (!received) { matchBody(exchange); } @@ -1086,8 +1086,8 @@ public class NotifyBuilder { onExchangeCreated((ExchangeCreatedEvent) event); } else if (event instanceof ExchangeCompletedEvent) { onExchangeCompleted((ExchangeCompletedEvent) event); - } else if (event instanceof ExchangeFailureEvent) { - onExchangeFailure((ExchangeFailureEvent) event); + } else if (event instanceof ExchangeFailedEvent) { + onExchangeFailed((ExchangeFailedEvent) event); } // now compute whether we matched @@ -1110,9 +1110,9 @@ public class NotifyBuilder { } } - private void onExchangeFailure(ExchangeFailureEvent event) { + private void onExchangeFailed(ExchangeFailedEvent event) { for (EventPredicateHolder predicate : predicates) { - predicate.getPredicate().onExchangeFailure(event.getExchange()); + predicate.getPredicate().onExchangeFailed(event.getExchange()); } } @@ -1208,7 +1208,7 @@ public class NotifyBuilder { * @param exchange the exchange * @return <tt>true</tt> to allow continue evaluating, <tt>false</tt> to stop immediately */ - boolean onExchangeFailure(Exchange exchange); + boolean onExchangeFailed(Exchange exchange); } private abstract class EventPredicateSupport implements EventPredicate { @@ -1225,7 +1225,7 @@ public class NotifyBuilder { return onExchange(exchange); } - public boolean onExchangeFailure(Exchange exchange) { + public boolean onExchangeFailed(Exchange exchange) { return onExchange(exchange); } @@ -1308,9 +1308,9 @@ public class NotifyBuilder { return true; } - public boolean onExchangeFailure(Exchange exchange) { + public boolean onExchangeFailed(Exchange exchange) { for (EventPredicate predicate : predicates) { - if (!predicate.onExchangeFailure(exchange)) { + if (!predicate.onExchangeFailed(exchange)) { return false; } } 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=962496&r1=962495&r2=962496&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 Fri Jul 9 12:06:55 2010 @@ -31,8 +31,9 @@ import org.apache.camel.management.event import org.apache.camel.management.event.CamelContextStoppingEvent; import org.apache.camel.management.event.ExchangeCompletedEvent; import org.apache.camel.management.event.ExchangeCreatedEvent; -import org.apache.camel.management.event.ExchangeFailureEvent; +import org.apache.camel.management.event.ExchangeFailedEvent; import org.apache.camel.management.event.ExchangeFailureHandledEvent; +import org.apache.camel.management.event.ExchangeRedeliveryEvent; import org.apache.camel.management.event.ExchangeSentEvent; import org.apache.camel.management.event.RouteStartedEvent; import org.apache.camel.management.event.RouteStoppedEvent; @@ -95,14 +96,18 @@ public class DefaultEventFactory impleme return new ExchangeCompletedEvent(exchange); } - public EventObject createExchangeFailureEvent(Exchange exchange) { - return new ExchangeFailureEvent(exchange); + public EventObject createExchangeFailedEvent(Exchange exchange) { + return new ExchangeFailedEvent(exchange); } public EventObject createExchangeFailureHandledEvent(Exchange exchange, Processor failureHandler, boolean deadLetterChannel) { return new ExchangeFailureHandledEvent(exchange, failureHandler, deadLetterChannel); } + public EventObject createExchangeRedeliveryEvent(Exchange exchange, int attempt) { + return new ExchangeRedeliveryEvent(exchange, attempt); + } + public EventObject createExchangeSentEvent(Exchange exchange, Endpoint endpoint, long timeTaken) { return new ExchangeSentEvent(exchange, endpoint, timeTaken); } Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/EventNotifierSupport.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/EventNotifierSupport.java?rev=962496&r1=962495&r2=962496&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/management/EventNotifierSupport.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/EventNotifierSupport.java Fri Jul 9 12:06:55 2010 @@ -34,7 +34,8 @@ public abstract class EventNotifierSuppo private boolean ignoreExchangeEvents; private boolean ignoreExchangeCreatedEvent; private boolean ignoreExchangeCompletedEvent; - private boolean ignoreExchangeFailureEvents; + private boolean ignoreExchangeFailedEvents; + private boolean ignoreExchangeRedeliveryEvents; private boolean ignoreExchangeSentEvents; public boolean isIgnoreCamelContextEvents() { @@ -85,12 +86,20 @@ public abstract class EventNotifierSuppo this.ignoreExchangeCompletedEvent = ignoreExchangeCompletedEvent; } - public boolean isIgnoreExchangeFailureEvents() { - return ignoreExchangeFailureEvents; + public boolean isIgnoreExchangeFailedEvents() { + return ignoreExchangeFailedEvents; } - public void setIgnoreExchangeFailureEvents(boolean ignoreExchangeFailureEvents) { - this.ignoreExchangeFailureEvents = ignoreExchangeFailureEvents; + public void setIgnoreExchangeFailedEvents(boolean ignoreExchangeFailedEvents) { + this.ignoreExchangeFailedEvents = ignoreExchangeFailedEvents; + } + + public boolean isIgnoreExchangeRedeliveryEvents() { + return ignoreExchangeRedeliveryEvents; + } + + public void setIgnoreExchangeRedeliveryEvents(boolean ignoreExchangeRedeliveryEvents) { + this.ignoreExchangeRedeliveryEvents = ignoreExchangeRedeliveryEvents; } public boolean isIgnoreExchangeSentEvents() { Copied: camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailedEvent.java (from r962466, camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailureEvent.java) URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailedEvent.java?p2=camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailedEvent.java&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailureEvent.java&r1=962466&r2=962496&rev=962496&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailureEvent.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailedEvent.java Fri Jul 9 12:06:55 2010 @@ -21,10 +21,10 @@ import org.apache.camel.Exchange; /** * @version $Revision$ */ -public class ExchangeFailureEvent extends AbstractExchangeEvent { +public class ExchangeFailedEvent extends AbstractExchangeEvent { private static final long serialVersionUID = -8484326904627268101L; - public ExchangeFailureEvent(Exchange source) { + public ExchangeFailedEvent(Exchange source) { super(source); } Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailedEvent.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeFailedEvent.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Copied: camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeRedeliveryEvent.java (from r962466, camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeSentEvent.java) URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeRedeliveryEvent.java?p2=camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeRedeliveryEvent.java&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeSentEvent.java&r1=962466&r2=962496&rev=962496&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeSentEvent.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/event/ExchangeRedeliveryEvent.java Fri Jul 9 12:06:55 2010 @@ -16,35 +16,33 @@ */ package org.apache.camel.management.event; -import org.apache.camel.Endpoint; import org.apache.camel.Exchange; /** * @version $Revision$ */ -public class ExchangeSentEvent extends AbstractExchangeEvent { - private static final long serialVersionUID = -19248832613958123L; +public class ExchangeRedeliveryEvent extends AbstractExchangeEvent { + private static final long serialVersionUID = -19248832613958122L; - private final Endpoint endpoint; - private final long timeTaken; + private final int attempt; - public ExchangeSentEvent(Exchange source, Endpoint endpoint, long timeTaken) { + public ExchangeRedeliveryEvent(Exchange source, int attempt) { super(source); - this.endpoint = endpoint; - this.timeTaken = timeTaken; + this.attempt = attempt; } - public Endpoint getEndpoint() { - return endpoint; - } - - public long getTimeTaken() { - return timeTaken; + public int getAttempt() { + return attempt; } @Override public String toString() { - return getExchange().getExchangeId() + " exchange " + getExchange() + " sent to: " + endpoint.getEndpointUri() + " took: " + timeTaken + " ms."; + Exception cause = getExchange().getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class); + if (cause != null) { + return getExchange().getExchangeId() + " exchange redelivery: " + getExchange() + " attempt " + attempt + " cause " + cause; + } else { + return getExchange().getExchangeId() + " exchange redelivery: " + getExchange() + " attempt " + attempt; + } } } \ No newline at end of file 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=962496&r1=962495&r2=962496&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 Fri Jul 9 12:06:55 2010 @@ -18,7 +18,6 @@ package org.apache.camel.management.mbea import java.util.ArrayList; import java.util.List; - import javax.management.MBeanNotificationInfo; import javax.management.NotificationBroadcasterSupport; @@ -103,12 +102,20 @@ public class ManagedEventNotifier extend getEventNotifier().setIgnoreExchangeCompletedEvent(ignoreExchangeCompletedEvent); } - public boolean isIgnoreExchangeFailureEvents() { - return getEventNotifier().isIgnoreExchangeFailureEvents(); + public boolean isIgnoreExchangeFailedEvents() { + return getEventNotifier().isIgnoreExchangeFailedEvents(); } - public void setIgnoreExchangeFailureEvents(boolean ignoreExchangeFailureEvents) { - getEventNotifier().setIgnoreExchangeFailureEvents(ignoreExchangeFailureEvents); + public void setIgnoreExchangeFailedEvents(boolean ignoreExchangeFailedEvents) { + getEventNotifier().setIgnoreExchangeFailedEvents(ignoreExchangeFailedEvents); + } + + public boolean isIgnoreExchangeRedeliveryEvents() { + return getEventNotifier().isIgnoreExchangeRedeliveryEvents(); + } + + public void setIgnoreExchangeRedeliveryEvents(boolean ignoreExchangeRedeliveryEvents) { + getEventNotifier().setIgnoreExchangeRedeliveryEvents(ignoreExchangeRedeliveryEvents); } public boolean isIgnoreExchangeSentEvents() { @@ -123,8 +130,8 @@ public class ManagedEventNotifier extend // all the class names in the event package String[] names = {"CamelContextStartedEvent", "CamelContextStartingEvent", "CamelContextStartupFailureEvent" , "CamelContextStopFailureEvent", "CamelContextStoppedEvent", "CamelContextStoppingEvent" - , "ExchangeCompletedEvent", "ExchangeCreatedEvent", "ExchangeFailureEvent" - , "ExchangeFailureHandledEvent", "ExchangeSentEvent", "RouteStartedEvent" + , "ExchangeCompletedEvent", "ExchangeCreatedEvent", "ExchangeFailedEvent" + , "ExchangeFailureHandledEvent", "ExchangeRedeliveryEvents", "ExchangeSentEvent", "RouteStartedEvent" , "RouteStoppedEvent", "ServiceStartupFailureEvent", "ServiceStopFailureEvent"}; List<MBeanNotificationInfo> infos = new ArrayList<MBeanNotificationInfo>(); Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifierMBean.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifierMBean.java?rev=962496&r1=962495&r2=962496&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifierMBean.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEventNotifierMBean.java Fri Jul 9 12:06:55 2010 @@ -42,9 +42,13 @@ public interface ManagedEventNotifierMBe void setIgnoreExchangeCompletedEvent(boolean ignoreExchangeCompletedEvent); - boolean isIgnoreExchangeFailureEvents(); + boolean isIgnoreExchangeFailedEvents(); - void setIgnoreExchangeFailureEvents(boolean ignoreExchangeFailureEvents); + void setIgnoreExchangeFailedEvents(boolean ignoreExchangeFailedEvents); + + boolean isIgnoreExchangeRedeliveryEvents(); + + void setIgnoreExchangeRedeliveryEvents(boolean ignoreExchangeRedeliveryEvents); boolean isIgnoreExchangeSentEvents(); Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java?rev=962496&r1=962495&r2=962496&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java Fri Jul 9 12:06:55 2010 @@ -109,6 +109,9 @@ public abstract class RedeliveryErrorHan log.trace("Redelivering exchangeId: " + exchange.getExchangeId() + " -> " + outputAsync + " for Exchange: " + exchange); } + // emmit event we are doing redelivery + EventHelper.notifyExchangeRedelivery(exchange.getContext(), exchange, data.redeliveryCounter); + // process the exchange (also redelivery) boolean sync; if (data.redeliverFromSync) { @@ -278,6 +281,9 @@ public abstract class RedeliveryErrorHan // letting onRedeliver be executed deliverToOnRedeliveryProcessor(exchange, data); + + // emmit event we are doing redelivery + EventHelper.notifyExchangeRedelivery(exchange.getContext(), exchange, data.redeliveryCounter); } // process the exchange (also redelivery) 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=962496&r1=962495&r2=962496&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 Fri Jul 9 12:06:55 2010 @@ -53,7 +53,7 @@ public interface EventFactory { * Creates an {...@link EventObject} for Camel failing to start * * @param context camel context - * @param cause the cause exception + * @param cause the cause exception * @return the created event */ EventObject createCamelContextStartupFailureEvent(CamelContext context, Throwable cause); @@ -62,7 +62,7 @@ public interface EventFactory { * Creates an {...@link EventObject} for Camel failing to stop cleanly * * @param context camel context - * @param cause the cause exception + * @param cause the cause exception * @return the created event */ EventObject createCamelContextStopFailureEvent(CamelContext context, Throwable cause); @@ -88,7 +88,7 @@ public interface EventFactory { * * @param context camel context * @param service the service - * @param cause the cause exception + * @param cause the cause exception * @return the created event */ EventObject createServiceStartupFailureEvent(CamelContext context, Object service, Throwable cause); @@ -98,7 +98,7 @@ public interface EventFactory { * * @param context camel context * @param service the service - * @param cause the cause exception + * @param cause the cause exception * @return the created event */ EventObject createServiceStopFailureEvent(CamelContext context, Object service, Throwable cause); @@ -141,24 +141,33 @@ public interface EventFactory { * @param exchange the exchange * @return the created event */ - EventObject createExchangeFailureEvent(Exchange exchange); + EventObject createExchangeFailedEvent(Exchange exchange); /** * Creates an {...@link EventObject} when an {...@link org.apache.camel.Exchange} has failed * but was handled by the Camel error handlers such as an dead letter channel. * - * @param exchange the exchange - * @param failureHandler the failure handler such as moving the message to a dead letter queue + * @param exchange the exchange + * @param failureHandler the failure handler such as moving the message to a dead letter queue * @param deadLetterChannel whether it was a dead letter channel or not handling the failure * @return the created event */ EventObject createExchangeFailureHandledEvent(Exchange exchange, Processor failureHandler, boolean deadLetterChannel); /** - * Creates an {...@link EventObject} when an {...@link org.apache.camel.Exchange} has been sent to the endpoint. + * Creates an {...@link EventObject} when an {...@link org.apache.camel.Exchange} is about to be redelivered * * @param exchange the exchange - * @param endpoint the destination + * @param attempt the current redelivery attempt (starts from 1) + * @return the created event + */ + EventObject createExchangeRedeliveryEvent(Exchange exchange, int attempt); + + /** + * Creates an {...@link EventObject} when an {...@link org.apache.camel.Exchange} has completely been sent to the endpoint. + * + * @param exchange the exchange + * @param endpoint the destination * @param timeTaken time in millis taken * @return the created event */ Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/EventNotifier.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/EventNotifier.java?rev=962496&r1=962495&r2=962496&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/EventNotifier.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/EventNotifier.java Fri Jul 9 12:06:55 2010 @@ -68,9 +68,13 @@ public interface EventNotifier { void setIgnoreExchangeCompletedEvent(boolean ignoreExchangeCompletedEvent); - boolean isIgnoreExchangeFailureEvents(); + boolean isIgnoreExchangeFailedEvents(); - void setIgnoreExchangeFailureEvents(boolean ignoreExchangeFailureEvents); + void setIgnoreExchangeFailedEvents(boolean ignoreExchangeFailureEvents); + + boolean isIgnoreExchangeRedeliveryEvents(); + + void setIgnoreExchangeRedeliveryEvents(boolean ignoreExchangeRedeliveryEvents); boolean isIgnoreExchangeSentEvents(); 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=962496&r1=962495&r2=962496&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 Fri Jul 9 12:06:55 2010 @@ -325,7 +325,7 @@ public final class EventHelper { } for (EventNotifier notifier : notifiers) { - if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeFailureEvents()) { + if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeFailedEvents()) { continue; } @@ -333,7 +333,7 @@ public final class EventHelper { if (factory == null) { return; } - EventObject event = factory.createExchangeFailureEvent(exchange); + EventObject event = factory.createExchangeFailedEvent(exchange); if (event == null) { return; } @@ -349,7 +349,7 @@ public final class EventHelper { } for (EventNotifier notifier : notifiers) { - if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeFailureEvents()) { + if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeFailedEvents()) { continue; } @@ -365,6 +365,29 @@ public final class EventHelper { } } + public static void notifyExchangeRedelivery(CamelContext context, Exchange exchange, int attempt) { + List<EventNotifier> notifiers = context.getManagementStrategy().getEventNotifiers(); + if (notifiers == null || notifiers.isEmpty()) { + return; + } + + for (EventNotifier notifier : notifiers) { + if (notifier.isIgnoreExchangeEvents() || notifier.isIgnoreExchangeFailedEvents()) { + continue; + } + + EventFactory factory = context.getManagementStrategy().getEventFactory(); + if (factory == null) { + return; + } + EventObject event = factory.createExchangeRedeliveryEvent(exchange, attempt); + if (event == null) { + return; + } + doNotifyEvent(notifier, event); + } + } + public static void notifyExchangeSent(CamelContext context, Exchange exchange, Endpoint endpoint, long timeTaken) { List<EventNotifier> notifiers = context.getManagementStrategy().getEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { 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=962496&r1=962495&r2=962496&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 Fri Jul 9 12:06:55 2010 @@ -30,7 +30,7 @@ import org.apache.camel.management.event import org.apache.camel.management.event.CamelContextStoppingEvent; import org.apache.camel.management.event.ExchangeCompletedEvent; import org.apache.camel.management.event.ExchangeCreatedEvent; -import org.apache.camel.management.event.ExchangeFailureEvent; +import org.apache.camel.management.event.ExchangeFailedEvent; import org.apache.camel.management.event.ExchangeSentEvent; import org.apache.camel.management.event.RouteStartedEvent; import org.apache.camel.management.event.RouteStoppedEvent; @@ -120,7 +120,7 @@ public class EventNotifierEventsTest ext assertIsInstanceOf(RouteStartedEvent.class, events.get(2)); assertIsInstanceOf(CamelContextStartedEvent.class, events.get(3)); assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(4)); - assertIsInstanceOf(ExchangeFailureEvent.class, events.get(5)); + assertIsInstanceOf(ExchangeFailedEvent.class, events.get(5)); // this is the sent using the produce template to start the test assertIsInstanceOf(ExchangeSentEvent.class, events.get(6)); Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeSentTest.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeSentTest.java?rev=962496&r1=962495&r2=962496&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeSentTest.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierExchangeSentTest.java Fri Jul 9 12:06:55 2010 @@ -64,7 +64,8 @@ public class EventNotifierExchangeSentTe setIgnoreRouteEvents(true); setIgnoreExchangeCreatedEvent(true); setIgnoreExchangeCompletedEvent(true); - setIgnoreExchangeFailureEvents(true); + setIgnoreExchangeFailedEvents(true); + setIgnoreExchangeRedeliveryEvents(true); } @Override Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierRedeliveryEventsTest.java (from r962466, camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierFailureHandledEventsTest.java) URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierRedeliveryEventsTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierRedeliveryEventsTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierFailureHandledEventsTest.java&r1=962466&r2=962496&rev=962496&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierFailureHandledEventsTest.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierRedeliveryEventsTest.java Fri Jul 9 12:06:55 2010 @@ -24,19 +24,16 @@ 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.CamelContextStartedEvent; -import org.apache.camel.management.event.CamelContextStartingEvent; import org.apache.camel.management.event.ExchangeCompletedEvent; import org.apache.camel.management.event.ExchangeCreatedEvent; import org.apache.camel.management.event.ExchangeFailureHandledEvent; +import org.apache.camel.management.event.ExchangeRedeliveryEvent; import org.apache.camel.management.event.ExchangeSentEvent; -import org.apache.camel.management.event.RouteStartedEvent; -import org.apache.camel.processor.SendProcessor; /** * @version $Revision$ */ -public class EventNotifierFailureHandledEventsTest extends ContextTestSupport { +public class EventNotifierRedeliveryEventsTest extends ContextTestSupport { private static List<EventObject> events = new ArrayList<EventObject>(); @@ -70,6 +67,9 @@ public class EventNotifierFailureHandled @Override protected void doStart() throws Exception { + setIgnoreCamelContextEvents(true); + setIgnoreRouteEvents(true); + setIgnoreServiceEvents(true); } @Override @@ -79,11 +79,11 @@ public class EventNotifierFailureHandled return context; } - public void testExchangeDeadLetterChannel() throws Exception { + public void testExchangeRedeliverySync() throws Exception { context.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception { - errorHandler(deadLetterChannel("mock:dead")); + errorHandler(deadLetterChannel("mock:dead").maximumRedeliveries(4)); from("direct:start").throwException(new IllegalArgumentException("Damn")); } @@ -94,29 +94,28 @@ public class EventNotifierFailureHandled template.sendBody("direct:start", "Hello World"); assertMockEndpointsSatisfied(); - assertEquals(8, events.size()); - assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0)); - assertIsInstanceOf(RouteStartedEvent.class, events.get(1)); - assertIsInstanceOf(CamelContextStartedEvent.class, events.get(2)); - assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(3)); - - ExchangeFailureHandledEvent e = assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(4)); - assertEquals("should be DLC", true, e.isDeadLetterChannel()); - SendProcessor send = assertIsInstanceOf(SendProcessor.class, e.getFailureHandler()); - assertEquals("mock://dead", send.getDestination().getEndpointUri()); - - // dead letter channel will mark the exchange as completed - assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(5)); - // and the sent will be logged after they are complete sending as it record the time taken as well - assertIsInstanceOf(ExchangeSentEvent.class, events.get(6)); + assertEquals(9, events.size()); + + assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(0)); + ExchangeRedeliveryEvent e = assertIsInstanceOf(ExchangeRedeliveryEvent.class, events.get(1)); + assertEquals(1, e.getAttempt()); + e = assertIsInstanceOf(ExchangeRedeliveryEvent.class, events.get(2)); + assertEquals(2, e.getAttempt()); + e = assertIsInstanceOf(ExchangeRedeliveryEvent.class, events.get(3)); + assertEquals(3, e.getAttempt()); + e = assertIsInstanceOf(ExchangeRedeliveryEvent.class, events.get(4)); + assertEquals(4, e.getAttempt()); + assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(5)); + assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(6)); assertIsInstanceOf(ExchangeSentEvent.class, events.get(7)); + assertIsInstanceOf(ExchangeSentEvent.class, events.get(8)); } - public void testExchangeOnException() throws Exception { + public void testExchangeRedeliveryAsync() throws Exception { context.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception { - onException(IllegalArgumentException.class).handled(true).to("mock:dead"); + errorHandler(deadLetterChannel("mock:dead").maximumRedeliveries(4).asyncDelayedRedelivery().redeliveryDelay(25)); from("direct:start").throwException(new IllegalArgumentException("Damn")); } @@ -127,19 +126,21 @@ public class EventNotifierFailureHandled template.sendBody("direct:start", "Hello World"); assertMockEndpointsSatisfied(); - assertEquals(8, events.size()); - assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0)); - assertIsInstanceOf(RouteStartedEvent.class, events.get(1)); - assertIsInstanceOf(CamelContextStartedEvent.class, events.get(2)); - assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(3)); - assertIsInstanceOf(ExchangeSentEvent.class, events.get(4)); - - ExchangeFailureHandledEvent e = assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(5)); - assertEquals("should NOT be DLC", false, e.isDeadLetterChannel()); + assertEquals(9, events.size()); - // dead letter channel will mark the exchange as completed + assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(0)); + ExchangeRedeliveryEvent e = assertIsInstanceOf(ExchangeRedeliveryEvent.class, events.get(1)); + assertEquals(1, e.getAttempt()); + e = assertIsInstanceOf(ExchangeRedeliveryEvent.class, events.get(2)); + assertEquals(2, e.getAttempt()); + e = assertIsInstanceOf(ExchangeRedeliveryEvent.class, events.get(3)); + assertEquals(3, e.getAttempt()); + e = assertIsInstanceOf(ExchangeRedeliveryEvent.class, events.get(4)); + assertEquals(4, e.getAttempt()); + assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(5)); assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(6)); assertIsInstanceOf(ExchangeSentEvent.class, events.get(7)); + assertIsInstanceOf(ExchangeSentEvent.class, events.get(8)); } } \ No newline at end of file Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/MultipleEventNotifierEventsTest.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/MultipleEventNotifierEventsTest.java?rev=962496&r1=962495&r2=962496&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/management/MultipleEventNotifierEventsTest.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/MultipleEventNotifierEventsTest.java Fri Jul 9 12:06:55 2010 @@ -30,7 +30,7 @@ import org.apache.camel.management.event import org.apache.camel.management.event.CamelContextStoppingEvent; import org.apache.camel.management.event.ExchangeCompletedEvent; import org.apache.camel.management.event.ExchangeCreatedEvent; -import org.apache.camel.management.event.ExchangeFailureEvent; +import org.apache.camel.management.event.ExchangeFailedEvent; import org.apache.camel.management.event.ExchangeSentEvent; import org.apache.camel.management.event.RouteStartedEvent; import org.apache.camel.management.event.RouteStoppedEvent; @@ -149,14 +149,14 @@ public class MultipleEventNotifierEvents assertIsInstanceOf(RouteStartedEvent.class, events.get(2)); assertIsInstanceOf(CamelContextStartedEvent.class, events.get(3)); assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(4)); - assertIsInstanceOf(ExchangeFailureEvent.class, events.get(5)); + assertIsInstanceOf(ExchangeFailedEvent.class, events.get(5)); assertIsInstanceOf(ExchangeSentEvent.class, events.get(6)); assertEquals(3, events2.size()); context.stop(); assertIsInstanceOf(ExchangeCreatedEvent.class, events2.get(0)); - assertIsInstanceOf(ExchangeFailureEvent.class, events2.get(1)); + assertIsInstanceOf(ExchangeFailedEvent.class, events2.get(1)); assertIsInstanceOf(ExchangeSentEvent.class, events2.get(2)); assertEquals(11, events.size()); Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionEventBreakpointTest.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionEventBreakpointTest.java?rev=962496&r1=962495&r2=962496&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionEventBreakpointTest.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionEventBreakpointTest.java Fri Jul 9 12:06:55 2010 @@ -27,7 +27,7 @@ import org.apache.camel.impl.BreakpointS import org.apache.camel.impl.ConditionSupport; import org.apache.camel.impl.DefaultDebugger; import org.apache.camel.management.event.AbstractExchangeEvent; -import org.apache.camel.management.event.ExchangeFailureEvent; +import org.apache.camel.management.event.ExchangeFailedEvent; import org.apache.camel.model.ProcessorDefinition; import org.apache.camel.spi.Breakpoint; import org.apache.camel.spi.Condition; @@ -55,7 +55,7 @@ public class DebugExceptionEventBreakpoi exceptionCondition = new ConditionSupport() { public boolean matchEvent(Exchange exchange, EventObject event) { - return event instanceof ExchangeFailureEvent; + return event instanceof ExchangeFailedEvent; } }; }