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

2023-11-27

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

下面给出的是屏幕截图com.sun.management.ThreadMXBean

jconsole screenshot

The javadocs对于这些 MBean 方法,不指定有关可访问性部分的任何内容。

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

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

下面给出的是系统配置:

JConsole 版本“1.7.0-b147”

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

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

EDIT :

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

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

原因有点良性,它们仅适用于采用简单类型(int 或 string)的操作。禁用的操作接受更复杂的类型,如数组(没有接受复杂类型的工具,也没有像 Spring 属性编辑器那样可以将字符串转换为复杂类型)

这是一个相关问题:Websphere 7.X。 JMX,如何启用JConsole中的所有操作?

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 JConsole 上的某些方法被禁用 的相关文章

随机推荐