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