From eb49f3c225e79f05d975456632c5312360d01e6e Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Mon, 18 Jan 2016 14:14:17 +0100 Subject: [PATCH] Add interface-based detection test Add a test that explicitely validates that `@ManagedResource` and friends can be set on an interface. Issue: SPR-13138 --- .../AnnotationMetadataAssemblerTests.java | 40 ++++++++++++--- .../annotation/AnotherAnnotationTestBean.java | 38 ++++++++++++++ .../AnotherAnnotationTestBeanImpl.java | 49 +++++++++++++++++++ .../jmx/export/annotation/annotations.xml | 20 +++----- 4 files changed, 127 insertions(+), 20 deletions(-) create mode 100644 spring-context/src/test/java/org/springframework/jmx/export/annotation/AnotherAnnotationTestBean.java create mode 100644 spring-context/src/test/java/org/springframework/jmx/export/annotation/AnotherAnnotationTestBeanImpl.java diff --git a/spring-context/src/test/java/org/springframework/jmx/export/annotation/AnnotationMetadataAssemblerTests.java b/spring-context/src/test/java/org/springframework/jmx/export/annotation/AnnotationMetadataAssemblerTests.java index 8eb3068983a..0f841bf7142 100644 --- a/spring-context/src/test/java/org/springframework/jmx/export/annotation/AnnotationMetadataAssemblerTests.java +++ b/spring-context/src/test/java/org/springframework/jmx/export/annotation/AnnotationMetadataAssemblerTests.java @@ -1,17 +1,17 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2016 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 + * 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. + * 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.jmx.export.annotation; @@ -58,6 +58,30 @@ public class AnnotationMetadataAssemblerTests extends AbstractMetadataAssemblerT assertNotNull(op); } + @Test + public void testRegistrationOnInterface() throws Exception { + Object bean = getContext().getBean("testInterfaceBean"); + ModelMBeanInfo inf = getAssembler().getMBeanInfo(bean, "bean:name=interfaceTestBean"); + assertNotNull(inf); + assertEquals("My Managed Bean", inf.getDescription()); + + ModelMBeanOperationInfo op = inf.getOperation("foo"); + assertNotNull("foo operation not exposed", op); + assertEquals("invoke foo", op.getDescription()); + + assertNull("doNotExpose operation should not be exposed", inf.getOperation("doNotExpose")); + + ModelMBeanAttributeInfo attr = inf.getAttribute("Bar"); + assertNotNull("bar attribute not exposed", attr); + assertEquals("Bar description", attr.getDescription()); + + ModelMBeanAttributeInfo attr2 = inf.getAttribute("CacheEntries"); + assertNotNull("cacheEntries attribute not exposed", attr2); + assertEquals("Metric Type should be COUNTER", "COUNTER", + attr2.getDescriptor().getFieldValue("metricType")); + } + + @Override protected JmxAttributeSource getAttributeSource() { return new AnnotationJmxAttributeSource(); diff --git a/spring-context/src/test/java/org/springframework/jmx/export/annotation/AnotherAnnotationTestBean.java b/spring-context/src/test/java/org/springframework/jmx/export/annotation/AnotherAnnotationTestBean.java new file mode 100644 index 00000000000..59d084f414d --- /dev/null +++ b/spring-context/src/test/java/org/springframework/jmx/export/annotation/AnotherAnnotationTestBean.java @@ -0,0 +1,38 @@ +/* + * Copyright 2002-2016 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.jmx.export.annotation; + +import org.springframework.jmx.support.MetricType; + +/** + * @author Stephane Nicoll + */ +@ManagedResource(objectName = "bean:name=interfaceTestBean", description = "My Managed Bean") +public interface AnotherAnnotationTestBean { + + @ManagedOperation(description = "invoke foo") + void foo(); + + @ManagedAttribute(description = "Bar description") + String getBar(); + + void setBar(String bar); + + @ManagedMetric(description = "a metric", metricType = MetricType.COUNTER) + int getCacheEntries(); + +} diff --git a/spring-context/src/test/java/org/springframework/jmx/export/annotation/AnotherAnnotationTestBeanImpl.java b/spring-context/src/test/java/org/springframework/jmx/export/annotation/AnotherAnnotationTestBeanImpl.java new file mode 100644 index 00000000000..1acaefb0328 --- /dev/null +++ b/spring-context/src/test/java/org/springframework/jmx/export/annotation/AnotherAnnotationTestBeanImpl.java @@ -0,0 +1,49 @@ +/* + * Copyright 2002-2016 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.jmx.export.annotation; + +/** + * @author Stephane Nicoll + */ +class AnotherAnnotationTestBeanImpl implements AnotherAnnotationTestBean { + + private String bar; + + @Override + public void foo() { + } + + public void doNotExpose() { + + } + + @Override + public String getBar() { + return this.bar; + } + + @Override + public void setBar(String bar) { + this.bar = bar; + } + + @Override + public int getCacheEntries() { + return 42; + } + +} diff --git a/spring-context/src/test/resources/org/springframework/jmx/export/annotation/annotations.xml b/spring-context/src/test/resources/org/springframework/jmx/export/annotation/annotations.xml index c9c15cf7714..0124173f05c 100644 --- a/spring-context/src/test/resources/org/springframework/jmx/export/annotation/annotations.xml +++ b/spring-context/src/test/resources/org/springframework/jmx/export/annotation/annotations.xml @@ -20,26 +20,22 @@ - - TEST - - - 100 - + + + + + + - - - + - - - +