Aja*_*rge 8 java jmx mbeans jconsole
我可以看到jconsole上的一些方法被禁用了.
以下是截图 com.sun.management.ThreadMXBean

这些MBean方法的javadoc没有指定有关可访问性部分的任何内容.
我认为这是一个安全功能,但我无法得到一个具体的答案.
这个问题的第二部分显而易见的是如何创建可以在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);
Run Code Online (Sandbox Code Playgroud)
Bij*_*men 12
原因是更加良性,它们仅对采用简单类型的操作启用 - int或string.禁用的操作采用更复杂的类型,如数组(没有设施可以采用复杂的类型,没有像弹簧属性编辑器那样可以将字符串转换为复杂类型)
这是一个相关的问题:Websphere 7.X. JMX,如何在JConsole中启用所有操作?
更新:这是基于从OpenJDK站点http://hg.openjdk.java.net/jdk7u/jdk7u查看JConsole的源代码,根据方法签名启用或禁用操作,并将其封装在方法 - sun.tools.jconsole.inspector.Utils.isEditable(String type).允许的类型是基元,基元包装器,基元数组,