- 所有超级接口:
-
DynamicMBean
DiagnosticCommandMBean
被注册到平台MBeanServer,就像其他平台MBeans一样。
用于在MBeanServer中唯一标识诊断MBean的ObjectName
是:
com.sun.management:type=DiagnosticCommand
此MBean是一个DynamicMBean
,也是一个NotificationEmitter
。 DiagnosticCommandMBean
在运行时生成,并在Java虚拟机的生命周期内可能会被修改。一个诊断命令被表示为DiagnosticCommandMBean
接口的操作。每个诊断命令包括:
- 诊断命令名称,即在HotSpot虚拟机中引用的名称
- MBean操作名称,即为诊断命令操作调用生成的名称。 MBean操作名称是依赖于实现的
- 从第一个字符到第一个点之间的所有字符都设置为小写字符
- 删除每个点或下划线字符,并将下一个字符设置为大写字符
- 所有其他字符都不做修改
诊断命令名称始终在名为dcmd.name
的字段中提供操作的元数据(见下文)。
诊断命令可能支持选项或参数,也可能不支持。所有操作都返回String
,对于不支持任何选项或参数的操作,不需要参数,对于支持至少一个选项或参数的操作,需要一个String[]
参数。每个选项或参数必须存储在单个String中。不支持跨多个String实例拆分的选项或参数。
选项和参数之间的区别: 选项由选项名称标识,而参数由它们在命令行中的位置标识。选项和参数按照传递给调用方法的数组的顺序进行处理。
与动态MBean的任何操作一样,这些操作都由MBeanOperationInfo
实例描述。以下是此对象返回的值:
getName()
返回从诊断命令名称生成的操作名称getDescription()
返回诊断命令描述(与“help”命令中返回的描述相同)getImpact()
返回ACTION_INFO
getReturnType()
返回java.lang.String
getDescriptor()
返回一个描述符实例(见下文)
Descriptor
是包含JMX元素的附加元数据的字段集合。一个字段是一个名称和一个关联的值。为与诊断命令关联的操作提供的附加元数据在下表中描述:
名称 | 类型 | 描述 |
---|---|---|
dcmd.name | String | 原始诊断命令名称(而非操作名称) |
dcmd.description | String | 诊断命令描述 |
dcmd.help | String | 此诊断命令的完整帮助消息(与“help”命令生成的消息相同) |
dcmd.vmImpact | String | 诊断命令的影响,此值与诊断命令的帮助消息中“impact”部分中打印的值相同,与MBeanOperationInfo的getImpact()不同 |
dcmd.enabled | boolean | 如果诊断命令已启用,则为true,否则为false |
dcmd.permissionClass | String | 某些诊断命令可能需要特定权限才能执行,除了调用其关联MBean操作的MBeanPermission之外。此字段返回权限类的完全限定名称,如果不需要权限,则返回null |
dcmd.permissionName | String | 执行此诊断命令所需权限的第一个参数,如果不需要权限,则返回null |
dcmd.permissionAction | String | 执行此诊断命令所需权限的第二个参数,如果权限构造函数只有一个参数(例如ManagementPermission)或不需要权限,则返回null |
dcmd.arguments | Descriptor | 包含诊断命令支持的选项和参数描述的Descriptor实例(见下文) |
诊断命令的参数(选项或参数)描述在Descriptor实例中提供。在此Descriptor中,每个字段名称都是参数名称,每个字段值本身是一个Descriptor实例。在此第二个Descriptor实例中提供的字段在下表中描述:
名称 | 类型 | 描述 |
---|---|---|
dcmd.arg.name | String | 参数名称 |
dcmd.arg.type | String | 参数类型。返回的String是诊断命令解析器识别的类型名称。这些类型不是Java类型,而是依赖于实现。 |
dcmd.arg.description | String | 参数描述 |
dcmd.arg.isMandatory | boolean | 如果参数是必需的,则为true,否则为false |
dcmd.arg.isOption | boolean | 如果参数是选项,则为true,如果是参数,则为false |
dcmd.arg.isMultiple | boolean | 如果参数可以多次指定,则为true,否则为false |
当Java虚拟机当前支持的诊断命令集发生更改时,DiagnosticCommandMBean
会发出一个Notification
,其类型为 "jmx.mbean.info.changed"
,userData是新的MBeanInfo
。
- 自Java版本:
- 1.8
-
Method Summary
Methods declared in interface javax.management.DynamicMBean
getAttribute, getAttributes, getMBeanInfo, invoke, setAttribute, setAttributes