[SPR-5859] @ManagedOperation can now be used on getters/setters

master
Rob Harrop 15 years ago
parent 2a0d68cb5c
commit aa08c11976
  1. 5
      org.springframework.context/src/main/java/org/springframework/jmx/export/annotation/AnnotationJmxAttributeSource.java
  2. 4
      org.springframework.context/src/main/java/org/springframework/jmx/export/assembler/AbstractReflectiveMBeanInfoAssembler.java
  3. 8
      org.springframework.context/src/main/java/org/springframework/jmx/export/assembler/MetadataMBeanInfoAssembler.java
  4. 8
      org.springframework.context/src/test/java/org/springframework/jmx/export/annotation/AnnotationMetadataAssemblerTests.java
  5. 2
      org.springframework.context/src/test/java/org/springframework/jmx/export/annotation/AnnotationTestBean.java
  6. 4
      org.springframework.context/src/test/java/org/springframework/jmx/export/annotation/AnnotationTestSubBean.java
  7. 3
      org.springframework.context/src/test/java/org/springframework/jmx/export/annotation/IAnnotationTestBean.java

@ -87,11 +87,6 @@ public class AnnotationJmxAttributeSource implements JmxAttributeSource {
}
public ManagedOperation getManagedOperation(Method method) throws InvalidMetadataException {
PropertyDescriptor pd = BeanUtils.findPropertyForMethod(method);
if (pd != null) {
throw new InvalidMetadataException(
"The ManagedOperation attribute is not valid for JavaBean properties. Use ManagedAttribute instead.");
}
Annotation ann = AnnotationUtils.findAnnotation(method, org.springframework.jmx.export.annotation.ManagedOperation.class);
if (ann == null) {
return null;

@ -355,7 +355,9 @@ public abstract class AbstractReflectiveMBeanInfoAssembler extends AbstractMBean
info.setDescriptor(desc);
}
}
else if (includeOperation(method, beanKey)) {
// allow getters and setters to be marked as operations directly
if (info == null && includeOperation(method, beanKey)) {
info = createModelMBeanOperationInfo(method, method.getName(), beanKey);
Descriptor desc = info.getDescriptor();
desc.setField(FIELD_ROLE, ROLE_OPERATION);

@ -156,11 +156,11 @@ public class MetadataMBeanInfoAssembler extends AbstractReflectiveMBeanInfoAssem
protected boolean includeOperation(Method method, String beanKey) {
PropertyDescriptor pd = BeanUtils.findPropertyForMethod(method);
if (pd != null) {
return hasManagedAttribute(method);
}
else {
return hasManagedOperation(method);
if(hasManagedAttribute(method)) {
return true;
}
}
return hasManagedOperation(method);
}
/**

@ -42,6 +42,12 @@ public class AnnotationMetadataAssemblerTests extends AbstractMetadataAssemblerT
assertNotNull(op);
}
public void testOperationOnGetter() throws Exception {
ModelMBeanInfo inf = getMBeanInfoFromAssembler();
ModelMBeanOperationInfo op = inf.getOperation("getExpensiveToCalculate");
assertNotNull(op);
}
protected JmxAttributeSource getAttributeSource() {
return new AnnotationJmxAttributeSource();
}
@ -65,6 +71,6 @@ public class AnnotationMetadataAssemblerTests extends AbstractMetadataAssemblerT
@Override
protected int getExpectedOperationCount() {
return super.getExpectedOperationCount() + 3;
return super.getExpectedOperationCount() + 4;
}
}

@ -110,4 +110,6 @@ public class AnnotationTestBean implements IJmxTestBean {
return 3;
}
}

@ -48,4 +48,8 @@ public class AnnotationTestSubBean extends AnnotationTestBean implements IAnnota
public void fromInterface() {
}
public int getExpensiveToCalculate() {
return Integer.MAX_VALUE;
}
}

@ -29,4 +29,7 @@ public interface IAnnotationTestBean {
@ManagedOperation
void fromInterface();
@ManagedOperation
int getExpensiveToCalculate();
}

Loading…
Cancel
Save