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/10/01 15:16:12 UTC
svn commit: r1003527 - in /camel/trunk/camel-core/src:
main/java/org/apache/camel/ main/java/org/apache/camel/management/
main/java/org/apache/camel/util/ test/java/org/apache/camel/management/
Author: davsclaus
Date: Fri Oct 1 13:16:11 2010
New Revision: 1003527
URL: http://svn.apache.org/viewvc?rev=1003527&view=rev
Log:
CAMEL-3187: Fixed PublishEventNotifier to not emit events during events.
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/management/PublishEventNotifierToRouteTest.java
- copied, changed from r1003501, camel/trunk/camel-core/src/test/java/org/apache/camel/management/PublishEventNotifierTest.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
camel/trunk/camel-core/src/main/java/org/apache/camel/management/PublishEventNotifier.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/PublishEventNotifierTest.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java?rev=1003527&r1=1003526&r2=1003527&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java Fri Oct 1 13:16:11 2010
@@ -135,6 +135,8 @@ public interface Exchange {
String MULTICAST_INDEX = "CamelMulticastIndex";
String MULTICAST_COMPLETE = "CamelMulticastComplete";
+ String NOTIFY_EVENT = "CamelNotifyEvent";
+
String ON_COMPLETION = "CamelOnCompletion";
String REDELIVERED = "CamelRedelivered";
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/PublishEventNotifier.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/PublishEventNotifier.java?rev=1003527&r1=1003526&r2=1003527&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/PublishEventNotifier.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/PublishEventNotifier.java Fri Oct 1 13:16:11 2010
@@ -29,6 +29,10 @@ import org.apache.camel.util.ServiceHelp
/**
* A {@link org.apache.camel.spi.EventNotifier} which publishes the {@link EventObject} to some
* {@link org.apache.camel.Endpoint}.
+ * <p/>
+ * This notifier is only enabled when {@link CamelContext} is started. This avoids problems when
+ * sending notifications during start/shutdown of {@link CamelContext} which causes problems by
+ * sending those events to Camel routes by this notifier.
*
* @version $Revision$
*/
@@ -40,10 +44,35 @@ public class PublishEventNotifier extend
private Producer producer;
public void notify(EventObject event) throws Exception {
+ // only notify when we are started
+ if (!isStarted()) {
+ if (log.isDebugEnabled()) {
+ log.debug("Cannot publish event as notifier is not started: " + event);
+ }
+ return;
+ }
+
+ // only notify when camel context is running
+ if (!camelContext.getStatus().isStarted()) {
+ if (log.isDebugEnabled()) {
+ log.debug("Cannot publish event as CamelContext is not started: " + event);
+ }
+ return;
+ }
+
Exchange exchange = producer.createExchange();
exchange.getIn().setBody(event);
- producer.process(exchange);
+ // make sure we don't send out events for this as well
+ // mark exchange as being published to event, to prevent creating new events
+ // for this as well (causing a endless flood of events)
+ exchange.setProperty(Exchange.NOTIFY_EVENT, Boolean.TRUE);
+ try {
+ producer.process(exchange);
+ } finally {
+ // and remove it when its done
+ exchange.removeProperty(Exchange.NOTIFY_EVENT);
+ }
}
public boolean isEnabled(EventObject event) {
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=1003527&r1=1003526&r2=1003527&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 Oct 1 13:16:11 2010
@@ -273,6 +273,11 @@ public final class EventHelper {
}
public static void notifyExchangeCreated(CamelContext context, Exchange exchange) {
+ if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) {
+ // do not generate events for an notify event
+ return;
+ }
+
List<EventNotifier> notifiers = context.getManagementStrategy().getEventNotifiers();
if (notifiers == null || notifiers.isEmpty()) {
return;
@@ -296,6 +301,11 @@ public final class EventHelper {
}
public static void notifyExchangeDone(CamelContext context, Exchange exchange) {
+ if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) {
+ // do not generate events for an notify event
+ return;
+ }
+
List<EventNotifier> notifiers = context.getManagementStrategy().getEventNotifiers();
if (notifiers == null || notifiers.isEmpty()) {
return;
@@ -319,6 +329,11 @@ public final class EventHelper {
}
public static void notifyExchangeFailed(CamelContext context, Exchange exchange) {
+ if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) {
+ // do not generate events for an notify event
+ return;
+ }
+
List<EventNotifier> notifiers = context.getManagementStrategy().getEventNotifiers();
if (notifiers == null || notifiers.isEmpty()) {
return;
@@ -343,6 +358,11 @@ public final class EventHelper {
public static void notifyExchangeFailureHandled(CamelContext context, Exchange exchange, Processor failureHandler,
boolean deadLetterChannel) {
+ if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) {
+ // do not generate events for an notify event
+ return;
+ }
+
List<EventNotifier> notifiers = context.getManagementStrategy().getEventNotifiers();
if (notifiers == null || notifiers.isEmpty()) {
return;
@@ -366,6 +386,11 @@ public final class EventHelper {
}
public static void notifyExchangeRedelivery(CamelContext context, Exchange exchange, int attempt) {
+ if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) {
+ // do not generate events for an notify event
+ return;
+ }
+
List<EventNotifier> notifiers = context.getManagementStrategy().getEventNotifiers();
if (notifiers == null || notifiers.isEmpty()) {
return;
@@ -389,6 +414,11 @@ public final class EventHelper {
}
public static void notifyExchangeSent(CamelContext context, Exchange exchange, Endpoint endpoint, long timeTaken) {
+ if (exchange.getProperty(Exchange.NOTIFY_EVENT, false, Boolean.class)) {
+ // do not generate events for an notify event
+ return;
+ }
+
List<EventNotifier> notifiers = context.getManagementStrategy().getEventNotifiers();
if (notifiers == null || notifiers.isEmpty()) {
return;
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/management/PublishEventNotifierTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/PublishEventNotifierTest.java?rev=1003527&r1=1003526&r2=1003527&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/PublishEventNotifierTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/PublishEventNotifierTest.java Fri Oct 1 13:16:11 2010
@@ -46,7 +46,7 @@ public class PublishEventNotifierTest ex
public void testExchangeDone() throws Exception {
getMockEndpoint("mock:result").expectedMessageCount(1);
- getMockEndpoint("mock:event").expectedMessageCount(9);
+ getMockEndpoint("mock:event").expectedMessageCount(6);
template.sendBody("direct:start", "Hello World");
@@ -54,7 +54,7 @@ public class PublishEventNotifierTest ex
}
public void testExchangeFailed() throws Exception {
- getMockEndpoint("mock:event").expectedMessageCount(7);
+ getMockEndpoint("mock:event").expectedMessageCount(4);
try {
template.sendBody("direct:fail", "Hello World");
Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/management/PublishEventNotifierToRouteTest.java (from r1003501, camel/trunk/camel-core/src/test/java/org/apache/camel/management/PublishEventNotifierTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/PublishEventNotifierToRouteTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/management/PublishEventNotifierToRouteTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/management/PublishEventNotifierTest.java&r1=1003501&r2=1003527&rev=1003527&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/management/PublishEventNotifierTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/PublishEventNotifierToRouteTest.java Fri Oct 1 13:16:11 2010
@@ -24,7 +24,7 @@ import org.apache.camel.impl.DefaultCame
/**
* @version $Revision$
*/
-public class PublishEventNotifierTest extends ContextTestSupport {
+public class PublishEventNotifierToRouteTest extends ContextTestSupport {
@Override
protected boolean useJmx() {
@@ -37,7 +37,7 @@ public class PublishEventNotifierTest ex
PublishEventNotifier notifier = new PublishEventNotifier();
notifier.setCamelContext(context);
- notifier.setEndpointUri("mock:event");
+ notifier.setEndpointUri("seda:event");
context.getManagementStrategy().addEventNotifier(notifier);
@@ -46,7 +46,7 @@ public class PublishEventNotifierTest ex
public void testExchangeDone() throws Exception {
getMockEndpoint("mock:result").expectedMessageCount(1);
- getMockEndpoint("mock:event").expectedMessageCount(9);
+ getMockEndpoint("mock:event").expectedMinimumMessageCount(6);
template.sendBody("direct:start", "Hello World");
@@ -54,7 +54,7 @@ public class PublishEventNotifierTest ex
}
public void testExchangeFailed() throws Exception {
- getMockEndpoint("mock:event").expectedMessageCount(7);
+ getMockEndpoint("mock:event").expectedMessageCount(4);
try {
template.sendBody("direct:fail", "Hello World");
@@ -75,6 +75,8 @@ public class PublishEventNotifierTest ex
from("direct:start").to("log:foo").to("mock:result");
from("direct:fail").throwException(new IllegalArgumentException("Damn"));
+
+ from("seda:event").log("Event ${body}").to("mock:event");
}
};
}