Author: davsclaus
Date: Sat Feb 12 12:04:33 2011
New Revision: 1070059
URL: http://svn.apache.org/viewvc?rev=1070059&view=rev
Log:
CAMEL-3658: redelivery policy supports property placeholders.
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentOnExceptionTest.java
- copied, changed from r1070041,
camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentRefTest.java
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.java
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.xml
- copied, changed from r1070041,
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentRefTest.xml
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java
camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/cheese.properties
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java?rev=1070059&r1=1070058&r2=1070059&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
Sat Feb 12 12:04:33 2011
@@ -339,6 +339,17 @@ public class OnExceptionDefinition exten
}
/**
+ * Sets the back off multiplier (supports property placeholders)
+ *
+ * @param backOffMultiplier the back off multiplier
+ * @return the builder
+ */
+ public OnExceptionDefinition backOffMultiplier(String backOffMultiplier) {
+ getOrCreateRedeliveryPolicy().backOffMultiplier(backOffMultiplier);
+ return this;
+ }
+
+ /**
* Sets the collision avoidance factor
*
* @param collisionAvoidanceFactor the factor
@@ -350,6 +361,17 @@ public class OnExceptionDefinition exten
}
/**
+ * Sets the collision avoidance factor (supports property placeholders)
+ *
+ * @param collisionAvoidanceFactor the factor
+ * @return the builder
+ */
+ public OnExceptionDefinition collisionAvoidanceFactor(String
collisionAvoidanceFactor) {
+
getOrCreateRedeliveryPolicy().collisionAvoidanceFactor(collisionAvoidanceFactor);
+ return this;
+ }
+
+ /**
* Sets the collision avoidance percentage
*
* @param collisionAvoidancePercent the percentage
@@ -372,13 +394,24 @@ public class OnExceptionDefinition exten
}
/**
+ * Sets the initial redelivery delay (supports property placeholders)
+ *
+ * @param delay delay in millis
+ * @return the builder
+ */
+ public OnExceptionDefinition redeliveryDelay(String delay) {
+ getOrCreateRedeliveryPolicy().redeliveryDelay(delay);
+ return this;
+ }
+
+ /**
* Allow synchronous delayed redelivery.
*
* @see
org.apache.camel.processor.RedeliveryPolicy#setAsyncDelayedRedelivery(boolean)
* @return the builder
*/
public OnExceptionDefinition asyncDelayedRedelivery() {
- getOrCreateRedeliveryPolicy().setAsyncDelayedRedelivery(true);
+ getOrCreateRedeliveryPolicy().asyncDelayedRedelivery();
return this;
}
@@ -408,7 +441,15 @@ public class OnExceptionDefinition exten
* Sets whether to log stacktrace for failed messages.
*/
public OnExceptionDefinition logStackTrace(boolean logStackTrace) {
- getOrCreateRedeliveryPolicy().setLogStackTrace(logStackTrace);
+ getOrCreateRedeliveryPolicy().logStackTrace(logStackTrace);
+ return this;
+ }
+
+ /**
+ * Sets whether to log stacktrace for failed messages (supports property
placeholders)
+ */
+ public OnExceptionDefinition logStackTrace(String logStackTrace) {
+ getOrCreateRedeliveryPolicy().logStackTrace(logStackTrace);
return this;
}
@@ -416,7 +457,15 @@ public class OnExceptionDefinition exten
* Sets whether to log stacktrace for failed redelivery attempts
*/
public OnExceptionDefinition logRetryStackTrace(boolean
logRetryStackTrace) {
-
getOrCreateRedeliveryPolicy().setLogRetryStackTrace(logRetryStackTrace);
+ getOrCreateRedeliveryPolicy().logRetryStackTrace(logRetryStackTrace);
+ return this;
+ }
+
+ /**
+ * Sets whether to log stacktrace for failed redelivery attempts (supports
property placeholders)
+ */
+ public OnExceptionDefinition logRetryStackTrace(String logRetryStackTrace)
{
+ getOrCreateRedeliveryPolicy().logRetryStackTrace(logRetryStackTrace);
return this;
}
@@ -424,7 +473,15 @@ public class OnExceptionDefinition exten
* Sets whether to log errors even if its handled
*/
public OnExceptionDefinition logHandled(boolean logHandled) {
- getOrCreateRedeliveryPolicy().setLogHandled(logHandled);
+ getOrCreateRedeliveryPolicy().logHandled(logHandled);
+ return this;
+ }
+
+ /**
+ * Sets whether to log errors even if its handled (supports property
placeholders)
+ */
+ public OnExceptionDefinition logHandled(String logHandled) {
+ getOrCreateRedeliveryPolicy().logHandled(logHandled);
return this;
}
@@ -432,7 +489,15 @@ public class OnExceptionDefinition exten
* Sets whether to log errors even if its continued
*/
public OnExceptionDefinition logContinued(boolean logContinued) {
- getOrCreateRedeliveryPolicy().setLogContinued(logContinued);
+ getOrCreateRedeliveryPolicy().logContinued(logContinued);
+ return this;
+ }
+
+ /**
+ * Sets whether to log errors even if its continued (supports property
placeholders)
+ */
+ public OnExceptionDefinition logContinued(String logContinued) {
+ getOrCreateRedeliveryPolicy().logContinued(logContinued);
return this;
}
@@ -440,7 +505,15 @@ public class OnExceptionDefinition exten
* Sets whether to log retry attempts
*/
public OnExceptionDefinition logRetryAttempted(boolean logRetryAttempted) {
- getOrCreateRedeliveryPolicy().setLogRetryAttempted(logRetryAttempted);
+ getOrCreateRedeliveryPolicy().logRetryAttempted(logRetryAttempted);
+ return this;
+ }
+
+ /**
+ * Sets whether to log retry attempts (supports property placeholders)
+ */
+ public OnExceptionDefinition logRetryAttempted(String logRetryAttempted) {
+ getOrCreateRedeliveryPolicy().logRetryAttempted(logRetryAttempted);
return this;
}
@@ -448,7 +521,15 @@ public class OnExceptionDefinition exten
* Sets whether to log exhausted exceptions
*/
public OnExceptionDefinition logExhausted(boolean logExhausted) {
- getOrCreateRedeliveryPolicy().setLogExhausted(logExhausted);
+ getOrCreateRedeliveryPolicy().logExhausted(logExhausted);
+ return this;
+ }
+
+ /**
+ * Sets whether to log exhausted exceptions (supports property
placeholders)
+ */
+ public OnExceptionDefinition logExhausted(String logExhausted) {
+ getOrCreateRedeliveryPolicy().logExhausted(logExhausted);
return this;
}
@@ -469,6 +550,22 @@ public class OnExceptionDefinition exten
}
/**
+ * Sets the maximum redeliveries (supports property placeholders)
+ * <ul>
+ * <li>5 = default value</li>
+ * <li>0 = no redeliveries</li>
+ * <li>-1 = redeliver forever</li>
+ * </ul>
+ *
+ * @param maximumRedeliveries the value
+ * @return the builder
+ */
+ public OnExceptionDefinition maximumRedeliveries(String
maximumRedeliveries) {
+ getOrCreateRedeliveryPolicy().maximumRedeliveries(maximumRedeliveries);
+ return this;
+ }
+
+ /**
* Turn on collision avoidance.
*
* @return the builder
@@ -500,6 +597,17 @@ public class OnExceptionDefinition exten
}
/**
+ * Sets the maximum delay between redelivery (supports property
placeholders)
+ *
+ * @param maximumRedeliveryDelay the delay in millis
+ * @return the builder
+ */
+ public OnExceptionDefinition maximumRedeliveryDelay(String
maximumRedeliveryDelay) {
+
getOrCreateRedeliveryPolicy().maximumRedeliveryDelay(maximumRedeliveryDelay);
+ return this;
+ }
+
+ /**
* Sets a reference to a {@link RedeliveryPolicy} to lookup in the {@link
org.apache.camel.spi.Registry} to be used.
*
* @param redeliveryPolicyRef reference to use for lookup
@@ -689,9 +797,9 @@ public class OnExceptionDefinition exten
this.useOriginalMessagePolicy = useOriginalMessagePolicy;
}
- public boolean isAsyncDelayedRedelivery() {
- if (getRedeliveryPolicy() != null) {
- return getRedeliveryPolicy().getAsyncDelayedRedelivery() != null
&& getRedeliveryPolicy().getAsyncDelayedRedelivery();
+ public boolean isAsyncDelayedRedelivery(CamelContext context) {
+ if (getRedeliveryPolicy() != null ) {
+ return getRedeliveryPolicy().isAsyncDelayedRedelivery(context);
}
return false;
}
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java?rev=1070059&r1=1070058&r2=1070059&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java
Sat Feb 12 12:04:33 2011
@@ -25,6 +25,7 @@ import org.apache.camel.CamelContext;
import org.apache.camel.LoggingLevel;
import org.apache.camel.processor.RedeliveryPolicy;
import org.apache.camel.util.CamelContextHelper;
+import org.apache.camel.util.ObjectHelper;
/**
* Represents an XML <redeliveryPolicy/> element
@@ -34,42 +35,42 @@ import org.apache.camel.util.CamelContex
@XmlRootElement(name = "redeliveryPolicy")
@XmlAccessorType(XmlAccessType.FIELD)
public class RedeliveryPolicyDefinition {
- @XmlAttribute()
+ @XmlAttribute
private String ref;
@XmlAttribute
- private Integer maximumRedeliveries;
+ private String maximumRedeliveries;
@XmlAttribute
- private Long redeliveryDelay;
+ private String redeliveryDelay;
@XmlAttribute
- private Boolean asyncDelayedRedelivery;
+ private String asyncDelayedRedelivery;
@XmlAttribute
- private Double backOffMultiplier;
+ private String backOffMultiplier;
@XmlAttribute
- private Boolean useExponentialBackOff;
+ private String useExponentialBackOff;
@XmlAttribute
- private Double collisionAvoidanceFactor;
+ private String collisionAvoidanceFactor;
@XmlAttribute
- private Boolean useCollisionAvoidance;
+ private String useCollisionAvoidance;
@XmlAttribute
- private Long maximumRedeliveryDelay;
+ private String maximumRedeliveryDelay;
@XmlAttribute
private LoggingLevel retriesExhaustedLogLevel;
@XmlAttribute
private LoggingLevel retryAttemptedLogLevel;
@XmlAttribute
- private Boolean logRetryAttempted;
+ private String logRetryAttempted;
@XmlAttribute
- private Boolean logStackTrace;
+ private String logStackTrace;
@XmlAttribute
- private Boolean logRetryStackTrace;
+ private String logRetryStackTrace;
@XmlAttribute
- private Boolean logHandled;
+ private String logHandled;
@XmlAttribute
- private Boolean logContinued;
+ private String logContinued;
@XmlAttribute
- private Boolean logExhausted;
+ private String logExhausted;
@XmlAttribute
- private Boolean disableRedelivery;
+ private String disableRedelivery;
@XmlAttribute
private String delayPattern;
@@ -86,60 +87,69 @@ public class RedeliveryPolicyDefinition
answer = new RedeliveryPolicy();
}
- // copy across the properties - if they are set
- if (maximumRedeliveries != null) {
- answer.setMaximumRedeliveries(maximumRedeliveries);
- }
- if (redeliveryDelay != null) {
- answer.setRedeliveryDelay(redeliveryDelay);
- }
- if (asyncDelayedRedelivery != null && asyncDelayedRedelivery) {
- answer.asyncDelayedRedelivery();
- }
- if (retriesExhaustedLogLevel != null) {
- answer.setRetriesExhaustedLogLevel(retriesExhaustedLogLevel);
- }
- if (retryAttemptedLogLevel != null) {
- answer.setRetryAttemptedLogLevel(retryAttemptedLogLevel);
- }
- if (backOffMultiplier != null) {
- answer.setBackOffMultiplier(backOffMultiplier);
- }
- if (useExponentialBackOff != null) {
- answer.setUseExponentialBackOff(useExponentialBackOff);
- }
- if (collisionAvoidanceFactor != null) {
- answer.setCollisionAvoidanceFactor(collisionAvoidanceFactor);
- }
- if (useCollisionAvoidance != null) {
- answer.setUseCollisionAvoidance(useCollisionAvoidance);
- }
- if (maximumRedeliveryDelay != null) {
- answer.setMaximumRedeliveryDelay(maximumRedeliveryDelay);
- }
- if (logStackTrace != null) {
- answer.setLogStackTrace(logStackTrace);
- }
- if (logRetryStackTrace != null) {
- answer.setLogRetryStackTrace(logRetryStackTrace);
- }
- if (logHandled != null) {
- answer.setLogHandled(logHandled);
- }
- if (logContinued != null) {
- answer.setLogContinued(logContinued);
- }
- if (logRetryAttempted != null) {
- answer.setLogRetryAttempted(logRetryAttempted);
- }
- if (logExhausted != null) {
- answer.setLogExhausted(logExhausted);
- }
- if (disableRedelivery != null && disableRedelivery) {
- answer.setMaximumRedeliveries(0);
- }
- if (delayPattern != null) {
- answer.setDelayPattern(delayPattern);
+ try {
+
+ // copy across the properties - if they are set
+ if (maximumRedeliveries != null) {
+
answer.setMaximumRedeliveries(CamelContextHelper.parseInteger(context,
maximumRedeliveries));
+ }
+ if (redeliveryDelay != null) {
+
answer.setRedeliveryDelay(CamelContextHelper.parseLong(context,
redeliveryDelay));
+ }
+ if (asyncDelayedRedelivery != null) {
+ if (CamelContextHelper.parseBoolean(context,
asyncDelayedRedelivery)) {
+ answer.asyncDelayedRedelivery();
+ }
+ }
+ if (retriesExhaustedLogLevel != null) {
+ answer.setRetriesExhaustedLogLevel(retriesExhaustedLogLevel);
+ }
+ if (retryAttemptedLogLevel != null) {
+ answer.setRetryAttemptedLogLevel(retryAttemptedLogLevel);
+ }
+ if (backOffMultiplier != null) {
+
answer.setBackOffMultiplier(CamelContextHelper.parseDouble(context,
backOffMultiplier));
+ }
+ if (useExponentialBackOff != null) {
+
answer.setUseExponentialBackOff(CamelContextHelper.parseBoolean(context,
useExponentialBackOff));
+ }
+ if (collisionAvoidanceFactor != null) {
+
answer.setCollisionAvoidanceFactor(CamelContextHelper.parseDouble(context,
collisionAvoidanceFactor));
+ }
+ if (useCollisionAvoidance != null) {
+
answer.setUseCollisionAvoidance(CamelContextHelper.parseBoolean(context,
useCollisionAvoidance));
+ }
+ if (maximumRedeliveryDelay != null) {
+
answer.setMaximumRedeliveryDelay(CamelContextHelper.parseLong(context,
maximumRedeliveryDelay));
+ }
+ if (logStackTrace != null) {
+
answer.setLogStackTrace(CamelContextHelper.parseBoolean(context,
logStackTrace));
+ }
+ if (logRetryStackTrace != null) {
+
answer.setLogRetryStackTrace(CamelContextHelper.parseBoolean(context,
logRetryStackTrace));
+ }
+ if (logHandled != null) {
+ answer.setLogHandled(CamelContextHelper.parseBoolean(context,
logHandled));
+ }
+ if (logContinued != null) {
+
answer.setLogContinued(CamelContextHelper.parseBoolean(context, logContinued));
+ }
+ if (logRetryAttempted != null) {
+
answer.setLogRetryAttempted(CamelContextHelper.parseBoolean(context,
logRetryAttempted));
+ }
+ if (logExhausted != null) {
+
answer.setLogExhausted(CamelContextHelper.parseBoolean(context, logExhausted));
+ }
+ if (disableRedelivery != null) {
+ if (CamelContextHelper.parseBoolean(context,
disableRedelivery)) {
+ answer.setMaximumRedeliveries(0);
+ }
+ }
+ if (delayPattern != null) {
+ answer.setDelayPattern(delayPattern);
+ }
+ } catch (Exception e) {
+ throw ObjectHelper.wrapRuntimeCamelException(e);
}
return answer;
@@ -151,6 +161,15 @@ public class RedeliveryPolicyDefinition
// Fluent API
//-------------------------------------------------------------------------
+
+ /**
+ * Allow synchronous delayed redelivery.
+ */
+ public RedeliveryPolicyDefinition asyncDelayedRedelivery() {
+ setAsyncDelayedRedelivery("true");
+ return this;
+ }
+
/**
* Sets the back off multiplier
*
@@ -158,6 +177,16 @@ public class RedeliveryPolicyDefinition
* @return the builder
*/
public RedeliveryPolicyDefinition backOffMultiplier(double
backOffMultiplier) {
+ return backOffMultiplier(Double.toString(backOffMultiplier));
+ }
+
+ /**
+ * Sets the back off multiplier (supports property placeholders)
+ *
+ * @param backOffMultiplier the back off multiplier
+ * @return the builder
+ */
+ public RedeliveryPolicyDefinition backOffMultiplier(String
backOffMultiplier) {
setBackOffMultiplier(backOffMultiplier);
return this;
}
@@ -169,7 +198,7 @@ public class RedeliveryPolicyDefinition
* @return the builder
*/
public RedeliveryPolicyDefinition collisionAvoidancePercent(double
collisionAvoidancePercent) {
- setCollisionAvoidanceFactor(collisionAvoidancePercent * 0.01d);
+ setCollisionAvoidanceFactor(Double.toString(collisionAvoidancePercent
* 0.01d));
return this;
}
@@ -180,6 +209,16 @@ public class RedeliveryPolicyDefinition
* @return the builder
*/
public RedeliveryPolicyDefinition collisionAvoidanceFactor(double
collisionAvoidanceFactor) {
+ return
collisionAvoidanceFactor(Double.toString(collisionAvoidanceFactor));
+ }
+
+ /**
+ * Sets the collision avoidance factor (supports property placeholders)
+ *
+ * @param collisionAvoidanceFactor the factor
+ * @return the builder
+ */
+ public RedeliveryPolicyDefinition collisionAvoidanceFactor(String
collisionAvoidanceFactor) {
setCollisionAvoidanceFactor(collisionAvoidanceFactor);
return this;
}
@@ -191,6 +230,16 @@ public class RedeliveryPolicyDefinition
* @return the builder
*/
public RedeliveryPolicyDefinition redeliveryDelay(long delay) {
+ return redeliveryDelay(Long.toString(delay));
+ }
+
+ /**
+ * Sets the initial redelivery delay (supports property placeholders)
+ *
+ * @param delay delay in millis
+ * @return the builder
+ */
+ public RedeliveryPolicyDefinition redeliveryDelay(String delay) {
setRedeliveryDelay(delay);
return this;
}
@@ -225,6 +274,17 @@ public class RedeliveryPolicyDefinition
* @return the builder
*/
public RedeliveryPolicyDefinition logStackTrace(boolean logStackTrace) {
+ return logStackTrace(Boolean.toString(logStackTrace));
+ }
+
+ /**
+ * Sets whether stack traces should be logged (supports property
placeholders)
+ * Can be used to include or reduce verbose.
+ *
+ * @param logStackTrace whether stack traces should be logged or not
+ * @return the builder
+ */
+ public RedeliveryPolicyDefinition logStackTrace(String logStackTrace) {
setLogStackTrace(logStackTrace);
return this;
}
@@ -237,54 +297,109 @@ public class RedeliveryPolicyDefinition
* @return the builder
*/
public RedeliveryPolicyDefinition logRetryStackTrace(boolean
logRetryStackTrace) {
+ return logRetryStackTrace(Boolean.toString(logRetryStackTrace));
+ }
+
+ /**
+ * Sets whether stack traces should be logged when an retry attempt failed
(supports property placeholders).
+ * Can be used to include or reduce verbose.
+ *
+ * @param logRetryStackTrace whether stack traces should be logged or not
+ * @return the builder
+ */
+ public RedeliveryPolicyDefinition logRetryStackTrace(String
logRetryStackTrace) {
setLogRetryStackTrace(logRetryStackTrace);
return this;
}
/**
- * Sets whether retry attempts should be logged or not
+ * Sets whether retry attempts should be logged or not.
* Can be used to include or reduce verbose.
*
* @param logRetryAttempted whether retry attempts should be logged or not
* @return the builder
*/
public RedeliveryPolicyDefinition logRetryAttempted(boolean
logRetryAttempted) {
+ return logRetryAttempted(Boolean.toString(logRetryAttempted));
+ }
+
+ /**
+ * Sets whether retry attempts should be logged or not (supports property
placeholders).
+ * Can be used to include or reduce verbose.
+ *
+ * @param logRetryAttempted whether retry attempts should be logged or not
+ * @return the builder
+ */
+ public RedeliveryPolicyDefinition logRetryAttempted(String
logRetryAttempted) {
setLogRetryAttempted(logRetryAttempted);
return this;
}
/**
- * Sets whether handled exceptions should be logged or not
+ * Sets whether handled exceptions should be logged or not.
* Can be used to include or reduce verbose.
*
* @param logHandled whether handled exceptions should be logged or not
* @return the builder
*/
public RedeliveryPolicyDefinition logHandled(boolean logHandled) {
+ return logHandled(Boolean.toString(logHandled));
+ }
+
+ /**
+ * Sets whether handled exceptions should be logged or not (supports
property placeholders).
+ * Can be used to include or reduce verbose.
+ *
+ * @param logHandled whether handled exceptions should be logged or not
+ * @return the builder
+ */
+ public RedeliveryPolicyDefinition logHandled(String logHandled) {
setLogHandled(logHandled);
return this;
}
/**
- * Sets whether continued exceptions should be logged or not
+ * Sets whether continued exceptions should be logged or not.
* Can be used to include or reduce verbose.
*
* @param logContinued whether continued exceptions should be logged or
not
* @return the builder
*/
public RedeliveryPolicyDefinition logContinued(boolean logContinued) {
+ return logContinued(Boolean.toString(logContinued));
+ }
+
+ /**
+ * Sets whether continued exceptions should be logged or not (supports
property placeholders).
+ * Can be used to include or reduce verbose.
+ *
+ * @param logContinued whether continued exceptions should be logged or
not
+ * @return the builder
+ */
+ public RedeliveryPolicyDefinition logContinued(String logContinued) {
setLogContinued(logContinued);
return this;
}
/**
- * Sets whether exhausted exceptions should be logged or not
+ * Sets whether exhausted exceptions should be logged or not.
* Can be used to include or reduce verbose.
*
* @param logExhausted whether exhausted exceptions should be logged or
not
* @return the builder
*/
public RedeliveryPolicyDefinition logExhausted(boolean logExhausted) {
+ return logExhausted(Boolean.toString(logExhausted));
+ }
+
+ /**
+ * Sets whether exhausted exceptions should be logged or not (supports
property placeholders).
+ * Can be used to include or reduce verbose.
+ *
+ * @param logExhausted whether exhausted exceptions should be logged or
not
+ * @return the builder
+ */
+ public RedeliveryPolicyDefinition logExhausted(String logExhausted) {
setLogExhausted(logExhausted);
return this;
}
@@ -301,6 +416,21 @@ public class RedeliveryPolicyDefinition
* @return the builder
*/
public RedeliveryPolicyDefinition maximumRedeliveries(int
maximumRedeliveries) {
+ return maximumRedeliveries(Integer.toString(maximumRedeliveries));
+ }
+
+ /**
+ * Sets the maximum redeliveries (supports property placeholders)
+ * <ul>
+ * <li>x = redeliver at most x times</li>
+ * <li>0 = no redeliveries</li>
+ * <li>-1 = redeliver forever</li>
+ * </ul>
+ *
+ * @param maximumRedeliveries the value
+ * @return the builder
+ */
+ public RedeliveryPolicyDefinition maximumRedeliveries(String
maximumRedeliveries) {
setMaximumRedeliveries(maximumRedeliveries);
return this;
}
@@ -311,7 +441,7 @@ public class RedeliveryPolicyDefinition
* @return the builder
*/
public RedeliveryPolicyDefinition useCollisionAvoidance() {
- setUseCollisionAvoidance(Boolean.TRUE);
+ setUseCollisionAvoidance("true");
return this;
}
@@ -321,7 +451,7 @@ public class RedeliveryPolicyDefinition
* @return the builder
*/
public RedeliveryPolicyDefinition useExponentialBackOff() {
- setUseExponentialBackOff(Boolean.TRUE);
+ setUseExponentialBackOff("true");
return this;
}
@@ -332,6 +462,16 @@ public class RedeliveryPolicyDefinition
* @return the builder
*/
public RedeliveryPolicyDefinition maximumRedeliveryDelay(long
maximumRedeliveryDelay) {
+ return maximumRedeliveryDelay(Long.toString(maximumRedeliveryDelay));
+ }
+
+ /**
+ * Sets the maximum delay between redelivery (supports property
placeholders)
+ *
+ * @param maximumRedeliveryDelay the delay in millis
+ * @return the builder
+ */
+ public RedeliveryPolicyDefinition maximumRedeliveryDelay(String
maximumRedeliveryDelay) {
setMaximumRedeliveryDelay(maximumRedeliveryDelay);
return this;
}
@@ -361,148 +501,160 @@ public class RedeliveryPolicyDefinition
// Properties
//-------------------------------------------------------------------------
- public Double getBackOffMultiplier() {
- return backOffMultiplier;
+ public String getRef() {
+ return ref;
}
- public void setBackOffMultiplier(Double backOffMultiplier) {
- this.backOffMultiplier = backOffMultiplier;
+ public void setRef(String ref) {
+ this.ref = ref;
}
- public Double getCollisionAvoidanceFactor() {
- return collisionAvoidanceFactor;
+ public String getMaximumRedeliveries() {
+ return maximumRedeliveries;
}
- public void setCollisionAvoidanceFactor(Double collisionAvoidanceFactor) {
- this.collisionAvoidanceFactor = collisionAvoidanceFactor;
+ public void setMaximumRedeliveries(String maximumRedeliveries) {
+ this.maximumRedeliveries = maximumRedeliveries;
}
- public Long getRedeliveryDelay() {
+ public String getRedeliveryDelay() {
return redeliveryDelay;
}
- public void setRedeliveryDelay(Long delay) {
- this.redeliveryDelay = delay;
+ public void setRedeliveryDelay(String redeliveryDelay) {
+ this.redeliveryDelay = redeliveryDelay;
}
- public Boolean getAsyncDelayedRedelivery() {
+ public String getAsyncDelayedRedelivery() {
return asyncDelayedRedelivery;
}
- public void setAsyncDelayedRedelivery(Boolean asyncDelayedRedelivery) {
- this.asyncDelayedRedelivery = asyncDelayedRedelivery;
- }
+ public boolean isAsyncDelayedRedelivery(CamelContext context) {
+ if (getAsyncDelayedRedelivery() == null) {
+ return false;
+ }
- public Integer getMaximumRedeliveries() {
- return maximumRedeliveries;
+ try {
+ return CamelContextHelper.parseBoolean(context,
getAsyncDelayedRedelivery());
+ } catch (Exception e) {
+ throw ObjectHelper.wrapRuntimeCamelException(e);
+ }
}
- public void setMaximumRedeliveries(Integer maximumRedeliveries) {
- this.maximumRedeliveries = maximumRedeliveries;
+ public void setAsyncDelayedRedelivery(String asyncDelayedRedelivery) {
+ this.asyncDelayedRedelivery = asyncDelayedRedelivery;
}
- public Boolean getUseCollisionAvoidance() {
- return useCollisionAvoidance;
+ public String getBackOffMultiplier() {
+ return backOffMultiplier;
}
- public void setUseCollisionAvoidance(Boolean useCollisionAvoidance) {
- this.useCollisionAvoidance = useCollisionAvoidance;
+ public void setBackOffMultiplier(String backOffMultiplier) {
+ this.backOffMultiplier = backOffMultiplier;
}
- public Boolean getUseExponentialBackOff() {
+ public String getUseExponentialBackOff() {
return useExponentialBackOff;
}
- public void setUseExponentialBackOff(Boolean useExponentialBackOff) {
+ public void setUseExponentialBackOff(String useExponentialBackOff) {
this.useExponentialBackOff = useExponentialBackOff;
}
- public Long getMaximumRedeliveryDelay() {
- return maximumRedeliveryDelay;
+ public String getCollisionAvoidanceFactor() {
+ return collisionAvoidanceFactor;
}
- public void setMaximumRedeliveryDelay(Long maximumRedeliveryDelay) {
- this.maximumRedeliveryDelay = maximumRedeliveryDelay;
+ public void setCollisionAvoidanceFactor(String collisionAvoidanceFactor) {
+ this.collisionAvoidanceFactor = collisionAvoidanceFactor;
}
- public void setRetriesExhaustedLogLevel(LoggingLevel
retriesExhaustedLogLevel) {
- this.retriesExhaustedLogLevel = retriesExhaustedLogLevel;
+ public String getUseCollisionAvoidance() {
+ return useCollisionAvoidance;
+ }
+
+ public void setUseCollisionAvoidance(String useCollisionAvoidance) {
+ this.useCollisionAvoidance = useCollisionAvoidance;
+ }
+
+ public String getMaximumRedeliveryDelay() {
+ return maximumRedeliveryDelay;
+ }
+
+ public void setMaximumRedeliveryDelay(String maximumRedeliveryDelay) {
+ this.maximumRedeliveryDelay = maximumRedeliveryDelay;
}
public LoggingLevel getRetriesExhaustedLogLevel() {
return retriesExhaustedLogLevel;
- }
+ }
- public void setRetryAttemptedLogLevel(LoggingLevel retryAttemptedLogLevel)
{
- this.retryAttemptedLogLevel = retryAttemptedLogLevel;
+ public void setRetriesExhaustedLogLevel(LoggingLevel
retriesExhaustedLogLevel) {
+ this.retriesExhaustedLogLevel = retriesExhaustedLogLevel;
}
public LoggingLevel getRetryAttemptedLogLevel() {
return retryAttemptedLogLevel;
}
- public String getRef() {
- return ref;
- }
-
- public void setRef(String ref) {
- this.ref = ref;
+ public void setRetryAttemptedLogLevel(LoggingLevel retryAttemptedLogLevel)
{
+ this.retryAttemptedLogLevel = retryAttemptedLogLevel;
}
- public Boolean getLogStackTrace() {
- return logStackTrace;
+ public String getLogRetryAttempted() {
+ return logRetryAttempted;
}
- public void setLogStackTrace(Boolean logStackTrace) {
- this.logStackTrace = logStackTrace;
+ public void setLogRetryAttempted(String logRetryAttempted) {
+ this.logRetryAttempted = logRetryAttempted;
}
- public Boolean getDisableRedelivery() {
- return disableRedelivery;
+ public String getLogStackTrace() {
+ return logStackTrace;
}
- public void setDisableRedelivery(Boolean disableRedelivery) {
- this.disableRedelivery = disableRedelivery;
+ public void setLogStackTrace(String logStackTrace) {
+ this.logStackTrace = logStackTrace;
}
- public Boolean isLogRetryStackTrace() {
+ public String getLogRetryStackTrace() {
return logRetryStackTrace;
}
- public void setLogRetryStackTrace(Boolean logRetryStackTrace) {
+ public void setLogRetryStackTrace(String logRetryStackTrace) {
this.logRetryStackTrace = logRetryStackTrace;
}
- public Boolean isLogHandled() {
+ public String getLogHandled() {
return logHandled;
}
- public void setLogHandled(Boolean logHandled) {
+ public void setLogHandled(String logHandled) {
this.logHandled = logHandled;
}
- public Boolean getLogContinued() {
+ public String getLogContinued() {
return logContinued;
}
- public void setLogContinued(Boolean logContinued) {
+ public void setLogContinued(String logContinued) {
this.logContinued = logContinued;
}
- public Boolean isLogRetryAttempted() {
- return logRetryAttempted;
+ public String getLogExhausted() {
+ return logExhausted;
}
- public void setLogRetryAttempted(Boolean logRetryAttempted) {
- this.logRetryAttempted = logRetryAttempted;
+ public void setLogExhausted(String logExhausted) {
+ this.logExhausted = logExhausted;
}
- public Boolean isLogExhausted() {
- return logExhausted;
+ public String getDisableRedelivery() {
+ return disableRedelivery;
}
- public void setLogExhausted(Boolean logExhausted) {
- this.logExhausted = logExhausted;
+ public void setDisableRedelivery(String disableRedelivery) {
+ this.disableRedelivery = disableRedelivery;
}
public String getDelayPattern() {
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java?rev=1070059&r1=1070058&r2=1070059&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java
Sat Feb 12 12:04:33 2011
@@ -517,7 +517,7 @@ public abstract class RedeliveryErrorHan
data.continuedPredicate = exceptionPolicy.getContinuedPolicy();
data.retryWhilePredicate = exceptionPolicy.getRetryWhilePolicy();
data.useOriginalInMessage = exceptionPolicy.isUseOriginalMessage();
- data.asyncDelayedRedelivery =
exceptionPolicy.isAsyncDelayedRedelivery();
+ data.asyncDelayedRedelivery =
exceptionPolicy.isAsyncDelayedRedelivery(exchange.getContext());
// route specific failure handler?
Processor processor = exceptionPolicy.getErrorHandler();
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java?rev=1070059&r1=1070058&r2=1070059&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
Sat Feb 12 12:04:33 2011
@@ -243,6 +243,31 @@ public final class CamelContextHelper {
}
/**
+ * Parses the given text and converts it to a Double and handling property
placeholders as well
+ *
+ * @param camelContext the camel context
+ * @param text the text
+ * @return the double vale, or <tt>null</tt> if the text was <tt>null</tt>
+ * @throws Exception is thrown if illegal argument or type conversion not
possible
+ */
+ public static Double parseDouble(CamelContext camelContext, String text)
throws Exception {
+ // ensure we support property placeholders
+ String s = camelContext.resolvePropertyPlaceholders(text);
+ if (s != null) {
+ try {
+ return
camelContext.getTypeConverter().mandatoryConvertTo(Double.class, s);
+ } catch (NumberFormatException e) {
+ if (s.equals(text)) {
+ throw new IllegalArgumentException("Error parsing [" + s +
"] as an Integer.", e);
+ } else {
+ throw new IllegalArgumentException("Error parsing [" + s +
"] from property " + text + " as an Integer.", e);
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
* Parses the given text and converts it to an Boolean and handling
property placeholders as well
*
* @param camelContext the camel context
Copied:
camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentOnExceptionTest.java
(from r1070041,
camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentRefTest.java)
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentOnExceptionTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentOnExceptionTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentRefTest.java&r1=1070041&r2=1070059&rev=1070059&view=diff
==============================================================================
---
camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentRefTest.java
(original)
+++
camel/trunk/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentOnExceptionTest.java
Sat Feb 12 12:04:33 2011
@@ -20,49 +20,46 @@ import java.util.Properties;
import org.apache.camel.CamelContext;
import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.impl.JndiRegistry;
/**
* @version $Revision$
*/
-public class PropertiesComponentRefTest extends ContextTestSupport {
+public class PropertiesComponentOnExceptionTest extends ContextTestSupport {
- @Override
- public boolean isUseRouteBuilder() {
- return false;
- }
-
- public void testPropertiesComponent() throws Exception {
- context.addRoutes(new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- from("{{start}}").to("properties:{{cool.result}}");
- }
- });
- context.start();
-
- getMockEndpoint("mock:result").expectedMessageCount(1);
-
- template.sendBody("direct:start", "Hello World");
+ public void testPropertiesComponentOnException() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:dead");
+ mock.expectedMessageCount(1);
+ mock.message(0).header(Exchange.REDELIVERED).isEqualTo(true);
+ mock.message(0).header(Exchange.REDELIVERY_COUNTER).isEqualTo(3);
+
+ try {
+ template.sendBody("direct:start", "Hello World");
+ fail("Should throw exception");
+ } catch (Exception e) {
+ // expected
+ }
assertMockEndpointsSatisfied();
}
- public void testPropertiesComponentLocationsOverride() throws Exception {
- context.addRoutes(new RouteBuilder() {
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
@Override
public void configure() throws Exception {
-
from("direct:start").to("properties:{{bar.end}}?locations=ref:coolBar");
- }
- });
- context.start();
-
- getMockEndpoint("mock:bar").expectedMessageCount(1);
+ onException(Exception.class)
+ .redeliveryDelay("{{delay}}")
+ .maximumRedeliveries("{{max}}")
+ .to("mock:dead");
- template.sendBody("direct:start", "Hello World");
-
- assertMockEndpointsSatisfied();
+ from("direct:start")
+ .throwException(new IllegalAccessException("Damn"));
+ }
+ };
}
@Override
@@ -70,15 +67,9 @@ public class PropertiesComponentRefTest
JndiRegistry jndi = super.createRegistry();
Properties cool = new Properties();
- cool.put("cool.end", "mock:end");
- cool.put("cool.result", "mock:result");
- cool.put("start", "direct:start");
- jndi.bind("myCoolProperties", cool);
-
- Properties bar = new Properties();
- bar.put("bar.end", "mock:bar");
- bar.put("dude", "direct:bar");
- jndi.bind("coolBar", bar);
+ cool.put("delay", "25");
+ cool.put("max", "3");
+ jndi.bind("myprop", cool);
return jndi;
}
@@ -89,7 +80,7 @@ public class PropertiesComponentRefTest
PropertiesComponent pc = new PropertiesComponent();
pc.setCamelContext(context);
- pc.setLocations(new String[]{"ref:myCoolProperties"});
+ pc.setLocations(new String[]{"ref:myprop"});
context.addComponent("properties", pc);
return context;
Added:
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.java?rev=1070059&view=auto
==============================================================================
---
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.java
(added)
+++
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.java
Sat Feb 12 12:04:33 2011
@@ -0,0 +1,32 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.properties;
+
+import org.apache.camel.CamelContext;
+
+import static
org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
+
+/**
+ * @version $Revision$
+ */
+public class SpringPropertiesComponentOnExceptionTest extends
PropertiesComponentOnExceptionTest {
+
+ protected CamelContext createCamelContext() throws Exception {
+ return createSpringCamelContext(this,
"org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.xml");
+ }
+
+}
Copied:
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.xml
(from r1070041,
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentRefTest.xml)
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentRefTest.xml&r1=1070041&r2=1070059&rev=1070059&view=diff
==============================================================================
---
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentRefTest.xml
(original)
+++
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.xml
Sat Feb 12 12:04:33 2011
@@ -22,15 +22,22 @@
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd
">
- <bean id="coolProperties"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
- <property name="location"
value="classpath:org/apache/camel/component/properties/cheese.properties"/>
+ <bean id="damn" class="java.lang.IllegalArgumentException">
+ <constructor-arg index="0" value="Damn"/>
</bean>
<camelContext xmlns="http://camel.apache.org/schema/spring">
- <propertyPlaceholder id="properties" location="ref:coolProperties"/>
+ <propertyPlaceholder id="properties"
location="org/apache/camel/component/properties/cheese.properties"/>
+
+ <onException>
+ <exception>java.lang.Exception</exception>
+ <redeliveryPolicy redeliveryDelay="{{delay}}"
maximumRedeliveries="{{max}}"/>
+ <to uri="mock:dead"/>
+ </onException>
+
<route>
<from uri="direct:start"/>
- <to uri="{{cool.end}}"/>
+ <throwException ref="damn"/>
</route>
</camelContext>
Modified:
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/cheese.properties
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/cheese.properties?rev=1070059&r1=1070058&r2=1070059&view=diff
==============================================================================
---
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/cheese.properties
(original)
+++
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/cheese.properties
Sat Feb 12 12:04:33 2011
@@ -20,3 +20,6 @@ cool.bar=bar
myCoolCharset=iso-8859-1
slipDelimiter=##
+
+delay=25
+max=3
\ No newline at end of file