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