如何为JBean方法添加描述以在JBOSS的jmx-console中查看它

时间:2011-02-22 10:55:23

标签: java jboss jmx

我正在使用JBoss 4.3.2.GA

我已经为我的MBean服务添加了方法。方法在签名中有几个参数。它工作正常,但我想要更多。

问题:当我在jmx-console中看到方法签名时,我不知道每个输入字段的含义,因为jmx-console不显示参数名称,只显示值的输入字段。

是否有能力添加每个参数的描述(在Java代码中,而不是xml),允许在JBOSS的jmx-console中显示此描述?

我尝试使用Spring注释:@ManagedOperation至少添加方法描述但没有结果(jmx-console中没有显示描述)。

可能有人解决了这个问题...

3 个答案:

答案 0 :(得分:3)

在Java中,如果不使用标准MBean,则可以执行此操作,例如您需要实现DynamicMBean的{​​{1}},它将返回所有数据。 这是一种通用方式,不仅限于JBoss。但它也是很多工作,如果你真的需要DynamicMBean的动态功能,它(IMO)才有意义。

为了完整起见(并且这可能是更简单的方法):

你可以写一个xmbean描述符并把它放在例如进入$ SERVER / conf / xmdesc / 除此之外,您需要像这样增强标准MBeean描述符(请注意getMBeanInfo()属性:

xmbean-dd

此示例取自$ SERVER / conf / jboss-service.xml,NamingBean-xmban.xml位于属性描述的路径中。

答案 1 :(得分:2)

我创建了一个小wrapper,它将通过注释从普通的Java类中创建动态MBean。有了它,您还可以添加对bean,属性,操作和参数的描述。

它还支持使用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

上找到来源

答案 2 :(得分:1)

我已经成功地混合了Spring XML和Spring注释,其中我有多个相同Java类的MBean。该方法允许严格控制bean名称,并允许我在类级别定义描述等。我需要为MBeanExporter定义一个基于注释的bean汇编程序,并提供bean名称和bean引用的映射:

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

我将汇编程序私有地定义到导出程序,但是您可以更广泛地共享这些bean。我很有信心。

顺便说一句,这是关于Tomcat的。