为什么JConsole上的某些方法被禁用

时间:2012-08-19 07:37:39

标签: java jmx jconsole mbeans

我可以看到 jconsole 上的某些方法被禁用。

以下是com.sun.management.ThreadMXBean

的屏幕截图

jconsole screenshot

这些MBean方法的javadocs没有指定关于辅助功能部分的任何内容。

我认为这是一项安全功能,但我无法得到具体答案。

这个问题的第二部分显而易见的是如何创建可以在jconsole上有选择地禁用的自定义MBean实现。

以下是系统配置:

  

JConsole版本“1.7.0-b147”

     

Java(TM)SE运行时环境(版本1.7.0-b147)

     

Java HotSpot(TM)64位服务器VM(版本21.0-b17,混合模式)

编辑

禁用的方法可以从独立的进程中调用。

    MBeanServer server = ManagementFactory.getPlatformMBeanServer();
    ObjectName name = new ObjectName("java.lang", "type", "Threading");
    String operationName = "getThreadAllocatedBytes";
    //1 is main thread
    Object[] params = {1};
    String[] signature = new String[]{"long"};
    Object result = server.invoke(name, operationName, params, signature);
    //Result is 682760 on my machine
    System.out.println(result);

1 个答案:

答案 0 :(得分:11)

原因是更温和一些,它们仅针对采用简单类型的操作启用 - int或string。禁用的操作采用更复杂的类型,如数组(没有复杂类型的设施,没有像弹簧属性编辑器那样可以将字符串转换为复杂类型)

以下是相关问题:Websphere 7.X. JMX, how to enable all operations in JConsole?

更新:这是基于从OpenJDK站点http://hg.openjdk.java.net/jdk7u/jdk7u查看JConsole的源代码,根据方法签名启用或禁用操作,并将其封装在方法 - sun.tools.jconsole.inspector.Utils.isEditable(String type)。允许的类型是基元,基元包装器,基元数组,