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 2011/01/19 13:01:11 UTC

svn commit: r1060777 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/component/bean/ camel-core/src/main/java/org/apache/camel/processor/ examples/camel-example-management/src/main/resources/META-INF/spring/

Author: davsclaus
Date: Wed Jan 19 12:01:11 2011
New Revision: 1060777

URL: http://svn.apache.org/viewvc?rev=1060777&view=rev
Log:
CAMEL-3560: Added fallback in UoWProcessor to catch unhandled exceptions and ensure UoW is done. This prevents in-flight registry to be tracked propertly, ensure graceful shutdown doesnt hit timeout due 1 message stuck.

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/UnitOfWorkProcessor.java
    camel/trunk/examples/camel-example-management/src/main/resources/META-INF/spring/camel-context.xml

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java?rev=1060777&r1=1060776&r2=1060777&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java Wed Jan 19 12:01:11 2011
@@ -78,8 +78,16 @@ public class BeanProcessor extends Servi
         // do we have an explicit method name we always should invoke
         boolean isExplicitMethod = ObjectHelper.isNotEmpty(method);
 
-        Object bean = beanHolder.getBean();
-        BeanInfo beanInfo = beanHolder.getBeanInfo();
+        Object bean;
+        BeanInfo beanInfo;
+        try {
+            bean = beanHolder.getBean();
+            beanInfo = beanHolder.getBeanInfo();
+        } catch (Throwable e) {
+            exchange.setException(e);
+            callback.done(true);
+            return true;
+        }
 
         // do we have a custom adapter for this POJO to a Processor
         // should not be invoked if an explicit method has been set

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/UnitOfWorkProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/UnitOfWorkProcessor.java?rev=1060777&r1=1060776&r2=1060777&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/UnitOfWorkProcessor.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/UnitOfWorkProcessor.java Wed Jan 19 12:01:11 2011
@@ -111,14 +111,19 @@ public final class UnitOfWorkProcessor e
                     }
                 });
             } catch (Throwable e) {
-                if (LOG.isDebugEnabled()) {
-                    LOG.debug("Caught unhandled exception while processing ExchangeId: " + exchange.getExchangeId(), e);
-                }
+                LOG.warn("Caught unhandled exception while processing ExchangeId: " + exchange.getExchangeId(), e);
+
                 // fallback and catch any exceptions the process may not have caught
                 // we must ensure to done the UoW in all cases and issue done on the callback
-                doneUow(uow, exchange);
                 exchange.setException(e);
-                callback.done(true);
+
+                // Order here matters. We need to complete the callbacks
+                // since they will likely update the exchange with some final results.
+                try {
+                    callback.done(true);
+                } finally {
+                    doneUow(uow, exchange);
+                }
                 return true;
             }
         } else {

Modified: camel/trunk/examples/camel-example-management/src/main/resources/META-INF/spring/camel-context.xml
URL: http://svn.apache.org/viewvc/camel/trunk/examples/camel-example-management/src/main/resources/META-INF/spring/camel-context.xml?rev=1060777&r1=1060776&r2=1060777&view=diff
==============================================================================
--- camel/trunk/examples/camel-example-management/src/main/resources/META-INF/spring/camel-context.xml (original)
+++ camel/trunk/examples/camel-example-management/src/main/resources/META-INF/spring/camel-context.xml Wed Jan 19 12:01:11 2011
@@ -24,11 +24,11 @@
             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
 
-    <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
+    <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent" depends-on="camel">
         <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
     </bean>
 
-    <bean id="stock" class="org.apache.camel.example.management.StockService">
+    <bean id="stock" class="org.apache.camel.example.management.StockService" depends-on="camel">
         <property name="symbols" ref="symbols"/>
     </bean>
 
@@ -38,18 +38,6 @@
         <value>JAVA</value>
     </u:list>
 
-    <bean id="dlc" class="org.apache.camel.builder.DeadLetterChannelBuilder">
-        <property name="deadLetterUri" value="activemq:queue:dead"/>
-        <property name="redeliveryPolicy" ref="redeliveyPolicy"/>
-    </bean>
-
-    <bean id="redeliveyPolicy" class="org.apache.camel.processor.RedeliveryPolicy">
-        <property name="maximumRedeliveries" value="5"/>
-        <property name="backOffMultiplier" value="2.0"/>
-        <property name="useExponentialBackOff" value="true"/>
-        <property name="maximumRedeliveryDelay" value="30000"/>
-    </bean>
-
     <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
         <!-- Default JMX connector url: "service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi/camel" -->
         <jmxAgent id="agent" createConnector="true"/>
@@ -70,7 +58,7 @@
             </split>
         </route>
 
-        <route errorHandlerRef="dlc">
+        <route>
             <from uri="activemq:queue:stock"/>
             <delay><constant>100</constant></delay>
             <bean ref="stock" method="transform"/>