JMX: remove duplicate annotations
This commit is contained in:
@@ -1,23 +1,21 @@
|
||||
/*
|
||||
* Copyright 2002-2010 the original author or authors.
|
||||
*
|
||||
* Licensed 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.
|
||||
*
|
||||
* Licensed 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.springframework.integration.handler;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.context.expression.MapAccessor;
|
||||
import org.springframework.expression.EvaluationContext;
|
||||
@@ -25,20 +23,22 @@ import org.springframework.expression.Expression;
|
||||
import org.springframework.expression.spel.standard.SpelExpressionParser;
|
||||
import org.springframework.expression.spel.support.StandardEvaluationContext;
|
||||
import org.springframework.integration.Message;
|
||||
import org.springframework.integration.dispatcher.AggregateMessageDeliveryException;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* MessageHandler implementation that simply logs the Message or its payload
|
||||
* depending on the value of the 'shouldLogFullMessage' property. If logging
|
||||
* the payload, and it is assignable to Throwable, it will log the stack trace.
|
||||
* By default, it will log the payload only.
|
||||
* MessageHandler implementation that simply logs the Message or its payload depending on the value of the
|
||||
* 'shouldLogFullMessage' property. If logging the payload, and it is assignable to Throwable, it will log the stack
|
||||
* trace. By default, it will log the payload only.
|
||||
*
|
||||
* @author Mark Fisher
|
||||
* @since 1.0.1
|
||||
*/
|
||||
public class LoggingHandler extends AbstractMessageHandler {
|
||||
|
||||
private static enum Level { FATAL, ERROR, WARN, INFO, DEBUG, TRACE }
|
||||
private static enum Level {
|
||||
FATAL, ERROR, WARN, INFO, DEBUG, TRACE
|
||||
}
|
||||
|
||||
private static final SpelExpressionParser EXPRESSION_PARSER = new SpelExpressionParser();
|
||||
|
||||
@@ -48,18 +48,18 @@ public class LoggingHandler extends AbstractMessageHandler {
|
||||
|
||||
private final EvaluationContext evaluationContext;
|
||||
|
||||
|
||||
/**
|
||||
* Create a LoggingHandler with the given log level (case-insensitive).
|
||||
* <p>The valid levels are: FATAL, ERROR, WARN, INFO, DEBUG, or TRACE
|
||||
* <p>
|
||||
* The valid levels are: FATAL, ERROR, WARN, INFO, DEBUG, or TRACE
|
||||
*/
|
||||
public LoggingHandler(String level) {
|
||||
try {
|
||||
this.level = Level.valueOf(level.toUpperCase());
|
||||
}
|
||||
catch (IllegalArgumentException e) {
|
||||
throw new IllegalArgumentException("Invalid log level '" + level +
|
||||
"'. The (case-insensitive) supported values are: " + StringUtils.arrayToCommaDelimitedString(Level.values()));
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new IllegalArgumentException("Invalid log level '" + level
|
||||
+ "'. The (case-insensitive) supported values are: "
|
||||
+ StringUtils.arrayToCommaDelimitedString(Level.values()));
|
||||
}
|
||||
StandardEvaluationContext evaluationContext = new StandardEvaluationContext();
|
||||
evaluationContext.addPropertyAccessor(new MapAccessor());
|
||||
@@ -67,18 +67,17 @@ public class LoggingHandler extends AbstractMessageHandler {
|
||||
this.expression = EXPRESSION_PARSER.parseExpression("payload");
|
||||
}
|
||||
|
||||
|
||||
public void setExpression(String expressionString) {
|
||||
this.expression = EXPRESSION_PARSER.parseExpression(expressionString);
|
||||
}
|
||||
|
||||
/**
|
||||
* Specify whether to log the full Message. Otherwise, only the payload
|
||||
* will be logged. This value is <code>false</code> by default.
|
||||
* Specify whether to log the full Message. Otherwise, only the payload will be logged. This value is
|
||||
* <code>false</code> by default.
|
||||
*/
|
||||
public void setShouldLogFullMessage(boolean shouldLogFullMessage) {
|
||||
this.expression = (shouldLogFullMessage) ? EXPRESSION_PARSER.parseExpression("#root")
|
||||
: EXPRESSION_PARSER.parseExpression("payload");
|
||||
this.expression = (shouldLogFullMessage) ? EXPRESSION_PARSER.parseExpression("#root") : EXPRESSION_PARSER
|
||||
.parseExpression("payload");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -91,40 +90,47 @@ public class LoggingHandler extends AbstractMessageHandler {
|
||||
Object logMessage = this.expression.getValue(this.evaluationContext, message);
|
||||
if (logMessage instanceof Throwable) {
|
||||
StringWriter stringWriter = new StringWriter();
|
||||
((Throwable) logMessage).printStackTrace(new PrintWriter(stringWriter, true));
|
||||
if (logMessage instanceof AggregateMessageDeliveryException) {
|
||||
stringWriter.append(((Throwable) logMessage).getMessage());
|
||||
for (Exception exception : (List<? extends Exception>) ((AggregateMessageDeliveryException)logMessage).getAggregatedExceptions()) {
|
||||
exception.printStackTrace(new PrintWriter(stringWriter, true));
|
||||
}
|
||||
} else {
|
||||
((Throwable) logMessage).printStackTrace(new PrintWriter(stringWriter, true));
|
||||
}
|
||||
logMessage = stringWriter.toString();
|
||||
}
|
||||
switch (this.level) {
|
||||
case FATAL :
|
||||
if (logger.isFatalEnabled()) {
|
||||
logger.fatal(logMessage);
|
||||
}
|
||||
break;
|
||||
case ERROR :
|
||||
if (logger.isErrorEnabled()) {
|
||||
logger.error(logMessage);
|
||||
}
|
||||
break;
|
||||
case WARN :
|
||||
if (logger.isWarnEnabled()) {
|
||||
logger.warn(logMessage);
|
||||
}
|
||||
break;
|
||||
case INFO :
|
||||
if (logger.isInfoEnabled()) {
|
||||
logger.info(logMessage);
|
||||
}
|
||||
break;
|
||||
case DEBUG :
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug(logMessage);
|
||||
}
|
||||
break;
|
||||
case TRACE :
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace(logMessage);
|
||||
}
|
||||
break;
|
||||
case FATAL:
|
||||
if (logger.isFatalEnabled()) {
|
||||
logger.fatal(logMessage);
|
||||
}
|
||||
break;
|
||||
case ERROR:
|
||||
if (logger.isErrorEnabled()) {
|
||||
logger.error(logMessage);
|
||||
}
|
||||
break;
|
||||
case WARN:
|
||||
if (logger.isWarnEnabled()) {
|
||||
logger.warn(logMessage);
|
||||
}
|
||||
break;
|
||||
case INFO:
|
||||
if (logger.isInfoEnabled()) {
|
||||
logger.info(logMessage);
|
||||
}
|
||||
break;
|
||||
case DEBUG:
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug(logMessage);
|
||||
}
|
||||
break;
|
||||
case TRACE:
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace(logMessage);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@ package org.springframework.integration.handler;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.integration.MessageChannel;
|
||||
import org.springframework.integration.support.MessageBuilder;
|
||||
@@ -42,7 +41,6 @@ public class LoggingHandlerTests {
|
||||
input.send(MessageBuilder.withPayload(bean).setHeader("foo", "bar").build());
|
||||
}
|
||||
|
||||
|
||||
public static class TestBean {
|
||||
|
||||
private final String name;
|
||||
|
||||
@@ -20,10 +20,7 @@ import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.integration.Message;
|
||||
import org.springframework.integration.MessageChannel;
|
||||
import org.springframework.jmx.export.annotation.ManagedMetric;
|
||||
import org.springframework.jmx.export.annotation.ManagedOperation;
|
||||
import org.springframework.jmx.export.annotation.ManagedResource;
|
||||
import org.springframework.jmx.support.MetricType;
|
||||
import org.springframework.util.StopWatch;
|
||||
|
||||
/**
|
||||
@@ -110,7 +107,7 @@ public class DirectChannelMetrics implements MethodInterceptor, MessageChannelMe
|
||||
timer.stop();
|
||||
if ((Boolean)result) {
|
||||
sendSuccessRatio.success();
|
||||
sendDuration.append(timer.getTotalTimeSeconds());
|
||||
sendDuration.append(timer.getTotalTimeMillis());
|
||||
} else {
|
||||
sendSuccessRatio.failure();
|
||||
sendErrorCount.incrementAndGet();
|
||||
@@ -132,7 +129,6 @@ public class DirectChannelMetrics implements MethodInterceptor, MessageChannelMe
|
||||
}
|
||||
}
|
||||
|
||||
@ManagedOperation
|
||||
public synchronized void reset() {
|
||||
sendDuration.reset();
|
||||
sendErrorRate.reset();
|
||||
@@ -142,52 +138,42 @@ public class DirectChannelMetrics implements MethodInterceptor, MessageChannelMe
|
||||
sendErrorCount.set(0);
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "MessageChannel Sends")
|
||||
public int getSendCount() {
|
||||
return sendCount.get();
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "MessageChannel Send Errors")
|
||||
public int getSendErrorCount() {
|
||||
return sendErrorCount.get();
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Channel Time Since Last Send in Seconds")
|
||||
public double getTimeSinceLastSend() {
|
||||
return sendRate.getTimeSinceLastMeasurement();
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Channel Send Rate per Second")
|
||||
public double getMeanSendRate() {
|
||||
return sendRate.getMean();
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Channel Error Rate per Second")
|
||||
public double getMeanErrorRate() {
|
||||
return sendErrorRate.getMean();
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Mean Channel Error Ratio per Minute")
|
||||
public double getMeanErrorRatio() {
|
||||
return 1 - sendSuccessRatio.getMean();
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Channel Send Mean Duration")
|
||||
public double getMeanSendDuration() {
|
||||
return sendDuration.getMean();
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Channel Send Min Duration")
|
||||
public double getMinSendDuration() {
|
||||
return sendDuration.getMin();
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Channel Send Max Duration")
|
||||
public double getMaxSendDuration() {
|
||||
return sendDuration.getMax();
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Channel Send Standard Deviation Duration")
|
||||
public double getStandardDeviationSendDuration() {
|
||||
return sendDuration.getStandardDeviation();
|
||||
}
|
||||
|
||||
@@ -56,7 +56,6 @@ public class LifecycleMessageHandlerMetrics implements MessageHandlerMetrics, Li
|
||||
lifecycle.stop();
|
||||
}
|
||||
|
||||
@ManagedOperation
|
||||
public void reset() {
|
||||
delegate.reset();
|
||||
}
|
||||
|
||||
@@ -32,37 +32,37 @@ public interface MessageHandlerMetrics {
|
||||
/**
|
||||
* @return the number of successful handler calls
|
||||
*/
|
||||
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Handler Execution Count", description = "rate=1h")
|
||||
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Handler Execution Count")
|
||||
int getHandleCount();
|
||||
|
||||
/**
|
||||
* @return the number of failed handler calls
|
||||
*/
|
||||
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Handler Error Count", description = "rate=1h")
|
||||
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Handler Error Count")
|
||||
int getErrorCount();
|
||||
|
||||
/**
|
||||
* @return the maximum handler duration (milliseconds)
|
||||
*/
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Handler Mean Duration")
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Handler Mean Duration (ms)")
|
||||
double getMeanDuration();
|
||||
|
||||
/**
|
||||
* @return the minimum handler duration (milliseconds)
|
||||
*/
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Handler Min Duration")
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Handler Min Duration (ms)")
|
||||
double getMinDuration();
|
||||
|
||||
/**
|
||||
* @return the standard deviation handler duration (milliseconds)
|
||||
*/
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Handler Max Duration")
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Handler Max Duration (ms)")
|
||||
double getMaxDuration();
|
||||
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Handler Standard Deviation Duration")
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Handler Standard Deviation Duration (ms)")
|
||||
double getStandardDeviationDuration();
|
||||
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Handler Active Status")
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Handler Active Count")
|
||||
int getActiveCount();
|
||||
|
||||
/**
|
||||
|
||||
@@ -26,10 +26,7 @@ import org.springframework.integration.MessageDeliveryException;
|
||||
import org.springframework.integration.MessageHandlingException;
|
||||
import org.springframework.integration.MessageRejectedException;
|
||||
import org.springframework.integration.core.MessageHandler;
|
||||
import org.springframework.jmx.export.annotation.ManagedMetric;
|
||||
import org.springframework.jmx.export.annotation.ManagedOperation;
|
||||
import org.springframework.jmx.export.annotation.ManagedResource;
|
||||
import org.springframework.jmx.support.MetricType;
|
||||
import org.springframework.util.StopWatch;
|
||||
|
||||
/**
|
||||
@@ -114,7 +111,7 @@ public class SimpleMessageHandlerMetrics implements MethodInterceptor, MessageHa
|
||||
handler.handleMessage(message);
|
||||
|
||||
timer.stop();
|
||||
duration.append(timer.getTotalTimeSeconds());
|
||||
duration.append(timer.getTotalTimeMillis());
|
||||
} catch (RuntimeException e) {
|
||||
errorCount.incrementAndGet();
|
||||
throw e;
|
||||
@@ -126,14 +123,12 @@ public class SimpleMessageHandlerMetrics implements MethodInterceptor, MessageHa
|
||||
}
|
||||
}
|
||||
|
||||
@ManagedOperation
|
||||
public synchronized void reset() {
|
||||
duration.reset();
|
||||
errorCount.set(0);
|
||||
handleCount.set(0);
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Handler Execution Count", description = "rate=1h")
|
||||
public int getHandleCount() {
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace("Getting Handle Count:" + this);
|
||||
@@ -141,32 +136,26 @@ public class SimpleMessageHandlerMetrics implements MethodInterceptor, MessageHa
|
||||
return handleCount.get();
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Handler Error Count", description = "rate=1h")
|
||||
public int getErrorCount() {
|
||||
return errorCount.get();
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Handler Mean Duration")
|
||||
public double getMeanDuration() {
|
||||
return duration.getMean();
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Handler Min Duration")
|
||||
public double getMinDuration() {
|
||||
return duration.getMin();
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Handler Max Duration")
|
||||
public double getMaxDuration() {
|
||||
return duration.getMax();
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Handler Standard Deviation Duration")
|
||||
public double getStandardDeviationDuration() {
|
||||
return duration.getStandardDeviation();
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Handler Active Count")
|
||||
public int getActiveCount() {
|
||||
return activeCount.get();
|
||||
}
|
||||
|
||||
@@ -18,9 +18,6 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
import org.aopalliance.intercept.MethodInterceptor;
|
||||
import org.aopalliance.intercept.MethodInvocation;
|
||||
import org.springframework.integration.core.MessageSource;
|
||||
import org.springframework.jmx.export.annotation.ManagedMetric;
|
||||
import org.springframework.jmx.export.annotation.ManagedOperation;
|
||||
import org.springframework.jmx.support.MetricType;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
@@ -62,12 +59,10 @@ public class SimpleMessageSourceMetrics implements MethodInterceptor, MessageSou
|
||||
return messageSource;
|
||||
}
|
||||
|
||||
@ManagedOperation
|
||||
public void reset() {
|
||||
messageCount.set(0);
|
||||
}
|
||||
|
||||
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Message Source Message Count")
|
||||
public int getMessageCount() {
|
||||
return messageCount.get();
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ package org.springframework.integration.jmx.config;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.management.MBeanServer;
|
||||
@@ -46,6 +47,7 @@ public class MBeanRegistrationTests {
|
||||
@Test
|
||||
public void testExporterMBeanRegistration() throws Exception {
|
||||
// System.err.println(server.queryNames(new ObjectName("*:type=*MBeanExporter,*"), null));
|
||||
System.err.println(Arrays.asList(server.getMBeanInfo(server.queryNames(new ObjectName("*:type=*Handler,*"), null).iterator().next()).getAttributes()));
|
||||
Set<ObjectName> names = server.queryNames(new ObjectName("test.MBeanRegistration:type=IntegrationMBeanExporter,name=integrationMbeanExporter,*"), null);
|
||||
assertEquals(1, names.size());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user