From c293edc7fab166c9f12331c16da4b6fefad8d196 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Fri, 10 Dec 2010 10:35:28 +0100 Subject: [PATCH] INT-1675: add illegal bean id check for clash with core mbean exporter --- .../jmx/config/MBeanExporterParser.java | 43 ++++++++++++------- .../config/ControlBusParserTests-context.xml | 2 +- .../jmx/config/ControlBusParserTests.java | 2 +- .../config/MBeanExporterNameTests-context.xml | 29 +++++++++++++ .../jmx/config/MBeanExporterNameTests.java | 37 ++++++++++++++++ .../MBeanExporterParserTests-context.xml | 2 +- .../config/MBeanRegistrationTests-context.xml | 6 +-- .../jmx/config/RouterMBeanTests-context.xml | 15 +++---- .../jmx/config/RouterMBeanTests.java | 1 + 9 files changed, 108 insertions(+), 29 deletions(-) create mode 100644 spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanExporterNameTests-context.xml create mode 100644 spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanExporterNameTests.java 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 161c3f26c3..a4048240b1 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 @@ -1,24 +1,23 @@ /* * 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.jmx.config; import javax.management.MBeanServerFactory; +import org.springframework.beans.factory.BeanDefinitionStoreException; import org.springframework.beans.factory.config.RuntimeBeanReference; +import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; @@ -31,7 +30,9 @@ import org.w3c.dom.Element; * @since 2.0 */ public class MBeanExporterParser extends AbstractSingleBeanDefinitionParser { - + + private static final String ILLEGAL_NAME = "mbeanExporter"; + @Override protected boolean shouldGenerateIdAsFallback() { return true; @@ -54,10 +55,22 @@ public class MBeanExporterParser extends AbstractSingleBeanDefinitionParser { String mbeanServer = element.getAttribute("server"); if (StringUtils.hasText(mbeanServer)) { return new RuntimeBeanReference(mbeanServer); - } - else { + } else { return MBeanServerFactory.createMBeanServer(); } } + @Override + protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext) + throws BeanDefinitionStoreException { + String id = super.resolveId(element, definition, parserContext); + if (ILLEGAL_NAME.equals(id)) { + parserContext.getReaderContext().error( + "Illegal bean id for : " + ILLEGAL_NAME + + " (clashes with default). Please choose another bean id.", + definition); + } + return id; + } + } diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/ControlBusParserTests-context.xml b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/ControlBusParserTests-context.xml index 3fc4566e5d..e758e0fa7b 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/ControlBusParserTests-context.xml +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/ControlBusParserTests-context.xml @@ -21,6 +21,6 @@ - + diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/ControlBusParserTests.java b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/ControlBusParserTests.java index 55af365d7b..6c416c9d00 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/ControlBusParserTests.java +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/ControlBusParserTests.java @@ -41,7 +41,7 @@ public class ControlBusParserTests { MessageChannel control = this.context.getBean("controlChannel", MessageChannel.class); MessagingTemplate messagingTemplate = new MessagingTemplate(); Object value = messagingTemplate.convertSendAndReceive(control, - "@mbeanExporter.getChannelSendRate('testChannel').count"); + "@integrationMbeanExporter.getChannelSendRate('testChannel').count"); assertEquals(new Integer(0), value); MBeanExporter exporter = this.context.getBean(MBeanExporter.class); exporter.destroy(); diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanExporterNameTests-context.xml b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanExporterNameTests-context.xml new file mode 100644 index 0000000000..418a97c365 --- /dev/null +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanExporterNameTests-context.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanExporterNameTests.java b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanExporterNameTests.java new file mode 100644 index 0000000000..2eb08b6dea --- /dev/null +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanExporterNameTests.java @@ -0,0 +1,37 @@ +/* + * 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. + */ + +package org.springframework.integration.jmx.config; + +import org.junit.Test; +import org.springframework.beans.factory.parsing.BeanDefinitionParsingException; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +/** + * @author Dave Syer + * @since 2.0 + */ +public class MBeanExporterNameTests { + + @Test(expected = BeanDefinitionParsingException.class) + public void testHandlerMBeanRegistration() throws Exception { + new ClassPathXmlApplicationContext(getClass().getSimpleName() + "-context.xml", getClass()); + } + + public static class Source { + public String get() { + return "foo"; + } + } + +} 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 a0f3e5e671..2725c86a15 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 @@ -17,6 +17,6 @@ - + diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanRegistrationTests-context.xml b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanRegistrationTests-context.xml index 8d03cc4a5c..66cd5553a2 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanRegistrationTests-context.xml +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/MBeanRegistrationTests-context.xml @@ -12,11 +12,13 @@ http://www.springframework.org/schema/integration/jmx http://www.springframework.org/schema/integration/jmx/spring-integration-jmx.xsd"> + + - + @@ -24,6 +26,4 @@ - - diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/RouterMBeanTests-context.xml b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/RouterMBeanTests-context.xml index 7947c69fc1..9e7ac5b109 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/RouterMBeanTests-context.xml +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/RouterMBeanTests-context.xml @@ -1,7 +1,6 @@ - + + + + - + - - diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/RouterMBeanTests.java b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/RouterMBeanTests.java index cdeedd62e8..4af2f9d7b5 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/RouterMBeanTests.java +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/jmx/config/RouterMBeanTests.java @@ -39,6 +39,7 @@ public class RouterMBeanTests { @Test public void testRouterMBeanExists() throws Exception { + // System.err.println(server.queryNames(new ObjectName("test.RouterMBean:*"), null)); Set names = server.queryNames(new ObjectName("test.RouterMBean:type=MessageHandler,name=ptRouter,*"), null); assertEquals(1, names.size()); }