INT-1489: inspect router to see if it is Advised

- Switch to proxy approach for handler monitor
- Add router mbean integration test
This commit is contained in:
Dave Syer
2010-10-05 13:12:58 -07:00
parent 8cf6e474d2
commit 07043a8875
7 changed files with 162 additions and 35 deletions

View File

@@ -167,8 +167,9 @@ public class IntegrationMBeanExporter extends MBeanExporter implements BeanPostP
else {
monitor = new SimpleMessageHandlerMonitor((MessageHandler) bean);
}
Object advised = applyHandlerInterceptor(bean, monitor, beanClassLoader);
handlers.add(monitor);
return monitor;
return advised;
}
if (bean instanceof MessageChannel) {
DirectChannelMonitor monitor;
@@ -404,6 +405,12 @@ public class IntegrationMBeanExporter extends MBeanExporter implements BeanPostP
return applyAdvice(bean, channelsAdvice, beanClassLoader);
}
private Object applyHandlerInterceptor(Object bean, SimpleMessageHandlerMonitor interceptor, ClassLoader beanClassLoader) {
NameMatchMethodPointcutAdvisor handlerAdvice = new NameMatchMethodPointcutAdvisor(interceptor);
handlerAdvice.addMethodName("handleMessage");
return applyAdvice(bean, handlerAdvice, beanClassLoader);
}
private Object extractTarget(Object bean) {
if (!(bean instanceof Advised)) {
return bean;

View File

@@ -17,6 +17,8 @@ package org.springframework.integration.monitor;
import java.util.concurrent.atomic.AtomicInteger;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.integration.Message;
@@ -36,7 +38,7 @@ import org.springframework.util.StopWatch;
*
*/
@ManagedResource
public class SimpleMessageHandlerMonitor implements MessageHandler, MessageHandlerMonitor {
public class SimpleMessageHandlerMonitor implements MethodInterceptor, MessageHandlerMonitor {
private static final Log logger = LogFactory.getLog(SimpleMessageHandlerMonitor.class);
@@ -81,7 +83,17 @@ public class SimpleMessageHandlerMonitor implements MessageHandler, MessageHandl
return handler;
}
public void handleMessage(Message<?> message) throws MessageRejectedException, MessageHandlingException,
public Object invoke(MethodInvocation invocation) throws Throwable {
String method = invocation.getMethod().getName();
if ("handleMessage".equals(method)) {
Message<?> message = (Message<?>) invocation.getArguments()[0];
handleMessage(message);
return null;
}
return invocation.proceed();
}
private void handleMessage(Message<?> message) throws MessageRejectedException, MessageHandlingException,
MessageDeliveryException {
if (logger.isTraceEnabled()) {
logger.trace("messageHandler(" + handler + ") message(" + message + ") :");