Java 为什么JConsole上的某些方法被禁用
我可以看到jconsole上的一些方法被禁用 下面是Java 为什么JConsole上的某些方法被禁用,java,jmx,jconsole,mbeans,Java,Jmx,Jconsole,Mbeans,我可以看到jconsole上的一些方法被禁用 下面是com.sun.management.ThreadMXBean 对于这些MBean方法,没有指定任何关于可访问性部分的内容 我认为这是一个安全特性,但我无法得到一个具体的答案 这个问题显而易见的第二部分是如何创建自定义MBean实现,这些实现可以在jconsole上选择性地禁用 以下是系统配置: JConsole版本“1.7.0-b147” Java(TM)SE运行时环境(构建1.7.0-b147) Java HotSpot(TM)64位服务
com.sun.management.ThreadMXBean
对于这些MBean方法,没有指定任何关于可访问性部分的内容
我认为这是一个安全特性,但我无法得到一个具体的答案
这个问题显而易见的第二部分是如何创建自定义MBean实现,这些实现可以在jconsole上选择性地禁用
以下是系统配置:
JConsole版本“1.7.0-b147”
Java(TM)SE运行时环境(构建1.7.0-b147)
Java HotSpot(TM)64位服务器虚拟机(构建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);
原因稍微好一点,它们只对采用简单类型(int或string)的操作启用。禁用的操作会接受更复杂的类型,如数组(没有用于接受复杂类型的工具,更不用说可以将字符串转换为复杂类型的Spring属性编辑器了) 这是一个相关的问题:
更新:这是基于从OpenJDK站点查看JConsole的源代码,根据方法签名启用或禁用操作,并封装在方法-
sun.tools.JConsole.inspector.Utils.isEditable(字符串类型)
中。允许的类型有原语、原语包装器、原语数组,+1有意义。你有任何官方文档的链接吗?在官方文档中没有找到,但在源代码中找到:-)-我添加了一个更新作为详细信息。我认为它只是原语、原语包装器和其他类,如BigDecimal.class、BigInteger.class、Number.class、String.class、ObjectName.class。如果允许使用基元数组,则长[]不应该有问题。是的,您是对的,这看起来像是一个完整的列表-基元、基元包装器、BigDecimal数组、BigInteger数组、Number数组、String数组、ObjectName数组。具体而言,数组参数不存在