【问题标题】:Why are some methods on the JConsole disabled为什么 JConsole 上的某些方法被禁用
【发布时间】:2012-08-19 07:37:38
【问题描述】:

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

下面是com.sun.management.ThreadMXBean的截图

这些 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);

【问题讨论】:

    标签: java jmx jconsole mbeans


    【解决方案1】:

    原因更温和一些,它们仅对采用简单类型(int 或 string)的操作启用。禁用的操作接受更复杂的类型,如数组(没有接受复杂类型的工具,也没有什么可以将字符串转换为复杂类型的 Spring 属性编辑器)

    这是一个相关的问题: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) 。允许的类型是基元、基元包装器、基元数组、

    【讨论】:

    • +1 有道理。你有任何官方文档的链接吗?
    • 在官方文档中没有找到,但在源代码中找到了:-) - 我已经添加了一个更新作为详细信息。
    • 我认为它只是原语、原语包装器和其他类,如 BigDecimal.class、BigInteger.class、Number.class、String.class、ObjectName.class。如果允许基元数组 long[] 应该没有问题。
    • 是的,你是对的,这看起来像一个完整的列表 - 原语、原语包装器、BigDecimal、BigInteger、Number、String、ObjectName 的数组。
    • 特别是数组参数已出
    猜你喜欢
    • 1970-01-01
    • 2015-06-14
    • 2019-09-28
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多