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

This commit is contained in:
Rob Harrop 2009-09-16 09:25:48 +00:00
parent 2a0d68cb5c
commit aa08c11976
7 changed files with 23 additions and 11 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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);
}
/**

View File

@ -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;
}
}

View File

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

View File

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

View File

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