Package javax.management
提供Java Management Extensions的核心类。
Java Management Extensions(JMX™)API是用于管理和监视的标准API。 典型用途包括:
- 咨询和更改应用程序配置
- 累积有关应用程序行为的统计信息并使其可用
- 通知国家变化和错误的条件。
JMX API还可以用作管理系统,网络等的解决方案的一部分。
API包括远程访问,因此远程管理程序可以与正在运行的应用程序进行交互以实现这些目的。
的MBean
JMX API的基本概念是MBean 。 MBean是表示资源的命名托管对象 。 它有一个必须公开的管理界面 ,包括:
- 可以读取和/或写入的命名和类型属性
- 可以调用的命名和类型化操作
- 可以由MBean发出的类型通知。
例如,表示应用程序配置的MBean可以具有表示不同配置项的属性。 读取CacheSize
属性将返回该项的当前值。 编写它会更新项目,可能会改变正在运行的应用程序的行为。 诸如save
的操作可以持久地存储当前配置。 每次更改配置时都可以发送通知,例如ConfigurationChangedNotification
。
在JMX API的标准用法中,MBean实现为Java对象。 但是,如下所述,这些对象通常不直接引用。
标准MBean
为了简化MBean实现,JMX API包含标准MBean的概念。 标准MBean是使用某些命名模式从Java接口推导出的属性和操作,类似于JavaBeans所使用的命名模式。 例如,考虑这样的接口:
public interface ConfigurationMBean { public int getCacheSize(); public void setCacheSize(int size); public long getLastChangedTime(); public void save(); }
方法getCacheSize
和setCacheSize
定义了类型为int
的读写属性,称为CacheSize
(具有初始资本,与JavaBeans约定不同)。
方法getLastChangedTime
定义了类型为long
的属性,称为LastChangedTime
。 这是一个只读属性,因为没有方法setLastChangedTime
。
方法save
定义了称为save
的操作。 它不是一个属性,因为它的名字开头不是get
, set
,或is
。
标准MBean的确切命名模式在JMX Specification中有详细说明 。
有两种方法可以使Java管理接口成为MBean对象。 一个是对象是一个与Java接口名称完全相同但没有MBean
后缀的类。 因此,在示例中,对象将是类Configuration
,在相同的Java包为ConfigurationMBean
。 第二种方法是使用StandardMBean
类。
MXBean的
MXBean是Standard MBean的变体,其中复杂类型映射到javax.management.openmbean
包中定义的标准类型集。 如果您需要在MBean接口中引用特定于应用程序的类,则MXBeans是合适的。 它们在MXBean
的说明书中详细描述。
动态MBean
Dynamic MBean是一个MBean,它在运行时定义其管理接口。 例如,配置MBean可以通过解析XML文件来确定它公开的属性的名称和类型。
实现DynamicMBean
接口的类的任何Java对象都是Dynamic MBean。
打开MBean
Open MBean是一种Dynamic MBean,其中使用一小组预定义Java类构建属性类型以及操作参数和返回值。 Open MBean便于使用远程管理程序进行操作,这些程序不一定能访问特定于应用程序的类型,包括非Java程序。 Open MBean由包 javax.management.openmbean
定义。
模型MBean
Model MBean是一种Dynamic MBean,充当管理接口和底层受管资源之间的桥梁。 管理接口和受管资源都指定为Java对象。 可以使用不同的管理接口和托管资源多次重用相同的Model MBean实现,并且它可以提供常见功能,如持久性和缓存。 模型MBean由包 javax.management.modelmbean
定义。
MBean Server
为了有用,必须在MBean Server中注册MBean 。 MBean Server是MBean的存储库。 通常,对MBean的唯一访问是通过MBean Server。 换句话说,代码不再直接访问实现MBean的Java对象,而是通过MBean Server按名称访问MBean。 每个MBean在MBean Server中都有一个唯一的名称,由ObjectName
类定义。
MBean Server是实现接口MBeanServer
的对象。 要使用的最方便的MBean Server是Platform MBean Server 。 这是一个单独的MBean Server,可以由在同一Java虚拟机中运行的不同托管组件共享。 使用方法ManagementFactory.getPlatformMBeanServer()
访问Platform MBean Server。
应用程序代码还可以使用MBeanServerFactory
类创建新的MBean Server,或访问已创建的MBean Server。
在MBean Server中创建MBean
有两种方法可以创建MBean。 一种是构造一个将成为MBean的Java对象,然后使用registerMBean
方法在MBean Server中注册它。 另一种是使用createMBean
方法之一在单个操作中创建和注册MBean。
registerMBean
方法更易于本地使用,但不能远程使用。 createMBean
方法可以远程使用,但有时需要注意类加载问题。
如果MBean实现了MBeanRegistration
接口,则MBean可以在MBean Server中注册或取消注册时执行操作。
访问MBean Server中的MBean
给定ObjectName
name
和MBeanServer
mbs
,您可以访问属性和操作,如下例所示:
int cacheSize = mbs.getAttribute(name, "CacheSize"); Attribute
newCacheSize = new Attribute("CacheSize", new Integer(2000)); mbs.setAttribute(name, newCacheSize); mbs.invoke(name, "save", new Object[0], new Class[0]);
或者,如果您有一个与MBean的管理接口相对应的Java接口,则可以使用如下的MBean代理 :
ConfigurationMBean conf = JMX.newMBeanProxy
(mbs, name, ConfigurationMBean.class); int cacheSize = conf.getCacheSize(); conf.setCacheSize(2000); conf.save();
使用MBean代理只是一种便利。 第二个示例最终调用与第一个相同的MBeanServer
操作。
可以查询MBean Server以查找名称与特定模式匹配和/或其属性满足特定约束的MBean。 名称模式使用ObjectName
类构造,约束使用Query
类构造。 然后,方法queryNames
和queryMBeans
执行查询。
MBean生命周期
MBean可以实现MBeanRegistration
接口,以便在MBean Server中注册和取消注册时被告知。 此外, preRegister
方法允许MBean获取对MBeanServer
对象的引用,并在MBean Server中获取其ObjectName
。
通知
通知是Notification
类或子类的实例。 除了Java类之外,它还有一个类型字符串,可以将其与同一类的其他通知区分开来。
将发出通知的MBean必须实现NotificationBroadcaster
或NotificationEmitter
接口。 通常,它通过子类化NotificationBroadcasterSupport
或委托给该类的实例来完成此操作。 这是一个例子:
public class Configuration extends NotificationBroadcasterSupport implements ConfigurationMBean { ... private void updated() { Notification n = new Notification(...); sendNotification
(n); } }
通知可以由侦听器接收, 侦听器是实现NotificationListener
接口的对象。 您可以使用方法MBeanServer.addNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object)
向MBean添加侦听器 。 您可以选择为此方法提供过滤器 ,以便仅选择感兴趣的通知。 过滤器是实现NotificationFilter
接口的对象。
MBean可以是同一MBean Server中其他MBean发出的通知的侦听器。 在这种情况下,它实现NotificationListener
,方法MBeanServer.addNotificationListener(ObjectName, ObjectName, NotificationFilter, Object)
用于监听。
远程访问MBean
可以通过连接器远程访问MBean Server。 连接器允许远程Java应用程序以与本地服务器基本相同的方式访问MBean Server。 封装 javax.management.remote
定义了连接器。
JMX规范还定义了适配器的概念。 适配器在诸如SNMP或HTML之类的协议中的请求之间进行转换,并访问MBean Server。 因此,例如,SNMP GET操作可能会导致MBean Server上出现getAttribute
。
JMX规范版本之间的互操作性
当客户端使用JMX Remote API连接到服务器时,它们可能没有相同版本的JMX规范。 此处描述的JMX规范版本为1.4版。 以前的版本是1.0,1.1和1.2。 (没有1.3。)标准JMX Remote API被定义为与版本1.2一起使用,因此在基于标准的部署中,出现的唯一互操作性问题涉及版本1.2以上。
每个版本的JMX规范都继续实现以前版本的功能。 因此,当客户端运行的是早于服务器的版本时,不应存在任何互操作性问题。
当客户端运行的版本高于服务器时,某些较新的功能可能不可用,如下一节中所述。 客户端可以通过检查确定服务器的版本SpecificationVersion
的属性MBeanServerDelegate
。
如果远程MBean Server是1.2
您不能在
ObjectName
的密钥属性中使用通配符,例如domain:type=Foo,name=*
。 仍允许匹配整个属性的通配符,例如*:*
或*:type=Foo,*
。您不能在查询中使用
Query.isInstanceOf
。不能使用点语法,如
HeapMemoryUsage.used
在observed attribute监视器,作为文档中描述javax.management.monitor
包。
- 从以下版本开始:
- 1.5
- 另请参见:
- JMX Specification, version 1.4
-
接口摘要 接口 描述 Descriptor JMX元素的其他元数据。DescriptorAccess 该接口用于访问与JMX组件相关联的Descriptor类的描述符,即DescriptorRead 用于读取管理接口元素(如MBeanInfo)的描述符的接口。DynamicMBean 定义应由Dynamic MBean(公开动态管理接口的MBean)实现的方法。MBeanRegistration 可以由MBean实现,以便在从MBean Server注册或取消注册之前和之后执行操作。MBeanServer 这是代理端MBean操作的接口。MBeanServerConnection 此接口表示与MBean服务器(无论是本地还是远程)通信的方式。MBeanServerDelegateMBean 定义类MBeanServerDelegate的对象的管理接口。NotificationBroadcaster 由发出通知的MBean实现的接口。NotificationEmitter 由发出通知的MBean实现的接口。NotificationFilter 由充当通知过滤器的任何类实现。NotificationListener 应该由想要接收通知的对象实现。PersistentMBean 此类是MBean要实现的持久性接口。QueryExp 表示类似于数据库查询“where子句”的关系约束。ValueExp 表示可以作为参数传递给关系表达式的值。 -
类摘要 类 描述 Attribute 通过将其名称与其值相关联来表示MBean特性。AttributeChangeNotification 提供MBean发送的属性更改通知的定义。AttributeChangeNotificationFilter 这个类实现的NotificationFilter
接口,为attribute change notification
。AttributeList 表示MBean的属性的值列表。AttributeValueExp 表示用作关系约束的参数的属性。DefaultLoaderRepository Deprecated. UseMBeanServer.getClassLoaderRepository()
instead.ImmutableDescriptor 一个不可变的描述符。JMX JMX API中的静态方法。MBeanAttributeInfo 描述为管理公开的MBean属性。MBeanConstructorInfo 描述MBean公开的构造函数。MBeanFeatureInfo 提供MBean描述符对象的常规信息。MBeanInfo 描述MBean公开的管理接口; 也就是说,可用于管理操作的属性和操作集。MBeanNotificationInfo 对于给定的Java通知类,MBeanNotificationInfo
类用于描述MBean发出的不同通知实例的特征。MBeanOperationInfo 描述MBean公开的管理操作。MBeanParameterInfo 描述MBean公开的操作的参数。MBeanPermission 权限控制对MBeanServer操作的访问。MBeanServerBuilder 此类表示创建默认MBeanServer
实现的构建器。MBeanServerDelegate 从管理角度表示MBean服务器。MBeanServerFactory 提供MBean服务器引用。MBeanServerInvocationHandler InvocationHandler
,它通过MBean服务器将MBean管理接口中的方法转发给MBean。MBeanServerNotification 表示MBean Server通过MBeanServerDelegate MBean发出的通知。MBeanServerPermission 执行与MBeanServers相关的操作的权限。MBeanTrustPermission 此权限表示签名者或代码库中的“信任”。Notification Notification类表示MBean发出的通知。NotificationBroadcasterSupport 提供NotificationEmitter
接口的实现。NotificationFilterSupport 提供NotificationFilter
接口的实现。ObjectInstance 用于表示MBean的对象名称及其类名。ObjectName 表示MBean的对象名称,或者可以与多个MBean的名称匹配的模式。Query 构造查询对象约束。QueryEval 允许在特定MBean服务器的上下文中执行查询。StandardEmitterMBean 一个MBean,其管理接口由Java接口上的反射确定,并发出通知。StandardMBean 一个MBean,其管理接口由Java接口上的反射决定。StringValueExp 表示作为关系约束的参数的字符串。 -
异常摘要 异常 描述 AttributeNotFoundException 指定的属性不存在或无法检索。BadAttributeValueExpException 将无效的MBean特性传递给查询构造方法时抛出。BadBinaryOpValueExpException 将无效表达式传递给构造查询的方法时抛出。BadStringOperationException 将无效的字符串操作传递给构造查询的方法时抛出。InstanceAlreadyExistsException MBean已在存储库中注册。InstanceNotFoundException 存储库中不存在指定的MBean。IntrospectionException 在MBean的内省期间发生了异常。InvalidApplicationException 尝试应用以下任一项时抛出:对MBean的子查询表达式或对错误类的MBean的限定属性表达式。InvalidAttributeValueException 指定的值对属性无效。JMException JMX实现抛出的异常。JMRuntimeException JMX实现发出的运行时异常。ListenerNotFoundException 存储库中不存在指定的MBean侦听器。MalformedObjectNameException 字符串的格式与有效的ObjectName不对应。MBeanException 表示代理中MBean方法抛出的“用户定义”异常。MBeanRegistrationException 包装MBeanRegistration
接口的preRegister(),preDeregister()方法抛出的异常。NotCompliantMBeanException 尝试在MBean服务器中注册不是符合JMX的MBean的对象时发生的异常。OperationsException 表示在MBean上执行操作时在MBean服务器中抛出的异常。ReflectionException 表示使用java.lang.reflect类在MBean上调用方法时在MBean服务器中抛出的异常。RuntimeErrorException 当java.lang.Error
出现java.lang.Error
时,它应该被捕获并重新抛出为RuntimeErrorException
。RuntimeMBeanException 表示代理中MBean方法抛出的运行时异常。RuntimeOperationsException 表示在对MBean执行操作时在代理中引发的运行时异常。ServiceNotFoundException 表示不支持请求的服务时引发的异常。 -
注解类型摘要 Annotation Type 描述 ConstructorParameters 构造函数上的注释,显示该构造函数的参数如何与构造对象的getter方法相对应。DescriptorKey 元注释,描述注释元素如何与Descriptor
中的字段相关联 。MXBean Annotation to mark an interface explicitly as being an MXBean interface, or as not being an MXBean interface.