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"/>