Author: davsclaus
Date: Wed May  4 09:46:32 2011
New Revision: 1099382

URL: http://svn.apache.org/viewvc?rev=1099382&view=rev
Log:
Catching all throwables from timer task to be sure the jvm keep triggering in 
case some uncaught exceptions would have been thrown and cause the thread to die

Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/component/timer/TimerConsumer.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/timer/TimerConsumer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/timer/TimerConsumer.java?rev=1099382&r1=1099381&r2=1099382&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/timer/TimerConsumer.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/timer/TimerConsumer.java
 Wed May  4 09:46:32 2011
@@ -50,15 +50,20 @@ public class TimerConsumer extends Defau
 
             @Override
             public void run() {
-                long count = counter.incrementAndGet();
+                try {
+                    long count = counter.incrementAndGet();
 
-                boolean fire = endpoint.getRepeatCount() <= 0 || count <= 
endpoint.getRepeatCount();
-                if (fire) {
-                    sendTimerExchange(count);
-                } else {
-                    // no need to fire anymore as we exceeded repeat count
-                    LOG.debug("Cancelling {} timer as repeat count limit 
reached after {} counts.", endpoint.getTimerName(), endpoint.getRepeatCount());
-                    cancel();
+                    boolean fire = endpoint.getRepeatCount() <= 0 || count <= 
endpoint.getRepeatCount();
+                    if (fire) {
+                        sendTimerExchange(count);
+                    } else {
+                        // no need to fire anymore as we exceeded repeat count
+                        LOG.debug("Cancelling {} timer as repeat count limit 
reached after {} counts.", endpoint.getTimerName(), endpoint.getRepeatCount());
+                        cancel();
+                    }
+                } catch (Throwable e) {
+                    // catch all to avoid the JVM closing the thread and not 
firing again
+                    LOG.warn("Error processing exchange. This exception will 
be ignored, to let the timer be able to trigger again.", e);
                 }
             }
         };


Reply via email to