Как добавить описание для метода MBean, чтобы увидеть его в jmx-консоли JBOSS - PullRequest
5 голосов
/ 22 февраля 2011

Я использую JBoss 4.3.2.GA

Я добавил метод в мой сервис MBean.Метод имеет несколько аргументов в подписи.Работает нормально, но я хочу больше.

Проблема: когда я вижу сигнатуру метода в jmx-console, я не знаю, что означает каждое из этих полей ввода, потому что jmx-console не показывает имена аргументов, только поля ввода для значений.

Есть ли возможность добавить описание каждого аргумента (в коде Java, а не в xml), позволяющее отображать это описание в jmx-консоли JBOSS?

Я пытался использовать аннотацию Spring: @ManagedOperationдобавить хотя бы описание метода, но без результатов (описание не отображается в jmx-console).

Может быть, кто-то решил эту проблему ...

Ответы [ 3 ]

3 голосов
/ 22 февраля 2011

В Java вы можете сделать это, если вы не используете стандартные MBeans, но, например, DynamicMBean s, для которых вам нужно реализовать getMBeanInfo(), который возвращает все эти данные.Это общий способ, не ограничивающийся JBoss.Но это также большая работа, которая (IMO) имеет смысл, только если вам действительно нужны динамические функции DynamicMBean.

Для полноты (и, как это может быть, более простой подход):

Вы можете написать xmbean-дескриптор и поместить его, например, в $ SERVER / conf / xmdesc /. В дополнение к этому вам нужно улучшить стандартный MBeean-дескриптор, как это (обратите внимание на атрибут xmbean-dd:

<mbean code="org.jnp.server.NamingBeanImpl"
   name="jboss:service=NamingBeanImpl"
   xmbean-dd="resource:xmdesc/NamingBean-xmbean.xml">
</mbean>

Этот пример взят из $ SERVER / conf / jboss-service.xml, а файл NamingBean-xmban.xml находится в пути, описанном атрибутом.

2 голосов
/ 17 ноября 2012

Я создал небольшую оболочку , которая будет создавать динамический MBean из обычного класса Java с помощью аннотаций.С его помощью вы также можете добавлять описания к бинам, атрибутам, операциям и параметрам.

Он также поддерживает экстернализацию и локализацию имен и описаний с помощью Java ResourceBundles.

Пример аннотированного класса:

@JMXBean(description = "My first JMX bean test")
public class MyBean {
    int level = 0;

    @JMXBeanAttribute(name = "Floor Level", description = "The current floor level")
    public int getLevel() {
      return level;
    }

    @JMXBeanAttribute
    public void setLevel(int newLevel) {
      level = newLevel;
    }

    @JMXBeanOperation(name = "Echo Test", description = "Echoes the parameter back to you")
    public String myMethod(
             @JMXBeanParameter(name = "Input", description = "String of what to echo") String param) {
      return "You said " + param;
    }
}

Пример аннотированного класса с использованием ResourceBundles:

@JMXBean(resourceBundleName="com.example.my.package.BundleName")
public class MyBean {

  int level = 0;

  @JMXBeanAttribute(nameKey="level", descriptionKey="levelDescription")
  public int getLevel() {
    return level;
  }
}

Как его использовать:

MyBean bean = new MyBean();
JMXBeanWrapper wrappedBean = new JMXBeanWrapper(bean);
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
mbs.registerMBean(wrappedBean, new Objectname("com.example.my.package:type=TestBean,name=My Bean"));

Вы можете найти источник на GitHub

1 голос
/ 28 января 2013

Мне удалось смешать аннотации Spring XML и Spring, где у меня было несколько MBean-компонентов одного и того же класса Java. Подход позволил строго контролировать имена бинов и позволил мне определять описания и т. Д. На уровне класса. Мне нужно было определить ассемблер на основе аннотаций для MBeanExporter и предоставить карту имен бинов и ссылок на них:

<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"
      lazy-init="false">
    <property name="server" ref="mbeanServer" />
    <property name="assembler">
        <!-- will create management interface using annotation metadata -->
        <bean class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
            <property name="attributeSource">
                <bean class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"/>
            </property>
        </bean>
    </property>
    <property name="beans">
        <map>
           <!-- entries -->
        </map>
    </property>
</bean>

Примером того, что я читаю из аннотаций Java, может быть:

@ManagedAttribute(description = "A detailed description to show in JConsole tooltips etc")
public String getFoo() {
    return foo;
}

У меня были ассемблеры, определенные лично для экспортера, но я уверен, что вы могли бы поделиться этими бобами более широко.

Кстати, это было на Tomcat.

...