2014-04-02 92 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); 
    }