001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.camel.spring.spi;
018
019 import org.apache.camel.Processor;
020 import org.apache.camel.builder.ErrorHandlerBuilder;
021 import org.apache.camel.builder.ErrorHandlerBuilderSupport;
022 import org.apache.camel.processor.DelayPolicy;
023 import org.apache.camel.processor.RedeliveryPolicy;
024 import org.apache.camel.spi.RouteContext;
025 import org.apache.camel.util.ObjectHelper;
026 import org.springframework.beans.factory.InitializingBean;
027 import org.springframework.transaction.support.TransactionTemplate;
028
029 /**
030 * An error handler which will roll the exception back if there is an error
031 * rather than using the dead letter channel and retry logic.
032 *
033 * A delay is also used after a rollback
034 *
035 * @version $Revision: 693940 $
036 */
037 public class TransactionErrorHandlerBuilder extends ErrorHandlerBuilderSupport implements Cloneable, InitializingBean {
038
039 private TransactionTemplate transactionTemplate;
040 private RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
041 private DelayPolicy delayPolicy = new DelayPolicy();
042
043 public TransactionErrorHandlerBuilder() {
044 }
045
046 public TransactionTemplate getTransactionTemplate() {
047 return transactionTemplate;
048 }
049
050 public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
051 this.transactionTemplate = transactionTemplate;
052 }
053
054 /**
055 * @deprecated use setDelayPolicy. Will be removed in Camel 2.0
056 */
057 public RedeliveryPolicy getRedeliveryPolicy() {
058 return redeliveryPolicy;
059 }
060
061 /**
062 * @deprecated use setDelayPolicy. Will be removed in Camel 2.0
063 */
064 public void setRedeliveryPolicy(RedeliveryPolicy redeliveryPolicy) {
065 this.redeliveryPolicy = redeliveryPolicy;
066 }
067
068 public DelayPolicy getDelayPolicy() {
069 return delayPolicy;
070 }
071
072 public void setDelayPolicy(DelayPolicy delayPolicy) {
073 this.delayPolicy = delayPolicy;
074 }
075
076 public ErrorHandlerBuilder copy() {
077 try {
078 return (ErrorHandlerBuilder) clone();
079 } catch (CloneNotSupportedException e) {
080 throw new Error("Clone should be supported: " + e, e);
081 }
082 }
083
084 public Processor createErrorHandler(RouteContext routeContext, Processor processor) throws Exception {
085 return new TransactionInterceptor(processor, transactionTemplate, delayPolicy);
086 }
087
088 public void afterPropertiesSet() throws Exception {
089 ObjectHelper.notNull(transactionTemplate, "transactionTemplate");
090 }
091
092 // Builder methods
093 // -------------------------------------------------------------------------
094 /**
095 * @deprecated will be removed in Camel 2.0
096 */
097 public TransactionErrorHandlerBuilder backOffMultiplier(double backOffMultiplier) {
098 getRedeliveryPolicy().backOffMultiplier(backOffMultiplier);
099 return this;
100 }
101
102 /**
103 * @deprecated will be removed in Camel 2.0
104 */
105 public TransactionErrorHandlerBuilder collisionAvoidancePercent(short collisionAvoidancePercent) {
106 getRedeliveryPolicy().collisionAvoidancePercent(collisionAvoidancePercent);
107 return this;
108 }
109
110 /**
111 * @deprecated use delay - will be removed in Camel 2.0
112 */
113 public TransactionErrorHandlerBuilder initialRedeliveryDelay(long initialRedeliveryDelay) {
114 getDelayPolicy().delay(initialRedeliveryDelay);
115 return this;
116 }
117
118 /**
119 * @deprecated will be removed in Camel 2.0
120 */
121 public TransactionErrorHandlerBuilder maximumRedeliveries(int maximumRedeliveries) {
122 getRedeliveryPolicy().maximumRedeliveries(maximumRedeliveries);
123 return this;
124 }
125
126 /**
127 * @deprecated will be removed in Camel 2.0
128 */
129 public TransactionErrorHandlerBuilder maximumRedeliveryDelay(long maximumRedeliveryDelay) {
130 getRedeliveryPolicy().maximumRedeliveryDelay(maximumRedeliveryDelay);
131 return this;
132 }
133
134 /**
135 * @deprecated will be removed in Camel 2.0
136 */
137 public TransactionErrorHandlerBuilder useCollisionAvoidance() {
138 getRedeliveryPolicy().useCollisionAvoidance();
139 return this;
140 }
141
142 /**
143 * @deprecated will be removed in Camel 2.0
144 */
145 public TransactionErrorHandlerBuilder useExponentialBackOff() {
146 getRedeliveryPolicy().useExponentialBackOff();
147 return this;
148 }
149
150 public TransactionErrorHandlerBuilder delay(long delay) {
151 getDelayPolicy().delay(delay);
152 return this;
153 }
154
155 }