From 8b53fa1fc7fc344ce0edfa4e7a9bebafa2a96bda Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Wed, 9 Mar 2011 17:13:13 -0500 Subject: [PATCH] INT-1817 added namespace support for object-name-static-properties for IntegrationMBeanExporter --- .../jmx/config/MBeanExporterParser.java | 2 ++ .../monitor/IntegrationMBeanExporter.java | 7 ++++-- .../jmx/config/spring-integration-jmx-2.0.xsd | 12 ++++++++++ .../MBeanExporterParserTests-context.xml | 24 ++++++++++++------- .../jmx/config/MBeanExporterParserTests.java | 14 ++++++++++- 5 files changed, 47 insertions(+), 12 deletions(-) diff --git a/spring-integration-jmx/src/main/java/org/springframework/integration/jmx/config/MBeanExporterParser.java b/spring-integration-jmx/src/main/java/org/springframework/integration/jmx/config/MBeanExporterParser.java index 62c1488174..9fb61c0193 100644 --- a/spring-integration-jmx/src/main/java/org/springframework/integration/jmx/config/MBeanExporterParser.java +++ b/spring-integration-jmx/src/main/java/org/springframework/integration/jmx/config/MBeanExporterParser.java @@ -52,6 +52,8 @@ public class MBeanExporterParser extends AbstractSingleBeanDefinitionParser { Object mbeanServer = getMBeanServer(element, parserContext); builder.getRawBeanDefinition().setSource(parserContext.extractSource(element)); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "default-domain"); + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "object-name-static-properties-ref", "objectNameStaticProperties"); + builder.addPropertyValue("server", mbeanServer); } diff --git a/spring-integration-jmx/src/main/java/org/springframework/integration/monitor/IntegrationMBeanExporter.java b/spring-integration-jmx/src/main/java/org/springframework/integration/monitor/IntegrationMBeanExporter.java index 9bfcd6ea87..592b5939de 100644 --- a/spring-integration-jmx/src/main/java/org/springframework/integration/monitor/IntegrationMBeanExporter.java +++ b/spring-integration-jmx/src/main/java/org/springframework/integration/monitor/IntegrationMBeanExporter.java @@ -17,6 +17,7 @@ import java.lang.reflect.Field; import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Properties; import java.util.Set; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.ReentrantLock; @@ -29,6 +30,7 @@ import javax.management.modelmbean.ModelMBean; import org.aopalliance.aop.Advice; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.springframework.aop.Advisor; import org.springframework.aop.PointcutAdvisor; import org.springframework.aop.TargetSource; @@ -132,7 +134,7 @@ public class IntegrationMBeanExporter extends MBeanExporter implements BeanPostP private boolean initialized = false; - private final Map objectNameStaticProperties = new HashMap(); + private final Properties objectNameStaticProperties = new Properties(); private final MetadataMBeanInfoAssembler assembler = new MetadataMBeanInfoAssembler(attributeSource); @@ -617,7 +619,8 @@ public class IntegrationMBeanExporter extends MBeanExporter implements BeanPostP return ""; } StringBuilder builder = new StringBuilder(); - for (String key : objectNameStaticProperties.keySet()) { + + for (Object key : objectNameStaticProperties.keySet()) { builder.append("," + key + "=" + objectNameStaticProperties.get(key)); } return builder.toString(); diff --git a/spring-integration-jmx/src/main/resources/org/springframework/integration/jmx/config/spring-integration-jmx-2.0.xsd b/spring-integration-jmx/src/main/resources/org/springframework/integration/jmx/config/spring-integration-jmx-2.0.xsd index 30b58d08d6..7d517d4758 100644 --- a/spring-integration-jmx/src/main/resources/org/springframework/integration/jmx/config/spring-integration-jmx-2.0.xsd +++ b/spring-integration-jmx/src/main/resources/org/springframework/integration/jmx/config/spring-integration-jmx-2.0.xsd @@ -112,6 +112,18 @@ + + + + + + + + + Static object properties to be used for this domain. + + + diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanExporterParserTests-context.xml b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanExporterParserTests-context.xml index 2725c86a15..bbb0a5c0db 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanExporterParserTests-context.xml +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanExporterParserTests-context.xml @@ -4,19 +4,25 @@ xmlns:context="http://www.springframework.org/schema/context" xmlns:si="http://www.springframework.org/schema/integration" xmlns:jmx="http://www.springframework.org/schema/integration/jmx" - xsi:schemaLocation="http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans.xsd - http://www.springframework.org/schema/context - http://www.springframework.org/schema/context/spring-context.xsd - http://www.springframework.org/schema/integration - http://www.springframework.org/schema/integration/spring-integration.xsd - http://www.springframework.org/schema/integration/jmx - http://www.springframework.org/schema/integration/jmx/spring-integration-jmx.xsd"> + xmlns:util="http://www.springframework.org/schema/util" + xsi:schemaLocation="http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd + http://www.springframework.org/schema/integration/jmx http://www.springframework.org/schema/integration/jmx/spring-integration-jmx.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> - + + + + foo + bar + diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanExporterParserTests.java b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanExporterParserTests.java index 01cd5bceb9..8f2517bbab 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanExporterParserTests.java +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanExporterParserTests.java @@ -16,20 +16,27 @@ package org.springframework.integration.jmx.config; -import static org.junit.Assert.assertEquals; +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertTrue; + +import java.util.Properties; import javax.management.MBeanServer; import org.junit.Test; import org.junit.runner.RunWith; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.integration.monitor.IntegrationMBeanExporter; +import org.springframework.integration.test.util.TestUtils; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * @author Mark Fisher + * @author Oleg Zhurakousky * @since 2.0 */ @ContextConfiguration @@ -43,6 +50,11 @@ public class MBeanExporterParserTests { public void testMBeanExporterExists() throws InterruptedException { IntegrationMBeanExporter exporter = this.context.getBean(IntegrationMBeanExporter.class); MBeanServer server = this.context.getBean("mbs", MBeanServer.class); + Properties properties = TestUtils.getPropertyValue(exporter, "objectNameStaticProperties", Properties.class); + assertNotNull(properties); + assertEquals(2, properties.size()); + assertTrue(properties.containsKey("foo")); + assertTrue(properties.containsKey("bar")); assertEquals(server, exporter.getServer()); exporter.destroy(); }