Как автоматически сгенерировать документы для аннотированных классов JMX аннотации Spring - PullRequest
3 голосов
/ 31 мая 2011

У меня есть код, который использует эти весенние аннотации:

org.springframework.jmx.export.annotation.ManagedAttribute;
org.springframework.jmx.export.annotation.ManagedOperation;
org.springframework.jmx.export.annotation.ManagedOperationParameter;
org.springframework.jmx.export.annotation.ManagedOperationParameters;
org.springframework.jmx.export.annotation.ManagedResource;

Я хочу создать некоторую документацию (даже просто javadocs), используя комментарии в аннотациях, например, рассмотрите следующий метод?

 @ManagedOperation(description="Does foo to bar")
 @ManagedOperationParameters({
 @ManagedOperationParameter(name = "bar", description = "The bar you want to foo.")})    
 public long fooBar( Bar bar) throws Exception {
   ...
 }

Есть ли какой-нибудь способ, которым я могу автоматически сгенерировать документы для этого, или мне придется дублировать все строки аннотаций в javadoc в дополнение к этому?

1 Ответ

2 голосов
/ 31 мая 2011

Сначала создайте пользовательский AnnotationMbeanExporter с открытым методом, который делегирует getRegisteredObjectNames (). Используйте это как ваш mbeanExporter.

Например:

@Component
// This is a copy of the AnnotationMBeanExporter with a public version of getRegisteredObjectNames()
public class AnnotationMBeanExporter extends MBeanExporter {

  @Autowired
  MBeanServer mbeanServer;

  AnnotationJmxAttributeSource annotationSource = new AnnotationJmxAttributeSource();

  AnnotationMBeanExporter() {
      setServer(mbeanServer);
      setNamingStrategy(new MetadataNamingStrategy(annotationSource));
      setAssembler(new MetadataMBeanInfoAssembler(annotationSource));
      setAutodetectMode(MBeanExporter.AUTODETECT_ALL);
  }

  public ObjectName[] getExportedObjectNames() {
    return getRegisteredObjectNames();
  }
}

Затем для вашего отчета выполните итерацию по именам объектов, возвращенным из getExportedObjectNames (), и получите соответствующие метаданные для каждого компонента JMX.

Например:

    for (ObjectName objectName: mbeanExporter.getExportedObjectNames()) {
      MBeanInfo mbeanInfo = mbeanServer.getMBeanInfo(objectName);
      MBeanOperationInfo[] operations = mbeanInfo.getOperations();
      // etc.
    }
...