/**
* 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.management.mbean;
import org.apache.camel.ErrorHandlerFactory;
import org.apache.camel.LoggingLevel;
import org.apache.camel.Processor;
import org.apache.camel.api.management.ManagedResource;
import org.apache.camel.api.management.mbean.ManagedErrorHandlerMBean;
import org.apache.camel.processor.ErrorHandlerSupport;
import org.apache.camel.processor.RedeliveryErrorHandler;
import org.apache.camel.spi.ManagementStrategy;
import org.apache.camel.spi.RouteContext;
/**
* @version
*/
@ManagedResource(description = "Managed ErrorHandler")
public class ManagedErrorHandler implements ManagedErrorHandlerMBean {
private final RouteContext routeContext;
private final Processor errorHandler;
private final ErrorHandlerFactory errorHandlerBuilder;
public ManagedErrorHandler(RouteContext routeContext, Processor errorHandler, ErrorHandlerFactory builder) {
this.routeContext = routeContext;
this.errorHandler = errorHandler;
this.errorHandlerBuilder = builder;
}
public void init(ManagementStrategy strategy) {
// do nothing
}
public RouteContext getRouteContext() {
return routeContext;
}
public Processor getErrorHandler() {
return errorHandler;
}
public ErrorHandlerFactory getErrorHandlerBuilder() {
return errorHandlerBuilder;
}
public String getCamelId() {
return routeContext.getCamelContext().getName();
}
public String getCamelManagementName() {
return routeContext.getCamelContext().getManagementName();
}
public boolean isSupportRedelivery() {
return errorHandler instanceof RedeliveryErrorHandler;
}
public boolean isDeadLetterChannel() {
if (!isSupportRedelivery()) {
return false;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getDeadLetter() != null;
}
public boolean isDeadLetterUseOriginalMessage() {
if (!isSupportRedelivery()) {
return false;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.isUseOriginalMessagePolicy();
}
public boolean isDeadLetterHandleNewException() {
if (!isSupportRedelivery()) {
return false;
}
// must be a dead letter channel
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return isDeadLetterChannel() && redelivery.isDeadLetterHandleNewException();
}
public boolean isSupportTransactions() {
if (errorHandler instanceof ErrorHandlerSupport) {
ErrorHandlerSupport ehs = (ErrorHandlerSupport) errorHandler;
return ehs.supportTransacted();
} else {
return false;
}
}
public String getDeadLetterChannelEndpointUri() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getDeadLetterUri();
}
public Integer getMaximumRedeliveries() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().getMaximumRedeliveries();
}
public void setMaximumRedeliveries(Integer maximum) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setMaximumRedeliveries(maximum);
}
public Long getMaximumRedeliveryDelay() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().getMaximumRedeliveryDelay();
}
public void setMaximumRedeliveryDelay(Long delay) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setMaximumRedeliveryDelay(delay);
}
public Long getRedeliveryDelay() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().getRedeliveryDelay();
}
public void setRedeliveryDelay(Long delay) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setRedeliveryDelay(delay);
}
public Double getBackOffMultiplier() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().getBackOffMultiplier();
}
public void setBackOffMultiplier(Double multiplier) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setBackOffMultiplier(multiplier);
}
public Double getCollisionAvoidanceFactor() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().getCollisionAvoidanceFactor();
}
public void setCollisionAvoidanceFactor(Double factor) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setCollisionAvoidanceFactor(factor);
}
public Double getCollisionAvoidancePercent() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return (double) redelivery.getRedeliveryPolicy().getCollisionAvoidancePercent();
}
public void setCollisionAvoidancePercent(Double percent) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setCollisionAvoidancePercent(percent);
}
public String getDelayPattern() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().getDelayPattern();
}
public void setDelayPattern(String pattern) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setDelayPattern(pattern);
}
public String getRetriesExhaustedLogLevel() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().getRetriesExhaustedLogLevel().name();
}
public void setRetriesExhaustedLogLevel(String level) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setRetriesExhaustedLogLevel(LoggingLevel.valueOf(level));
}
public String getRetryAttemptedLogLevel() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().getRetryAttemptedLogLevel().name();
}
public void setRetryAttemptedLogLevel(String level) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setRetryAttemptedLogLevel(LoggingLevel.valueOf(level));
}
public Boolean getLogStackTrace() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().isLogStackTrace();
}
public void setLogStackTrace(Boolean log) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setLogStackTrace(log);
}
public Boolean getLogRetryStackTrace() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().isLogRetryStackTrace();
}
public void setLogRetryStackTrace(Boolean log) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setLogRetryStackTrace(log);
}
public Boolean getLogHandled() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().isLogHandled();
}
public void setLogHandled(Boolean log) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setLogHandled(log);
}
public Boolean getLogNewException() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().isLogNewException();
}
public void setLogNewException(Boolean log) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setLogNewException(log);
}
public Boolean getLogExhaustedMessageHistory() {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().isLogExhaustedMessageHistory();
}
public void setLogExhaustedMessageHistory(Boolean log) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setLogExhaustedMessageHistory(log);
}
public Boolean getLogExhaustedMessageBody() {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().isLogExhaustedMessageBody();
}
public void setLogExhaustedMessageBody(Boolean log) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setLogExhaustedMessageBody(log);
}
public Boolean getLogContinued() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().isLogHandled();
}
public void setLogContinued(Boolean log) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setLogContinued(log);
}
public Boolean getLogExhausted() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().isLogExhausted();
}
public void setLogExhausted(Boolean log) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setLogExhausted(log);
}
public Boolean getUseCollisionAvoidance() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().isUseCollisionAvoidance();
}
public void setUseCollisionAvoidance(Boolean avoidance) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setUseCollisionAvoidance(avoidance);
}
public Boolean getUseExponentialBackOff() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().isUseExponentialBackOff();
}
public void setUseExponentialBackOff(Boolean backoff) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setUseExponentialBackOff(backoff);
}
public Boolean getAllowRedeliveryWhileStopping() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getRedeliveryPolicy().isAllowRedeliveryWhileStopping();
}
public void setAllowRedeliveryWhileStopping(Boolean allow) {
if (!isSupportRedelivery()) {
throw new IllegalArgumentException("This error handler does not support redelivery");
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
redelivery.getRedeliveryPolicy().setAllowRedeliveryWhileStopping(allow);
}
public Integer getPendingRedeliveryCount() {
if (!isSupportRedelivery()) {
return null;
}
RedeliveryErrorHandler redelivery = (RedeliveryErrorHandler) errorHandler;
return redelivery.getPendingRedeliveryCount();
}
}