2014-04-02 43 views
1

我想在Apache-Tomcat 7.0上公開我的MXBeans。 儘管我的MXBean註冊成功,但我無法將說明添加到由各個MXBeans公開的操作中。如何將說明添加到JMX MXBean

註冊的MXBean

MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); 
ObjectName m_mxbeanOName = new ObjectName("MyMXBean:type=" + "MyComponent"+",name=MyMXBean"); 
MyMXBean m_mxbean = new MyMXBean(); 
if(!mbs.isRegistered(m_mxbeanOName)) 
    mbs.registerMBean(m_mxbean, m_mxbeanOName); 

MyMXBean接口

public interface MyMXBean { 
    public int add (int x, int y);  
} 

MyMXBean實施

import com.sun.org.glassfish.gmbal.Description; 
import com.sun.org.glassfish.gmbal.DescriptorFields; 
import com.sun.org.glassfish.gmbal.Impact; 
import com.sun.org.glassfish.gmbal.ManagedOperation; 

public class MyMXBeanImpl implements MyMXBean { 
    @ManagedOperation(impact=Impact.ACTION_INFO) 
    @Description("Integer Addition: First parameter is the augend and second parameter is the addend.") 
    @DescriptorFields({"p1=augend","p2=addend"}) 
    public int add(int x, int y) { 
     return x + y; 
    } 

註釋@ManagedOperation,@Description,@DescriptorFields對JConsole的沒有影響。 JConsole繼續顯示默認值

請告訴我如何在JConsole上顯示關於我的MXBean操作的描述。

+0

這本來是非常好的,如果用Java 8中新增的「保存字節碼參數名」設施已經在這裏自動利用。 –

回答

1

我發現這樣做的最簡單的方法是使用StandardMBean(或StandardEmitterMBean)作爲您向JMX註冊的實際對象。然後,繼承StandardMBean並覆蓋各種getDescription方法。在這些方法中,請閱讀包含說明的註釋。

0

我發現這個非常好的blogentry的代碼爲@Descriptor和@Name屬性和一個AnnotatedStandardMXBean包裝處理這個。使用這種

http://actimem.com/java/jmx-annotations/

樣品的MXBean:

@MXBean 
    @Description("A test resource") 
    public interface SampleMXBean { 
     @Description("string#1") 
     String getString1(); 

     @Description("string#2") 
     String getString2(); 

     @Description("string#3") 
     String string3(@Description("int i") @Name("i") int i, @Description("long j") @Name("j") long j); 
    }