Описание для стандартного MBean - PullRequest
5 голосов
/ 10 марта 2011

Я хочу сделать свой стандартный MBean подробным в JBoss jmx-console. DynamicMBean имеет getMBeanInfo (), чтобы сделать это. Метод, возвращающий MBeanInfo с описанием MBean. Но как я могу сделать то же самое для стандартного MBean? Например. У меня следующий интерфейс MBean:

public interface MyMBean {
  String f();
}

... со следующей реализацией:

public class My implements MyMBean {
  public String f() {
    return "test";
  }
}

Что нужно сделать, чтобы добавить описание в такой пример?

Спасибо

Ответы [ 3 ]

4 голосов
/ 11 марта 2011

Для StandardMBeans нет способа добавить описание или другую метаинформацию.

Из JavaDoc MBeanInfo:

Остальные детали MBeanInfo для стандартного MBean не указываются.Это включает в себя описание MBeanInfo и любых содержащихся в нем конструкторов, атрибутов, операций и уведомлений;а также имена и описания параметров для конструкторов и операций.

Таким образом, вам нужно использовать как минимум DynamicMBeans (или ModelMBean или OpenMBean) для указания этой информации.Spring может помочь вам, поскольку он позволяет создавать DynamicMBeans с помощью аннотаций, которые в конце концов еще проще использовать, чем писать собственные StandardMBeans.Пример (из весенней документации):

@ManagedResource(objectName="bean:name=testBean4",
                 description="My Managed Bean")
public class AnnotationTestBean {

    private int age;

    @ManagedAttribute(description="The Age Attribute", currencyTimeLimit=15)
    public int getAge() {
        return age;
    }
}

Подробнее см. в этой статье .

1 голос
/ 13 марта 2011

Вы можете сделать это через дескриптор xmbean без необходимости изменять существующий исходный код mbean.

См. Как добавить описание метода MBean, чтобы увидеть его в jmx-консоли JBOSS , чтобы получить ответ на этот вопрос.

0 голосов
/ 06 сентября 2012

Способ получения информации описания из аннотаций Spring @ Managed * состоит в том, чтобы просто объявить стандартный Spring управляемый компонент, а не MBean или MXBean.

Для этого в своем примере выне должен реализовывать интерфейс с суффиксом "MBean".Затем компонент будет обнаружен как стандартный «управляемый компонент», когда MBeanExporter зарегистрируетBeanInstance (..) и будет преобразован в ModelMBean с использованием всех пружинных аннотаций, включая описания атрибутов, операций, параметров и т. Д.

Как требование, вы должны объявить в своем весеннем контексте атрибуты MBeanExporter с AnnotationJmxAttributeSource , MetadataNamingStrategy и MetadataMBeanInfoAssembler , которыеможно упростить так:

<bean id="mbeanExporter"
     class="org.springframework.jmx.export.annotation.AnnotationMBeanExporter" />

или

<context:mbean-export />

И ваш управляемый компонент должен выглядеть так (как объяснил Роланд):

@Component("myManagedBean")
@ManagedResource(objectName="your.domain.jmx:name=MyMBean",
                 description="My MBean goal")
public class AnnotationTestBean {

    private int age;

    @ManagedAttribute(description="The age attribute", currencyTimeLimit=15)
    public int getAge() {
        return age;
    }

    @ManagedOperation(description = "Check permissions for the given activity")
    @ManagedOperationParameters( {
        @ManagedOperationParameter(name = "activity",
                                   description = "The activity to check")
    })
    public boolean isAllowedTo(final String activity) {
        // impl
    }
}

Помните, что не реализует интерфейс MBean, который был бы StandardMBean !!

...