簡體   English   中英

如何添加MBean方法的描述以在JBOSS的jmx-console中看到它

[英]How to add description for MBean method to see it in jmx-console of JBOSS

我正在使用JBoss 4.3.2.GA

我已將方法添加到我的MBean服務中。 方法在簽名中有幾個參數。 它工作正常,但我想要更多。

問題:當我在jmx-console中看到方法簽名時,我不知道每個輸入字段的含義,因為jmx-console不顯示參數名稱,僅顯示值的輸入字段。

是否可以在JBOSS的jmx-console中添加每個參數的描述(使用Java代碼,而不是xml)以顯示此描述?

我嘗試使用Spring注釋: @ManagedOperation至少添加方法描述,但沒有結果(該描述未顯示在jmx-console中)。

可能有人解決了這個問題...

在Java中,如果您不使用標准MBean,而可以使用DynamicMBean ,則需要執行getMBeanInfo()來返回所有數據,而您可以執行此操作。 這是一種通用方法,不限於JBoss。 但這也是很多工作,只有真正需要DynamicMBean的動態功能時(IMO)才有意義。

為了完整性起見(這可能是更簡單的方法):

您可以編寫一個xmbean-descriptor並將其放到$ SERVER / conf / xmdesc /中,此外,您還需要像這樣增強標准的MBeean-descriptor(請注意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位於屬性描述的路徑中。

我創建了一個小的包裝程序 ,它將通過注釋從普通的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上找到源

我成功地混合了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上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM