Author: davsclaus Date: Sun Feb 13 17:59:05 2011 New Revision: 1070270 URL: http://svn.apache.org/viewvc?rev=1070270&view=rev Log: CAMEL-3661: Added redepliveryPolicyProfile in XML DSL so you can easily use common profiles. They also support property placeholders. Added validation on errorHandler in XML to fail if misconfigured.
Added: camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRedeliveryPolicyFactoryBean.java - copied, changed from r1070041, camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelEndpointFactoryBean.java camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelRedeliveryPolicyFactoryBean.java - copied, changed from r1070041, camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelRedeliveryPolicyFactoryBean.java - copied, changed from r1070041, camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelThreadPoolFactoryBean.java camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionRefTest.java - copied, changed from r1070059, camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.java camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertyPlaceholderOnExceptionRefTest.java camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringErrorHandlerRedeliveryPolicyProfileTest.java camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionRefTest.xml - copied, changed from r1070059, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.xml camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertyPlaceholderOnExceptionRefTest.xml camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringErrorHandlerRedeliveryPolicyProfileTest.xml - copied, changed from r1070041, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/choice.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/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java camel/trunk/components/camel-blueprint/src/main/resources/org/apache/camel/blueprint/jaxb.index camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java camel/trunk/components/camel-spring/src/main/resources/org/apache/camel/spring/jaxb.index camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/RedeliveryPolicyRefTest.xml 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=1070270&r1=1070269&r2=1070270&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 Sun Feb 13 17:59:05 2011 @@ -62,6 +62,8 @@ public class OnExceptionDefinition exten private ExpressionSubElementDefinition retryWhile; @XmlElement(name = "redeliveryPolicy") private RedeliveryPolicyDefinition redeliveryPolicy; + @XmlAttribute(name = "redeliveryPolicyRef") + private String redeliveryPolicyRef; @XmlElement(name = "handled") private ExpressionSubElementDefinition handled; @XmlElement(name = "continued") @@ -121,6 +123,10 @@ public class OnExceptionDefinition exten * for this exception handler. */ public RedeliveryPolicy createRedeliveryPolicy(CamelContext context, RedeliveryPolicy parentPolicy) { + if (redeliveryPolicyRef != null) { + parentPolicy = CamelContextHelper.mandatoryLookup(context, redeliveryPolicyRef, RedeliveryPolicy.class); + } + if (redeliveryPolicy != null) { return redeliveryPolicy.createRedeliveryPolicy(context, parentPolicy); } else if (errorHandler != null) { @@ -614,7 +620,7 @@ public class OnExceptionDefinition exten * @return the builder */ public OnExceptionDefinition redeliveryPolicyRef(String redeliveryPolicyRef) { - getOrCreateRedeliveryPolicy().setRef(redeliveryPolicyRef); + setRedeliveryPolicyRef(redeliveryPolicyRef); return this; } @@ -711,6 +717,14 @@ public class OnExceptionDefinition exten this.redeliveryPolicy = redeliveryPolicy; } + public String getRedeliveryPolicyRef() { + return redeliveryPolicyRef; + } + + public void setRedeliveryPolicyRef(String redeliveryPolicyRef) { + this.redeliveryPolicyRef = redeliveryPolicyRef; + } + public Predicate getHandledPolicy() { return handledPolicy; } 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=1070270&r1=1070269&r2=1070270&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 Sun Feb 13 17:59:05 2011 @@ -36,8 +36,6 @@ import org.apache.camel.util.ObjectHelpe @XmlAccessorType(XmlAccessType.FIELD) public class RedeliveryPolicyDefinition { @XmlAttribute - private String ref; - @XmlAttribute private String maximumRedeliveries; @XmlAttribute private String redeliveryDelay; @@ -75,10 +73,6 @@ public class RedeliveryPolicyDefinition private String delayPattern; public RedeliveryPolicy createRedeliveryPolicy(CamelContext context, RedeliveryPolicy parentPolicy) { - if (ref != null) { - // lookup in registry if ref provided - return CamelContextHelper.mandatoryLookup(context, ref, RedeliveryPolicy.class); - } RedeliveryPolicy answer; if (parentPolicy != null) { @@ -477,17 +471,6 @@ public class RedeliveryPolicyDefinition } /** - * Use redelivery policy looked up in the registry - * - * @param ref reference to the redelivery policy to lookup and use - * @return the builder - */ - public RedeliveryPolicyDefinition ref(String ref) { - setRef(ref); - return this; - } - - /** * Sets the delay pattern with delay intervals. * * @param delayPattern the delay pattern @@ -501,14 +484,6 @@ public class RedeliveryPolicyDefinition // Properties //------------------------------------------------------------------------- - public String getRef() { - return ref; - } - - public void setRef(String ref) { - this.ref = ref; - } - public String getMaximumRedeliveries() { return maximumRedeliveries; } Modified: camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java?rev=1070270&r1=1070269&r2=1070270&view=diff ============================================================================== --- camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java (original) +++ camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java Sun Feb 13 17:59:05 2011 @@ -127,6 +127,8 @@ public class CamelContextFactoryBean ext private List<CamelEndpointFactoryBean> endpoints; @XmlElement(name = "dataFormats", required = false) private DataFormatsDefinition dataFormats; + @XmlElement(name = "redeliveryPolicyProfile", required = false) + private List<CamelRedeliveryPolicyFactoryBean> redeliveryPolicies; @XmlElement(name = "onException", required = false) private List<OnExceptionDefinition> onExceptions = new ArrayList<OnExceptionDefinition>(); @XmlElement(name = "onCompletion", required = false) @@ -298,6 +300,14 @@ public class CamelContextFactoryBean ext this.routeRefs = routeRefs; } + public List<CamelRedeliveryPolicyFactoryBean> getRedeliveryPolicies() { + return redeliveryPolicies; + } + + public void setRedeliveryPolicies(List<CamelRedeliveryPolicyFactoryBean> redeliveryPolicies) { + this.redeliveryPolicies = redeliveryPolicies; + } + public List<ThreadPoolProfileDefinition> getThreadPoolProfiles() { return threadPoolProfiles; } Copied: camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRedeliveryPolicyFactoryBean.java (from r1070041, camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelEndpointFactoryBean.java) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRedeliveryPolicyFactoryBean.java?p2=camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRedeliveryPolicyFactoryBean.java&p1=camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelEndpointFactoryBean.java&r1=1070041&r2=1070270&rev=1070270&view=diff ============================================================================== --- camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelEndpointFactoryBean.java (original) +++ camel/trunk/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRedeliveryPolicyFactoryBean.java Sun Feb 13 17:59:05 2011 @@ -16,25 +16,23 @@ */ package org.apache.camel.blueprint; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; import org.apache.camel.CamelContext; -import org.apache.camel.Endpoint; -import org.apache.camel.core.xml.AbstractCamelEndpointFactoryBean; +import org.apache.camel.core.xml.AbstractCamelRedeliveryPolicyFactoryBean; import org.osgi.service.blueprint.container.BlueprintContainer; /** - * A factory which instantiates {@link Endpoint} objects + * A factory which instantiates {@link org.apache.camel.processor.RedeliveryPolicy} objects * * @version $Revision$ */ -@XmlRootElement(name = "endpoint") +@XmlRootElement(name = "redeliveryPolicyProfile") @XmlAccessorType(XmlAccessType.FIELD) -public class CamelEndpointFactoryBean extends AbstractCamelEndpointFactoryBean { +public class CamelRedeliveryPolicyFactoryBean extends AbstractCamelRedeliveryPolicyFactoryBean { @XmlTransient private BlueprintContainer blueprintContainer; Modified: camel/trunk/components/camel-blueprint/src/main/resources/org/apache/camel/blueprint/jaxb.index URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-blueprint/src/main/resources/org/apache/camel/blueprint/jaxb.index?rev=1070270&r1=1070269&r2=1070270&view=diff ============================================================================== --- camel/trunk/components/camel-blueprint/src/main/resources/org/apache/camel/blueprint/jaxb.index (original) +++ camel/trunk/components/camel-blueprint/src/main/resources/org/apache/camel/blueprint/jaxb.index Sun Feb 13 17:59:05 2011 @@ -20,5 +20,6 @@ CamelEndpointFactoryBean CamelErrorHandlerFactoryBean CamelProducerTemplateFactoryBean CamelThreadPoolFactoryBean +CamelRedeliveryPolicyFactoryBean CamelRouteContextFactoryBean CamelProxyFactoryBean Modified: camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java?rev=1070270&r1=1070269&r2=1070270&view=diff ============================================================================== --- camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java (original) +++ camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java Sun Feb 13 17:59:05 2011 @@ -413,6 +413,8 @@ public abstract class AbstractCamelConte public abstract List<? extends AbstractCamelEndpointFactoryBean> getEndpoints(); + public abstract List<? extends AbstractCamelRedeliveryPolicyFactoryBean> getRedeliveryPolicies(); + public abstract List<InterceptDefinition> getIntercepts(); public abstract List<InterceptFromDefinition> getInterceptFroms(); Copied: camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelRedeliveryPolicyFactoryBean.java (from r1070041, camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelRedeliveryPolicyFactoryBean.java?p2=camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelRedeliveryPolicyFactoryBean.java&p1=camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java&r1=1070041&r2=1070270&rev=1070270&view=diff ============================================================================== --- camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java (original) +++ camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelRedeliveryPolicyFactoryBean.java Sun Feb 13 17:59:05 2011 @@ -16,128 +16,274 @@ */ package org.apache.camel.core.xml; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.RejectedExecutionHandler; -import java.util.concurrent.TimeUnit; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.apache.camel.CamelContext; -import org.apache.camel.ThreadPoolRejectedPolicy; -import org.apache.camel.builder.xml.TimeUnitAdapter; +import org.apache.camel.LoggingLevel; +import org.apache.camel.processor.RedeliveryPolicy; +import org.apache.camel.util.CamelContextHelper; /** - * A factory which instantiates {@link java.util.concurrent.ExecutorService} objects + * A factory which instantiates {@link RedeliveryPolicy} objects * * @version $Revision: 925208 $ */ @XmlAccessorType(XmlAccessType.FIELD) -public abstract class AbstractCamelThreadPoolFactoryBean extends AbstractCamelFactoryBean<ExecutorService> { +public abstract class AbstractCamelRedeliveryPolicyFactoryBean extends AbstractCamelFactoryBean<RedeliveryPolicy> { - @XmlAttribute(required = true) - private Integer poolSize; @XmlAttribute - private Integer maxPoolSize; + private String maximumRedeliveries; @XmlAttribute - private Long keepAliveTime = 60L; + private String redeliveryDelay; @XmlAttribute - @XmlJavaTypeAdapter(TimeUnitAdapter.class) - private TimeUnit timeUnit = TimeUnit.SECONDS; + private String asyncDelayedRedelivery; @XmlAttribute - private Integer maxQueueSize = -1; + private String backOffMultiplier; @XmlAttribute - private ThreadPoolRejectedPolicy rejectedPolicy = ThreadPoolRejectedPolicy.CallerRuns; - @XmlAttribute(required = true) - private String threadName; + private String useExponentialBackOff; @XmlAttribute - private Boolean daemon = Boolean.TRUE; + private String collisionAvoidanceFactor; + @XmlAttribute + private String useCollisionAvoidance; + @XmlAttribute + private String maximumRedeliveryDelay; + @XmlAttribute + private LoggingLevel retriesExhaustedLogLevel; + @XmlAttribute + private LoggingLevel retryAttemptedLogLevel; + @XmlAttribute + private String logRetryAttempted; + @XmlAttribute + private String logStackTrace; + @XmlAttribute + private String logRetryStackTrace; + @XmlAttribute + private String logHandled; + @XmlAttribute + private String logContinued; + @XmlAttribute + private String logExhausted; + @XmlAttribute + private String disableRedelivery; + @XmlAttribute + private String delayPattern; - public ExecutorService getObject() throws Exception { - if (poolSize == null || poolSize <= 0) { - throw new IllegalArgumentException("PoolSize must be a positive number"); + public RedeliveryPolicy getObject() throws Exception { + RedeliveryPolicy answer = new RedeliveryPolicy(); + CamelContext context = getCamelContext(); + + // copy across the properties - if they are set + if (maximumRedeliveries != null) { + answer.setMaximumRedeliveries(CamelContextHelper.parseInteger(context, maximumRedeliveries)); } - - int max = getMaxPoolSize() != null ? getMaxPoolSize() : getPoolSize(); - RejectedExecutionHandler rejected = null; - if (rejectedPolicy != null) { - rejected = rejectedPolicy.asRejectedExecutionHandler(); + 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); } - ExecutorService answer = getCamelContext().getExecutorServiceStrategy().newThreadPool(getId(), getThreadName(), getPoolSize(), max, - getKeepAliveTime(), getTimeUnit(), getMaxQueueSize(), rejected, isDaemon()); return answer; } protected abstract CamelContext getCamelContextWithId(String camelContextId); - public Class<ExecutorService> getObjectType() { - return ExecutorService.class; + public Class<RedeliveryPolicy> getObjectType() { + return RedeliveryPolicy.class; + } + + public String getMaximumRedeliveries() { + return maximumRedeliveries; + } + + public void setMaximumRedeliveries(String maximumRedeliveries) { + this.maximumRedeliveries = maximumRedeliveries; + } + + public String getRedeliveryDelay() { + return redeliveryDelay; + } + + public void setRedeliveryDelay(String redeliveryDelay) { + this.redeliveryDelay = redeliveryDelay; + } + + public String getAsyncDelayedRedelivery() { + return asyncDelayedRedelivery; + } + + public void setAsyncDelayedRedelivery(String asyncDelayedRedelivery) { + this.asyncDelayedRedelivery = asyncDelayedRedelivery; + } + + public String getBackOffMultiplier() { + return backOffMultiplier; + } + + public void setBackOffMultiplier(String backOffMultiplier) { + this.backOffMultiplier = backOffMultiplier; + } + + public String getUseExponentialBackOff() { + return useExponentialBackOff; + } + + public void setUseExponentialBackOff(String useExponentialBackOff) { + this.useExponentialBackOff = useExponentialBackOff; + } + + public String getCollisionAvoidanceFactor() { + return collisionAvoidanceFactor; } - public Integer getPoolSize() { - return poolSize; + public void setCollisionAvoidanceFactor(String collisionAvoidanceFactor) { + this.collisionAvoidanceFactor = collisionAvoidanceFactor; } - public void setPoolSize(Integer poolSize) { - this.poolSize = poolSize; + public String getUseCollisionAvoidance() { + return useCollisionAvoidance; } - public Integer getMaxPoolSize() { - return maxPoolSize; + public void setUseCollisionAvoidance(String useCollisionAvoidance) { + this.useCollisionAvoidance = useCollisionAvoidance; } - public void setMaxPoolSize(Integer maxPoolSize) { - this.maxPoolSize = maxPoolSize; + public String getMaximumRedeliveryDelay() { + return maximumRedeliveryDelay; } - public Long getKeepAliveTime() { - return keepAliveTime; + public void setMaximumRedeliveryDelay(String maximumRedeliveryDelay) { + this.maximumRedeliveryDelay = maximumRedeliveryDelay; } - public void setKeepAliveTime(Long keepAliveTime) { - this.keepAliveTime = keepAliveTime; + public LoggingLevel getRetriesExhaustedLogLevel() { + return retriesExhaustedLogLevel; } - public TimeUnit getTimeUnit() { - return timeUnit; + public void setRetriesExhaustedLogLevel(LoggingLevel retriesExhaustedLogLevel) { + this.retriesExhaustedLogLevel = retriesExhaustedLogLevel; } - public void setTimeUnit(TimeUnit timeUnit) { - this.timeUnit = timeUnit; + public LoggingLevel getRetryAttemptedLogLevel() { + return retryAttemptedLogLevel; } - public Integer getMaxQueueSize() { - return maxQueueSize; + public void setRetryAttemptedLogLevel(LoggingLevel retryAttemptedLogLevel) { + this.retryAttemptedLogLevel = retryAttemptedLogLevel; } - public void setMaxQueueSize(Integer maxQueueSize) { - this.maxQueueSize = maxQueueSize; + public String getLogRetryAttempted() { + return logRetryAttempted; } - public ThreadPoolRejectedPolicy getRejectedPolicy() { - return rejectedPolicy; + public void setLogRetryAttempted(String logRetryAttempted) { + this.logRetryAttempted = logRetryAttempted; } - public void setRejectedPolicy(ThreadPoolRejectedPolicy rejectedPolicy) { - this.rejectedPolicy = rejectedPolicy; + public String getLogStackTrace() { + return logStackTrace; } - public String getThreadName() { - return threadName; + public void setLogStackTrace(String logStackTrace) { + this.logStackTrace = logStackTrace; } - public void setThreadName(String threadName) { - this.threadName = threadName; + public String getLogRetryStackTrace() { + return logRetryStackTrace; } - public Boolean isDaemon() { - return daemon; + public void setLogRetryStackTrace(String logRetryStackTrace) { + this.logRetryStackTrace = logRetryStackTrace; } - public void setDaemon(Boolean daemon) { - this.daemon = daemon; + public String getLogHandled() { + return logHandled; } + public void setLogHandled(String logHandled) { + this.logHandled = logHandled; + } + + public String getLogContinued() { + return logContinued; + } + + public void setLogContinued(String logContinued) { + this.logContinued = logContinued; + } + + public String getLogExhausted() { + return logExhausted; + } + + public void setLogExhausted(String logExhausted) { + this.logExhausted = logExhausted; + } + + public String getDisableRedelivery() { + return disableRedelivery; + } + + public void setDisableRedelivery(String disableRedelivery) { + this.disableRedelivery = disableRedelivery; + } + + public String getDelayPattern() { + return delayPattern; + } + + public void setDelayPattern(String delayPattern) { + this.delayPattern = delayPattern; + } } \ No newline at end of file Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java?rev=1070270&r1=1070269&r2=1070270&view=diff ============================================================================== --- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java (original) +++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java Sun Feb 13 17:59:05 2011 @@ -32,7 +32,6 @@ import org.apache.camel.ShutdownRoute; import org.apache.camel.ShutdownRunningTask; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.core.xml.AbstractCamelContextFactoryBean; -import org.apache.camel.core.xml.AbstractCamelEndpointFactoryBean; import org.apache.camel.core.xml.CamelJMXAgentDefinition; import org.apache.camel.core.xml.CamelPropertyPlaceholderDefinition; import org.apache.camel.core.xml.CamelProxyFactoryDefinition; @@ -135,6 +134,8 @@ public class CamelContextFactoryBean ext private List<CamelEndpointFactoryBean> endpoints; @XmlElement(name = "dataFormats", required = false) private DataFormatsDefinition dataFormats; + @XmlElement(name = "redeliveryPolicyProfile", required = false) + private List<CamelRedeliveryPolicyFactoryBean> redeliveryPolicies; @XmlElement(name = "onException", required = false) private List<OnExceptionDefinition> onExceptions = new ArrayList<OnExceptionDefinition>(); @XmlElement(name = "onCompletion", required = false) @@ -315,6 +316,10 @@ public class CamelContextFactoryBean ext return endpoints; } + public List<CamelRedeliveryPolicyFactoryBean> getRedeliveryPolicies() { + return redeliveryPolicies; + } + public List<InterceptDefinition> getIntercepts() { return intercepts; } Copied: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelRedeliveryPolicyFactoryBean.java (from r1070041, camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelThreadPoolFactoryBean.java) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelRedeliveryPolicyFactoryBean.java?p2=camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelRedeliveryPolicyFactoryBean.java&p1=camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelThreadPoolFactoryBean.java&r1=1070041&r2=1070270&rev=1070270&view=diff ============================================================================== --- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelThreadPoolFactoryBean.java (original) +++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelRedeliveryPolicyFactoryBean.java Sun Feb 13 17:59:05 2011 @@ -22,22 +22,20 @@ import javax.xml.bind.annotation.XmlRoot import javax.xml.bind.annotation.XmlTransient; import org.apache.camel.CamelContext; -import org.apache.camel.core.xml.AbstractCamelThreadPoolFactoryBean; +import org.apache.camel.core.xml.AbstractCamelRedeliveryPolicyFactoryBean; import org.apache.camel.spring.util.CamelContextResolverHelper; import org.springframework.beans.factory.FactoryBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; -import static org.apache.camel.util.ObjectHelper.notNull; - /** - * A {@link org.springframework.beans.factory.FactoryBean} which instantiates {@link java.util.concurrent.ExecutorService} objects + * A {@link org.springframework.beans.factory.FactoryBean} which instantiates {@link org.apache.camel.processor.RedeliveryPolicy} objects * * @version $Revision$ */ -@XmlRootElement(name = "threadPool") +@XmlRootElement(name = "redeliveryPolicyProfile") @XmlAccessorType(XmlAccessType.FIELD) -public class CamelThreadPoolFactoryBean extends AbstractCamelThreadPoolFactoryBean implements FactoryBean, ApplicationContextAware { +public class CamelRedeliveryPolicyFactoryBean extends AbstractCamelRedeliveryPolicyFactoryBean implements FactoryBean, ApplicationContextAware { @XmlTransient private ApplicationContext applicationContext; Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java?rev=1070270&r1=1070269&r2=1070270&view=diff ============================================================================== --- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java (original) +++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/ErrorHandlerDefinition.java Sun Feb 13 17:59:05 2011 @@ -51,6 +51,8 @@ public class ErrorHandlerDefinition exte private String onRedeliveryRef; @XmlAttribute private String retryWhileRef; + @XmlAttribute + private String redeliveryPolicyRef; @XmlElement private RedeliveryPolicyDefinition redeliveryPolicy; Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java?rev=1070270&r1=1070269&r2=1070270&view=diff ============================================================================== --- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java (original) +++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java Sun Feb 13 17:59:05 2011 @@ -26,6 +26,7 @@ import javax.xml.bind.Binder; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; +import org.apache.camel.spring.CamelRedeliveryPolicyFactoryBean; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -101,6 +102,7 @@ public class CamelNamespaceHandler exten addBeanDefinitionParser("export", CamelServiceExporter.class, true, false); addBeanDefinitionParser("endpoint", CamelEndpointFactoryBean.class, true, false); addBeanDefinitionParser("threadPool", CamelThreadPoolFactoryBean.class, true, true); + addBeanDefinitionParser("redeliveryPolicyProfile", CamelRedeliveryPolicyFactoryBean.class, true, true); // jmx agent and property placeholder cannot be used outside of the camel context addBeanDefinitionParser("jmxAgent", CamelJMXAgentDefinition.class, false, false); Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java?rev=1070270&r1=1070269&r2=1070270&view=diff ============================================================================== --- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java (original) +++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/handler/ErrorHandlerDefinitionParser.java Sun Feb 13 17:59:05 2011 @@ -59,6 +59,7 @@ public class ErrorHandlerDefinitionParse && !attributeName.equals("type") && !attributeName.equals("onRedeliveryRef") && !attributeName.equals("onRetryWhileRef") + && !attributeName.equals("redeliveryPolicyRef") && !attributeName.equals("transactionTemplateRef") && !attributeName.equals("transactionManagerRef"); } @@ -66,15 +67,14 @@ public class ErrorHandlerDefinitionParse @Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { super.doParse(element, parserContext, builder); + + String id = element.getAttribute("id"); + ErrorHandlerType type = ErrorHandlerType.DefaultErrorHandler; if (ObjectHelper.isNotEmpty(element.getAttribute("type"))) { type = ErrorHandlerType.valueOf(element.getAttribute("type")); } - if (type.equals(ErrorHandlerType.NoErrorHandler) || type.equals(ErrorHandlerType.LoggingErrorHandler)) { - // don't need to parser other stuff - return; - } - if (type.equals(ErrorHandlerType.DefaultErrorHandler) + if (type.equals(ErrorHandlerType.DefaultErrorHandler) || type.equals(ErrorHandlerType.DeadLetterChannel) || type.equals(ErrorHandlerType.TransactionErrorHandler)) { NodeList list = element.getChildNodes(); @@ -86,17 +86,62 @@ public class ErrorHandlerDefinitionParse String localName = child.getLocalName(); // set the redeliveryPolicy if (localName.equals("redeliveryPolicy")) { + // cannot have redeliveryPolicyRef attribute as well, only one is allowed + if (ObjectHelper.isNotEmpty(element.getAttribute("redeliveryPolicyRef"))) { + throw new IllegalArgumentException("Cannot set both redeliveryPolicyRef and redeliveryPolicy," + + " only one allowed, in error handler with id: " + id); + } BeanDefinition redeliveryPolicyDefinition = redeliveryPolicyParser.parse(childElement, parserContext); builder.addPropertyValue(localName, redeliveryPolicyDefinition); } } } parserRefAttribute(element, "onRedeliveryRef", "onRedelivery", builder); + parserRefAttribute(element, "onRetryWhileRef", "onRetryWhile", builder); + parserRefAttribute(element, "redeliveryPolicyRef", "redeliveryPolicy", builder); + if (type.equals(ErrorHandlerType.TransactionErrorHandler)) { + // deal with transactionTemplateRef + parserRefAttribute(element, "transactionTemplateRef", "transactionTemplate", builder); + parserRefAttribute(element, "transactionManagerRef", "transactionManager", builder); + } } - if (type.equals(ErrorHandlerType.TransactionErrorHandler)) { - // deal with transactionTemplateRef - parserRefAttribute(element, "transactionTemplateRef", "transactionTemplate", builder); - parserRefAttribute(element, "transactionManagerRef", "transactionManager", builder); + + // validate attributes according to type + + String deadLetterUri = element.getAttribute("deadLetterUri"); + if (ObjectHelper.isNotEmpty(deadLetterUri) && !type.equals(ErrorHandlerType.DeadLetterChannel)) { + throw new IllegalArgumentException("Attribute deadLetterUri can only be used if type is " + + ErrorHandlerType.DeadLetterChannel.name() + ", in error handler with id: " + id); + } + String transactionTemplateRef = element.getAttribute("transactionTemplateRef"); + if (ObjectHelper.isNotEmpty(transactionTemplateRef) && !type.equals(ErrorHandlerType.TransactionErrorHandler)) { + throw new IllegalArgumentException("Attribute transactionTemplateRef can only be used if type is " + + ErrorHandlerType.TransactionErrorHandler.name() + ", in error handler with id: " + id); + } + String transactionManagerRef = element.getAttribute("transactionManagerRef"); + if (ObjectHelper.isNotEmpty(transactionManagerRef) && !type.equals(ErrorHandlerType.TransactionErrorHandler)) { + throw new IllegalArgumentException("Attribute transactionManagerRef can only be used if type is " + + ErrorHandlerType.TransactionErrorHandler.name() + ", in error handler with id: " + id); + } + String useOriginalMessage = element.getAttribute("useOriginalMessage"); + if (ObjectHelper.isNotEmpty(useOriginalMessage) && (type.equals(ErrorHandlerType.LoggingErrorHandler) || type.equals(ErrorHandlerType.NoErrorHandler))) { + throw new IllegalArgumentException("Attribute useOriginalMessage is not supported by error handler type: " + + type.name() + ", in error handler with id: " + id); + } + String onRedeliveryRef = element.getAttribute("onRedeliveryRef"); + if (ObjectHelper.isNotEmpty(onRedeliveryRef) && (type.equals(ErrorHandlerType.LoggingErrorHandler) || type.equals(ErrorHandlerType.NoErrorHandler))) { + throw new IllegalArgumentException("Attribute onRedeliveryRef is not supported by error handler type: " + + type.name() + ", in error handler with id: " + id); + } + String retryWhileRef = element.getAttribute("retryWhileRef"); + if (ObjectHelper.isNotEmpty(retryWhileRef) && (type.equals(ErrorHandlerType.LoggingErrorHandler) || type.equals(ErrorHandlerType.NoErrorHandler))) { + throw new IllegalArgumentException("Attribute retryWhileRef is not supported by error handler type: " + + type.name() + ", in error handler with id: " + id); + } + String redeliveryPolicyRef = element.getAttribute("redeliveryPolicyRef"); + if (ObjectHelper.isNotEmpty(redeliveryPolicyRef) && (type.equals(ErrorHandlerType.LoggingErrorHandler) || type.equals(ErrorHandlerType.NoErrorHandler))) { + throw new IllegalArgumentException("Attribute redeliveryPolicyRef is not supported by error handler type: " + + type.name() + ", in error handler with id: " + id); } } Modified: camel/trunk/components/camel-spring/src/main/resources/org/apache/camel/spring/jaxb.index URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/resources/org/apache/camel/spring/jaxb.index?rev=1070270&r1=1070269&r2=1070270&view=diff ============================================================================== --- camel/trunk/components/camel-spring/src/main/resources/org/apache/camel/spring/jaxb.index (original) +++ camel/trunk/components/camel-spring/src/main/resources/org/apache/camel/spring/jaxb.index Sun Feb 13 17:59:05 2011 @@ -19,5 +19,6 @@ CamelConsumerTemplateFactoryBean CamelContextFactoryBean CamelEndpointFactoryBean CamelProducerTemplateFactoryBean +CamelRedeliveryPolicyFactoryBean CamelRouteContextFactoryBean CamelThreadPoolFactoryBean Copied: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionRefTest.java (from r1070059, 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/SpringPropertiesComponentOnExceptionRefTest.java?p2=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionRefTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.java&r1=1070059&r2=1070270&rev=1070270&view=diff ============================================================================== --- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.java (original) +++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionRefTest.java Sun Feb 13 17:59:05 2011 @@ -23,10 +23,10 @@ import static org.apache.camel.spring.pr /** * @version $Revision$ */ -public class SpringPropertiesComponentOnExceptionTest extends PropertiesComponentOnExceptionTest { +public class SpringPropertiesComponentOnExceptionRefTest extends PropertiesComponentOnExceptionTest { protected CamelContext createCamelContext() throws Exception { - return createSpringCamelContext(this, "org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.xml"); + return createSpringCamelContext(this, "org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionRefTest.xml"); } } Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertyPlaceholderOnExceptionRefTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertyPlaceholderOnExceptionRefTest.java?rev=1070270&view=auto ============================================================================== --- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertyPlaceholderOnExceptionRefTest.java (added) +++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertyPlaceholderOnExceptionRefTest.java Sun Feb 13 17:59:05 2011 @@ -0,0 +1,34 @@ +/** + * 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; + +/** + * Using Spring property placeholder instead of Camel properties component. + * + * @version $Revision$ + */ +public class SpringPropertyPlaceholderOnExceptionRefTest extends PropertiesComponentOnExceptionTest { + + protected CamelContext createCamelContext() throws Exception { + return createSpringCamelContext(this, "org/apache/camel/component/properties/SpringPropertyPlaceholderOnExceptionRefTest.xml"); + } + +} Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringErrorHandlerRedeliveryPolicyProfileTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringErrorHandlerRedeliveryPolicyProfileTest.java?rev=1070270&view=auto ============================================================================== --- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringErrorHandlerRedeliveryPolicyProfileTest.java (added) +++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringErrorHandlerRedeliveryPolicyProfileTest.java Sun Feb 13 17:59:05 2011 @@ -0,0 +1,41 @@ +/** + * 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.spring.processor; + +import org.apache.camel.spring.SpringTestSupport; +import org.springframework.context.support.AbstractXmlApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +/** + * @version $Revision$ + */ +public class SpringErrorHandlerRedeliveryPolicyProfileTest extends SpringTestSupport { + + @Override + protected AbstractXmlApplicationContext createApplicationContext() { + return new ClassPathXmlApplicationContext("org/apache/camel/spring/processor/SpringErrorHandlerRedeliveryPolicyProfileTest.xml"); + } + + public void testErrorHandlerRedeliveryPolicyProfile() throws Exception { + try { + template.sendBody("direct:start", "Hello World"); + fail("Should have thrown an exception"); + } catch (Exception e) { + // expected + } + } +} Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionRefTest.xml (from r1070059, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.xml) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionRefTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionRefTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.xml&r1=1070059&r2=1070270&rev=1070270&view=diff ============================================================================== --- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionTest.xml (original) +++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertiesComponentOnExceptionRefTest.xml Sun Feb 13 17:59:05 2011 @@ -26,20 +26,31 @@ <constructor-arg index="0" value="Damn"/> </bean> + <!-- START SNIPPET: e1 --> + <camelContext xmlns="http://camel.apache.org/schema/spring"> + <!-- use Camel property placeholders --> <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> + <!-- setup endpoint --> + <endpoint id="dead" uri="mock:dead"/> + + <!-- setup a common redelivery policy, using property placeholders --> + <redeliveryPolicyProfile id="myRedelivery" redeliveryDelay="{{delay}}" maximumRedeliveries="{{max}}"/> <route> <from uri="direct:start"/> + <onException redeliveryPolicyRef="myRedelivery"> + <!-- refer to common redelivery policy --> + <exception>java.lang.Exception</exception> + <!-- but we can override the profile and log retry attempts at WARN level --> + <redeliveryPolicy logRetryAttempted="true" retryAttemptedLogLevel="WARN"/> + <to ref="dead"/> + </onException> <throwException ref="damn"/> </route> </camelContext> + <!-- END SNIPPET: e1 --> </beans> Added: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertyPlaceholderOnExceptionRefTest.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertyPlaceholderOnExceptionRefTest.xml?rev=1070270&view=auto ============================================================================== --- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertyPlaceholderOnExceptionRefTest.xml (added) +++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/properties/SpringPropertyPlaceholderOnExceptionRefTest.xml Sun Feb 13 17:59:05 2011 @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:context="http://www.springframework.org/schema/context" + xsi:schemaLocation=" + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd + http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd + "> + + <bean id="damn" class="java.lang.IllegalArgumentException"> + <constructor-arg index="0" value="Damn"/> + </bean> + + <!-- START SNIPPET: e1 --> + + <!-- use Spring property placeholder --> + <context:property-placeholder location="org/apache/camel/component/properties/cheese.properties"/> + + <camelContext xmlns="http://camel.apache.org/schema/spring"> + + <!-- setup endpoint --> + <endpoint id="dead" uri="mock:dead"/> + + <!-- setup a common redelivery policy, using Spring property placeholders --> + <redeliveryPolicyProfile id="myRedelivery" redeliveryDelay="${delay}" maximumRedeliveries="${max}"/> + + <route> + <from uri="direct:start"/> + <onException redeliveryPolicyRef="myRedelivery"> + <!-- refer to common redelivery policy --> + <exception>java.lang.Exception</exception> + <!-- but we can override the profile and log retry attempts at WARN level --> + <redeliveryPolicy logRetryAttempted="true" retryAttemptedLogLevel="WARN"/> + <to ref="dead"/> + </onException> + <throwException ref="damn"/> + </route> + + </camelContext> + <!-- END SNIPPET: e1 --> + +</beans> Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringErrorHandlerRedeliveryPolicyProfileTest.xml (from r1070041, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/choice.xml) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringErrorHandlerRedeliveryPolicyProfileTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringErrorHandlerRedeliveryPolicyProfileTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/choice.xml&r1=1070041&r2=1070270&rev=1070270&view=diff ============================================================================== --- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/choice.xml (original) +++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringErrorHandlerRedeliveryPolicyProfileTest.xml Sun Feb 13 17:59:05 2011 @@ -22,26 +22,25 @@ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd "> - <!-- START SNIPPET: example --> - <camelContext xmlns="http://camel.apache.org/schema/spring"> - <route> - <from uri="direct:start"/> - <choice> - <when> - <xpath>$foo = 'bar'</xpath> - <to uri="mock:x"/> - </when> - <when> - <xpath>$foo = 'cheese'</xpath> - <to uri="mock:y"/> - </when> - <otherwise> - <to uri="mock:z"/> - </otherwise> - </choice> - <to uri="mock:end"/> - </route> - </camelContext> - <!-- END SNIPPET: example --> + <bean id="damn" class="java.lang.IllegalArgumentException"> + <constructor-arg index="0" value="Damn"/> + </bean> + + <!-- START SNIPPET: e1 --> + <camelContext xmlns="http://camel.apache.org/schema/spring"> + + <!-- define the default error handler, and refer to a redelivery policy to use --> + <errorHandler id="eh" redeliveryPolicyRef="myPolicy"/> + + <!-- and the redelivery policy is a profile where we can configure it --> + <redeliveryPolicyProfile id="myPolicy" maximumRedeliveries="3" redeliveryDelay="25" retryAttemptedLogLevel="WARN"/> + + <route errorHandlerRef="eh"> + <from uri="direct:start"/> + <throwException ref="damn"/> + </route> + + </camelContext> + <!-- END SNIPPET: e1 --> </beans> Modified: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/RedeliveryPolicyRefTest.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/RedeliveryPolicyRefTest.xml?rev=1070270&r1=1070269&r2=1070270&view=diff ============================================================================== --- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/RedeliveryPolicyRefTest.xml (original) +++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/RedeliveryPolicyRefTest.xml Sun Feb 13 17:59:05 2011 @@ -42,13 +42,12 @@ <!-- define our error handler as a global error handler --> <camelContext errorHandlerRef="errorHandler" xmlns="http://camel.apache.org/schema/spring"> - <onException> + <onException redeliveryPolicyRef="myRedeliveryPolicy"> + <!-- here we reference our redelivery policy --> <!-- the exception is full qualified names as plain strings --> <!-- there can be more just add a 2nd, 3rd exception element (unbounded) --> <exception>org.apache.camel.spring.processor.onexception.OrderFailedException</exception> <exception>java.lang.IllegalArgumentException</exception> - <!-- here we reference our redelivy policy --> - <redeliveryPolicy ref="myRedeliveryPolicy" /> <!-- mark this as handled --> <handled> <constant>true</constant>