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.management.mbean;
018
019 import org.apache.camel.LoggingLevel;
020 import org.apache.camel.Processor;
021 import org.apache.camel.builder.ErrorHandlerBuilder;
022 import org.apache.camel.processor.ErrorHandlerSupport;
023 import org.apache.camel.processor.RedeliveryErrorHandler;
024 import org.apache.camel.spi.ManagementStrategy;
025 import org.apache.camel.spi.RouteContext;
026 import org.springframework.jmx.export.annotation.ManagedAttribute;
027 import org.springframework.jmx.export.annotation.ManagedResource;
028
029 /**
030 * @version $Revision: 905292 $
031 */
032 @ManagedResource(description = "Managed ErrorHandler")
033 public class ManagedErrorHandler {
034
035 private RouteContext routeContext;
036 private Processor errorHandler;
037 private ErrorHandlerBuilder errorHandlerBuilder;
038
039 public ManagedErrorHandler(RouteContext routeContext, Processor errorHandler, ErrorHandlerBuilder builder) {
040 this.routeContext = routeContext;
041 this.errorHandler = errorHandler;
042 this.errorHandlerBuilder = builder;
043 }
044
045 public void init(ManagementStrategy strategy) {
046 // do nothing
047 }
048
049 public RouteContext getRouteContext() {
050 return routeContext;
051 }
052
053 public Processor getErrorHandler() {
054 return errorHandler;
055 }
056
057 public ErrorHandlerBuilder getErrorHandlerBuilder() {
058 return errorHandlerBuilder;
059 }
060
061 @ManagedAttribute(description = "Camel id")
062 public String getCamelId() {
063 return routeContext.getCamelContext().getName();
064 }
065
066 @ManagedAttribute(description = "Does the error handler support redelivery")
067 public boolean isSupportRedelivery() {
068 return errorHandler instanceof RedeliveryErrorHandler;
069 }
070
071 @ManagedAttribute(description = "Is this error handler a dead letter channel")
072 public boolean isDeadLetterChannel() {
073 if (!isSupportRedelivery()) {
074 return false;
075 }
076
077 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
078 return redelivery.getDeadLetter() != null;
079 }
080
081 @ManagedAttribute(description = "When a message is moved to dead letter channel is it the original message or recent message")
082 public boolean isDeadLetterUseOriginalMessage() {
083 if (!isSupportRedelivery()) {
084 return false;
085 }
086
087 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
088 return redelivery.isUseOriginalMessagePolicy();
089 }
090
091 @ManagedAttribute(description = "Does this error handler support transactions")
092 public boolean isSupportTransactions() {
093 if (errorHandler instanceof ErrorHandlerSupport) {
094 ErrorHandlerSupport ehs = (ErrorHandlerSupport) errorHandler;
095 return ehs.supportTransacted();
096 } else {
097 return false;
098 }
099 }
100
101 @ManagedAttribute(description = "Endpoint Uri for the dead letter channel where dead message is move to")
102 public String getDeadLetterChannelEndpointUri() {
103 if (!isSupportRedelivery()) {
104 return null;
105 }
106
107 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
108 return redelivery.getDeadLetterUri();
109 }
110
111 @ManagedAttribute(description = "RedeliveryPolicy for maximum redeliveries")
112 public Integer getMaximumRedeliveries() {
113 if (!isSupportRedelivery()) {
114 return null;
115 }
116
117 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
118 return redelivery.getRedeliveryPolicy().getMaximumRedeliveries();
119 }
120
121 @ManagedAttribute(description = "RedeliveryPolicy for maximum redeliveries")
122 public void setMaximumRedeliveries(Integer maximum) {
123 if (!isSupportRedelivery()) {
124 throw new IllegalArgumentException("This error handler does not support redelivery");
125 }
126
127 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
128 redelivery.getRedeliveryPolicy().setMaximumRedeliveries(maximum);
129 }
130
131 @ManagedAttribute(description = "RedeliveryPolicy for maximum redelivery delay")
132 public Long getMaximumRedeliveryDelay() {
133 if (!isSupportRedelivery()) {
134 return null;
135 }
136
137 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
138 return redelivery.getRedeliveryPolicy().getMaximumRedeliveryDelay();
139 }
140
141 @ManagedAttribute(description = "RedeliveryPolicy for maximum redelivery delay")
142 public void setMaximumRedeliveryDelay(Long delay) {
143 if (!isSupportRedelivery()) {
144 throw new IllegalArgumentException("This error handler does not support redelivery");
145 }
146
147 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
148 redelivery.getRedeliveryPolicy().setMaximumRedeliveryDelay(delay);
149 }
150
151 @ManagedAttribute(description = "RedeliveryPolicy for redelivery delay")
152 public Long getRedeliveryDelay() {
153 if (!isSupportRedelivery()) {
154 return null;
155 }
156
157 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
158 return redelivery.getRedeliveryPolicy().getRedeliverDelay();
159 }
160
161 @ManagedAttribute(description = "RedeliveryPolicy for redelivery delay")
162 public void setRedeliveryDelay(Long delay) {
163 if (!isSupportRedelivery()) {
164 throw new IllegalArgumentException("This error handler does not support redelivery");
165 }
166
167 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
168 redelivery.getRedeliveryPolicy().setRedeliverDelay(delay);
169 }
170
171 @ManagedAttribute(description = "RedeliveryPolicy for backoff multipler")
172 public Double getBackOffMultiplier() {
173 if (!isSupportRedelivery()) {
174 return null;
175 }
176
177 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
178 return redelivery.getRedeliveryPolicy().getBackOffMultiplier();
179 }
180
181 @ManagedAttribute(description = "RedeliveryPolicy for backoff multipler")
182 public void setBackOffMultiplier(Double multiplier) {
183 if (!isSupportRedelivery()) {
184 throw new IllegalArgumentException("This error handler does not support redelivery");
185 }
186
187 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
188 redelivery.getRedeliveryPolicy().setBackOffMultiplier(multiplier);
189 }
190
191 @ManagedAttribute(description = "RedeliveryPolicy for collision avoidance factor")
192 public Double getCollisionAvoidanceFactor() {
193 if (!isSupportRedelivery()) {
194 return null;
195 }
196
197 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
198 return redelivery.getRedeliveryPolicy().getCollisionAvoidanceFactor();
199 }
200
201 @ManagedAttribute(description = "RedeliveryPolicy for collision avoidance factor")
202 public void setCollisionAvoidanceFactor(Double factor) {
203 if (!isSupportRedelivery()) {
204 throw new IllegalArgumentException("This error handler does not support redelivery");
205 }
206
207 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
208 redelivery.getRedeliveryPolicy().setCollisionAvoidanceFactor(factor);
209 }
210
211 @ManagedAttribute(description = "RedeliveryPolicy for collision avoidance percent")
212 public Double getCollisionAvoidancePercent() {
213 if (!isSupportRedelivery()) {
214 return null;
215 }
216
217 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
218 return (double) redelivery.getRedeliveryPolicy().getCollisionAvoidancePercent();
219 }
220
221 @ManagedAttribute(description = "RedeliveryPolicy for collision avoidance percent")
222 public void setCollisionAvoidancePercent(Double percent) {
223 if (!isSupportRedelivery()) {
224 throw new IllegalArgumentException("This error handler does not support redelivery");
225 }
226
227 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
228 redelivery.getRedeliveryPolicy().setCollisionAvoidancePercent(percent);
229 }
230
231 @ManagedAttribute(description = "RedeliveryPolicy for delay pattern")
232 public String getDelayPattern() {
233 if (!isSupportRedelivery()) {
234 return null;
235 }
236
237 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
238 return redelivery.getRedeliveryPolicy().getDelayPattern();
239 }
240
241 @ManagedAttribute(description = "RedeliveryPolicy for delay pattern")
242 public void setDelayPattern(String pattern) {
243 if (!isSupportRedelivery()) {
244 throw new IllegalArgumentException("This error handler does not support redelivery");
245 }
246
247 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
248 redelivery.getRedeliveryPolicy().setDelayPattern(pattern);
249 }
250
251 @ManagedAttribute(description = "RedeliveryPolicy for logging level when retries exhausted")
252 public String getRetriesExhaustedLogLevel() {
253 if (!isSupportRedelivery()) {
254 return null;
255 }
256
257 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
258 return redelivery.getRedeliveryPolicy().getRetriesExhaustedLogLevel().name();
259 }
260
261 @ManagedAttribute(description = "RedeliveryPolicy for logging level when retries exhausted")
262 public void setRetriesExhaustedLogLevel(String level) {
263 if (!isSupportRedelivery()) {
264 throw new IllegalArgumentException("This error handler does not support redelivery");
265 }
266
267 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
268 redelivery.getRedeliveryPolicy().setRetriesExhaustedLogLevel(LoggingLevel.valueOf(level));
269 }
270
271 @ManagedAttribute(description = "RedeliveryPolicy for logging level when attempting retry")
272 public String getRetryAttemptedLogLevel() {
273 if (!isSupportRedelivery()) {
274 return null;
275 }
276
277 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
278 return redelivery.getRedeliveryPolicy().getRetryAttemptedLogLevel().name();
279 }
280
281 @ManagedAttribute(description = "RedeliveryPolicy for logging level when attempting retry")
282 public void setRetryAttemptedLogLevel(String level) {
283 if (!isSupportRedelivery()) {
284 throw new IllegalArgumentException("This error handler does not support redelivery");
285 }
286
287 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
288 redelivery.getRedeliveryPolicy().setRetryAttemptedLogLevel(LoggingLevel.valueOf(level));
289 }
290
291 @ManagedAttribute(description = "RedeliveryPolicy for logging stack traces")
292 public Boolean getLogStackTrace() {
293 if (!isSupportRedelivery()) {
294 return null;
295 }
296
297 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
298 return redelivery.getRedeliveryPolicy().isLogStackTrace();
299 }
300
301 @ManagedAttribute(description = "RedeliveryPolicy for logging stack traces")
302 public void setLogStackTrace(Boolean log) {
303 if (!isSupportRedelivery()) {
304 throw new IllegalArgumentException("This error handler does not support redelivery");
305 }
306
307 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
308 redelivery.getRedeliveryPolicy().setLogStackTrace(log);
309 }
310
311 @ManagedAttribute(description = "RedeliveryPolicy for logging redelivery stack traces")
312 public Boolean getLogRetryStackTrace() {
313 if (!isSupportRedelivery()) {
314 return null;
315 }
316
317 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
318 return redelivery.getRedeliveryPolicy().isLogRetryStackTrace();
319 }
320
321 @ManagedAttribute(description = "RedeliveryPolicy for logging redelivery stack traces")
322 public void setLogRetryStackTrace(Boolean log) {
323 if (!isSupportRedelivery()) {
324 throw new IllegalArgumentException("This error handler does not support redelivery");
325 }
326
327 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
328 redelivery.getRedeliveryPolicy().setLogRetryStackTrace(log);
329 }
330
331 @ManagedAttribute(description = "RedeliveryPolicy for using collision avoidance")
332 public Boolean getUseCollisionAvoidance() {
333 if (!isSupportRedelivery()) {
334 return null;
335 }
336
337 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
338 return redelivery.getRedeliveryPolicy().isUseCollisionAvoidance();
339 }
340
341 @ManagedAttribute(description = "RedeliveryPolicy for using collision avoidance")
342 public void setUseCollisionAvoidance(Boolean avoidance) {
343 if (!isSupportRedelivery()) {
344 throw new IllegalArgumentException("This error handler does not support redelivery");
345 }
346
347 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
348 redelivery.getRedeliveryPolicy().setUseCollisionAvoidance(avoidance);
349 }
350
351 @ManagedAttribute(description = "RedeliveryPolicy for using exponential backoff")
352 public Boolean getUseExponentialBackOff() {
353 if (!isSupportRedelivery()) {
354 return null;
355 }
356
357 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
358 return redelivery.getRedeliveryPolicy().isUseExponentialBackOff();
359 }
360
361 @ManagedAttribute(description = "RedeliveryPolicy for using exponential backoff")
362 public void setUseExponentialBackOff(Boolean backoff) {
363 if (!isSupportRedelivery()) {
364 throw new IllegalArgumentException("This error handler does not support redelivery");
365 }
366
367 RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
368 redelivery.getRedeliveryPolicy().setUseExponentialBackOff(backoff);
369 }
370
371 }