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

以下是com.sun.management.ThreadMXBean的屏幕截图

这些MBean方法的javadocs没有指定有关可访问性部分的任何内容。

我认为这是一项安全功能,但我无法对此给出具体答案。

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

下面给出的是系统配置:



编辑:

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

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

最佳答案

原因是更好一些,它们仅对采用简单类型(整型或字符串型)的操作启用。禁用的操作接受更复杂的类型,如数组(没有接受复杂类型的工具,也没有像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)中。允许的类型为基本体,基本体包装器,基本体数组,

关于java - 为什么禁用了JConsole上的某些方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12025003/

10-09 19:21