From 1b3e7ce6e9cbb01eff121adf603ff0a282c05121 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Wed, 9 Mar 2011 12:49:04 -0500 Subject: [PATCH] INT-1816 added support for multiple non-conflicting mbean exporters --- .../NotificationPublishingMessageHandler.java | 10 +++++----- ...tificationPublishingMessageHandlerTests.java | 17 +++++++++++------ ...lishingChannelAdapterParserTests-context.xml | 1 + 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/spring-integration-jmx/src/main/java/org/springframework/integration/jmx/NotificationPublishingMessageHandler.java b/spring-integration-jmx/src/main/java/org/springframework/integration/jmx/NotificationPublishingMessageHandler.java index 72aa1f0f2a..dc8a4f94c3 100644 --- a/spring-integration-jmx/src/main/java/org/springframework/integration/jmx/NotificationPublishingMessageHandler.java +++ b/spring-integration-jmx/src/main/java/org/springframework/integration/jmx/NotificationPublishingMessageHandler.java @@ -29,7 +29,7 @@ import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.integration.Message; import org.springframework.integration.handler.AbstractMessageHandler; import org.springframework.integration.mapping.OutboundMessageMapper; -import org.springframework.jmx.export.MBeanExporter; +import org.springframework.integration.monitor.IntegrationMBeanExporter; import org.springframework.jmx.export.annotation.ManagedResource; import org.springframework.jmx.export.notification.NotificationPublisher; import org.springframework.jmx.export.notification.NotificationPublisherAware; @@ -90,12 +90,12 @@ public class NotificationPublishingMessageHandler extends AbstractMessageHandler @Override public final void onInit() throws Exception { Assert.isTrue(this.getBeanFactory() instanceof ListableBeanFactory, "A ListableBeanFactory is required."); - Map exporters = BeanFactoryUtils.beansOfTypeIncludingAncestors( - (ListableBeanFactory) this.getBeanFactory(), MBeanExporter.class); + Map exporters = BeanFactoryUtils.beansOfTypeIncludingAncestors( + (ListableBeanFactory) this.getBeanFactory(), IntegrationMBeanExporter.class); Assert.isTrue(exporters.size() == 1, - "No unique MBeanExporter is available in the current context (found " + + "No unique IntegrationMBeanExporter is available in the current context (found " + exporters.size() + ")."); - MBeanExporter exporter = exporters.values().iterator().next(); + IntegrationMBeanExporter exporter = exporters.values().iterator().next(); if (this.notificationMapper == null) { this.notificationMapper = new DefaultNotificationMapper(this.objectName, this.defaultNotificationType); } diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/NotificationPublishingMessageHandlerTests.java b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/NotificationPublishingMessageHandlerTests.java index 766995a155..ee1a4dd503 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/NotificationPublishingMessageHandlerTests.java +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/NotificationPublishingMessageHandlerTests.java @@ -31,7 +31,9 @@ import org.junit.Test; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.context.support.StaticApplicationContext; +import org.springframework.integration.core.MessageHandler; import org.springframework.integration.message.GenericMessage; +import org.springframework.integration.monitor.IntegrationMBeanExporter; import org.springframework.jmx.export.MBeanExporter; import org.springframework.jmx.support.ObjectNameManager; @@ -51,13 +53,17 @@ public class NotificationPublishingMessageHandlerTests { @Before public void setup() throws Exception { this.publisherObjectName = ObjectNameManager.getInstance("test:type=publisher"); - context.registerSingleton("exporter", MBeanExporter.class); + // deliberately registering two exporters (one SI specific and one generic) + // should not fail INT-1816 + context.registerSingleton("exporter", IntegrationMBeanExporter.class); + context.registerSingleton("anotherExporter", MBeanExporter.class); + RootBeanDefinition publisherDefinition = new RootBeanDefinition(NotificationPublishingMessageHandler.class); publisherDefinition.getConstructorArgumentValues().addGenericArgumentValue(this.publisherObjectName); publisherDefinition.getPropertyValues().add("defaultNotificationType", "test.type"); - context.registerBeanDefinition("testPublisher", publisherDefinition); + context.registerBeanDefinition("testPublisher", publisherDefinition); context.refresh(); - MBeanExporter exporter = context.getBean(MBeanExporter.class); + MBeanExporter exporter = context.getBean(IntegrationMBeanExporter.class); exporter.getServer().addNotificationListener(publisherObjectName, this.listener, null, null); } @@ -70,9 +76,9 @@ public class NotificationPublishingMessageHandlerTests { @Test public void simplePublish() { - NotificationPublishingMessageHandler adapter = context.getBean(NotificationPublishingMessageHandler.class); + MessageHandler handler = context.getBean("testPublisher", MessageHandler.class); assertEquals(0, this.listener.notifications.size()); - adapter.handleMessage(new GenericMessage("foo")); + handler.handleMessage(new GenericMessage("foo")); assertEquals(1, this.listener.notifications.size()); Notification notification = this.listener.notifications.get(0); assertEquals(this.publisherObjectName, notification.getSource()); @@ -80,7 +86,6 @@ public class NotificationPublishingMessageHandlerTests { assertEquals("test.type", notification.getType()); } - public static class TestNotificationListener implements NotificationListener { private final List notifications = new ArrayList(); diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/NotificationPublishingChannelAdapterParserTests-context.xml b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/NotificationPublishingChannelAdapterParserTests-context.xml index f7b3a5e31f..cddfbbeebb 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/NotificationPublishingChannelAdapterParserTests-context.xml +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/NotificationPublishingChannelAdapterParserTests-context.xml @@ -15,6 +15,7 @@ +