我想在Apache-Tomcat 7.0上公开我的MXBeans。 虽然我的MXBean注册成功,但我无法向由MXBeans公开的操作添加描述。
注册MXBeans
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 :(得分:1)
我发现这样做最干净的方法是使用StandardMBean(或StandardEmitterMBean)作为您向JMX注册的实际对象。然后,继承StandardMBean并覆盖各种getDescription方法。在这些方法中,请阅读包含说明的注释。
答案 1 :(得分: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);
}