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 2012/04/11 10:47:25 UTC
svn commit: r1324642 - in /camel/branches/camel-2.9.x: ./
camel-core/src/main/java/org/apache/camel/model/
camel-core/src/main/java/org/apache/camel/processor/
camel-core/src/test/java/org/apache/camel/processor/
Author: davsclaus
Date: Wed Apr 11 08:47:24 2012
New Revision: 1324642
URL: http://svn.apache.org/viewvc?rev=1324642&view=rev
Log:
CAMEL-5126: Improved error message if invalid configuration of throttler EIP. CAMEL-5163: Fixed issue if throttler/delayer expression evalution threw exception, then error handler does not react.
Added:
camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/processor/ThrottlerInvalidConfiguredTest.java
- copied unchanged from r1324638, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ThrottlerInvalidConfiguredTest.java
camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/processor/ThrottlerNullEvalTest.java
- copied unchanged from r1324638, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ThrottlerNullEvalTest.java
Modified:
camel/branches/camel-2.9.x/ (props changed)
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/model/ExpressionNode.java
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/model/ThrottleDefinition.java
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/DelayProcessorSupport.java
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/Throttler.java
Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
Merged /camel/trunk:r1324638
Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/model/ExpressionNode.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/model/ExpressionNode.java?rev=1324642&r1=1324641&r2=1324642&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/model/ExpressionNode.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/model/ExpressionNode.java Wed Apr 11 08:47:24 2012
@@ -111,7 +111,7 @@ public class ExpressionNode extends Proc
@Override
protected void preCreateProcessor() {
Expression exp = expression;
- if (expression.getExpressionValue() != null) {
+ if (expression != null && expression.getExpressionValue() != null) {
exp = expression.getExpressionValue();
}
Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/model/ThrottleDefinition.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/model/ThrottleDefinition.java?rev=1324642&r1=1324641&r2=1324642&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/model/ThrottleDefinition.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/model/ThrottleDefinition.java Wed Apr 11 08:47:24 2012
@@ -87,7 +87,12 @@ public class ThrottleDefinition extends
// should be default 1000 millis
long period = getTimePeriodMillis() != null ? getTimePeriodMillis() : 1000L;
+
+ // max requests per period is mandatory
Expression maxRequestsExpression = createMaxRequestsPerPeriodExpression(routeContext);
+ if (maxRequestsExpression == null) {
+ throw new IllegalArgumentException("MaxRequestsPerPeriod expression must be provided on " + this);
+ }
Throttler answer = new Throttler(childProcessor, maxRequestsExpression, period, scheduled);
Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/DelayProcessorSupport.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/DelayProcessorSupport.java?rev=1324642&r1=1324641&r2=1324642&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/DelayProcessorSupport.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/DelayProcessorSupport.java Wed Apr 11 08:47:24 2012
@@ -90,11 +90,18 @@ public abstract class DelayProcessorSupp
}
// calculate delay and wait
- long delay = calculateDelay(exchange);
- if (delay <= 0) {
- // no delay then continue routing
- log.trace("No delay for exchangeId: {}", exchange.getExchangeId());
- return super.process(exchange, callback);
+ long delay;
+ try {
+ delay = calculateDelay(exchange);
+ if (delay <= 0) {
+ // no delay then continue routing
+ log.trace("No delay for exchangeId: {}", exchange.getExchangeId());
+ return super.process(exchange, callback);
+ }
+ } catch (Throwable e) {
+ exchange.setException(e);
+ callback.done(true);
+ return true;
}
if (!isAsyncDelayed() || exchange.isTransacted()) {
Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/Throttler.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/Throttler.java?rev=1324642&r1=1324641&r2=1324642&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/Throttler.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/Throttler.java Wed Apr 11 08:47:24 2012
@@ -21,6 +21,7 @@ import java.util.concurrent.ScheduledExe
import org.apache.camel.Exchange;
import org.apache.camel.Expression;
import org.apache.camel.Processor;
+import org.apache.camel.RuntimeExchangeException;
import org.apache.camel.Traceable;
import org.apache.camel.util.ObjectHelper;
@@ -36,7 +37,7 @@ import org.apache.camel.util.ObjectHelpe
* @version
*/
public class Throttler extends DelayProcessorSupport implements Traceable {
- private long maximumRequestsPerPeriod;
+ private volatile long maximumRequestsPerPeriod;
private Expression maxRequestsPerPeriodExpression;
private long timePeriodMillis = 1000;
private volatile TimeSlot slot;
@@ -99,7 +100,14 @@ public class Throttler extends DelayProc
// -----------------------------------------------------------------------
protected long calculateDelay(Exchange exchange) {
- Long longValue = maxRequestsPerPeriodExpression.evaluate(exchange, Long.class);
+ // evaluate as Object first to see if we get any result at all
+ Object result = maxRequestsPerPeriodExpression.evaluate(exchange, Object.class);
+ if (result == null) {
+ throw new RuntimeExchangeException("The max requests per period expression was evaluated as null: " + maxRequestsPerPeriodExpression, exchange);
+ }
+
+ // then must convert value to long
+ Long longValue = exchange.getContext().getTypeConverter().convertTo(Long.class, result);
if (longValue != null) {
// log if we changed max period after initial setting
if (maximumRequestsPerPeriod > 0 && longValue.longValue() != maximumRequestsPerPeriod) {