接口 | 描述 |
---|---|
Descriptor |
JMX元素的附加元数据。
|
DescriptorAccess |
该接口用于访问与JMX组件关联的描述符类的描述符,即
|
DescriptorRead |
用于读取管理界面元素(如MBeanInfo)的描述符的接口。
|
DynamicMBean |
定义应该由动态MBean(显示动态管理界面的MBean)实现的方法。
|
MBeanRegistration |
可以由MBean实现,以便在从MBean服务器注册或注销之前和之后执行操作。
|
MBeanServer |
这是代理方面的MBean操作界面。
|
MBeanServerConnection |
此接口表示与MBean服务器通信的方式,无论是本地还是远程。
|
MBeanServerDelegateMBean |
定义MBeanServerDelegate类的对象的管理界面。
|
NotificationBroadcaster |
由发出通知的MBean实现的接口。
|
NotificationEmitter |
由发出通知的MBean实现的接口。
|
NotificationFilter |
由任何作为通知过滤器的类来实现。
|
NotificationListener |
应该由想要接收通知的对象来实现。
|
PersistentMBean |
这个类是由MBeans实现的,旨在持久化的接口。
|
QueryExp |
表示与数据库查询“where子句”类似的关系约束。
|
ValueExp |
表示可以作为参数传递给关系表达式的值。
|
类 | 描述 |
---|---|
Attribute |
通过将其名称与其值相关联来表示MBean属性。
|
AttributeChangeNotification |
提供MBean发送的属性更改通知的定义。
|
AttributeChangeNotificationFilter | |
AttributeList |
表示MBean属性值的列表。
|
AttributeValueExp |
表示用作关系约束的参数的属性。
|
DefaultLoaderRepository | Deprecated |
ImmutableDescriptor |
一个不可变的描述符。
|
JMX |
来自JMX API的静态方法。
|
MBeanAttributeInfo |
描述为管理而公开的MBean属性。
|
MBeanConstructorInfo |
描述由MBean公开的构造函数。
|
MBeanFeatureInfo |
提供一个MBean描述符对象的一般信息。
|
MBeanInfo |
描述MBean暴露的管理界面;
即可用于管理操作的一组属性和操作。
|
MBeanNotificationInfo |
MBeanNotificationInfo 类用于描述针对给定Java类通知的MBean发出的不同通知实例的特性。
|
MBeanOperationInfo |
描述MBean公开的管理操作。
|
MBeanParameterInfo |
描述MBean暴露的操作的参数。
|
MBeanPermission |
控制访问MBeanServer操作的权限。
|
MBeanServerBuilder |
此类表示创建默认的 MBeanServer 实现的构建器。
|
MBeanServerDelegate |
从管理的角度来看MBean服务器。
|
MBeanServerFactory |
提供MBean服务器引用。
|
MBeanServerInvocationHandler |
InvocationHandler 将MBean管理界面中的方法通过MBean服务器转发到MBean。
|
MBeanServerNotification |
表示MBean服务器通过MBeanServerDelegate MBean发出的通知。
|
MBeanServerPermission |
A执行与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接口的preDeregister()方法
MBeanRegistration 异常。
|
NotCompliantMBeanException |
尝试在不符合JMX的MBean的MBean服务器中注册对象时发生的异常。
|
OperationsException |
表示对MBean执行操作时MBean服务器中抛出的异常。
|
ReflectionException |
表示在使用java.lang.reflect类调用MBean方法时,MBean服务器中抛出的异常。
|
RuntimeErrorException |
当一个
java.lang.Error 发生在代理中时,它应该被捕获并重新抛出为
RuntimeErrorException 。
|
RuntimeMBeanException |
表示代理中MBean方法抛出的运行时异常。
|
RuntimeOperationsException |
表示在对MBean执行操作时在代理中抛出的运行时异常。
|
ServiceNotFoundException |
表示不支持请求的服务时引发的异常。
|
Annotation Type | 描述 |
---|---|
DescriptorKey |
描述注释元素如何与 Descriptor 中的字段相关的元标注 。
|
MXBean |
用于将界面明确标记为MXBean接口或不作为MXBean接口的注释。
|
提供Java管理扩展的核心类。
Java管理扩展(JMX TM )API是用于管理和监视的标准API。 典型用途包括:
JMX API也可以用作管理系统,网络等的解决方案的一部分。
API包括远程访问,因此远程管理程序可以与正在运行的应用程序进行交互,以实现这些目的。
JMX API的基本概念是MBean 。 MBean是一个表示资源的命名管理对象 。 它具有必须公开的管理界面 ,包括:
例如,代表应用程序配置的MBean可以具有表示不同配置项的属性。 读取CacheSize
属性将返回该项目的当前值。 编写它会更新项目,从而潜在地改变正在运行的应用程序的行为。 save等save
可以save
存储当前配置。 每次更改ConfigurationChangedNotification
都可以发送ConfigurationChangedNotification等ConfigurationChangedNotification
。
在JMX API的标准用法中,MBeans被实现为Java对象。 然而,如下所述,这些对象通常不直接引用。
为了使MBean的实现变得简单,JMX API包含了标准MBean的概念。 标准MBean是一种使用某些命名模式从Java界面推导其属性和操作的类,与JavaBeans TM类似。 例如,考虑一个这样的接口:
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 。
有两种方法来创建一个具有此管理界面的MBean的Java对象。 一个是对象是一个与Java接口具有完全相同名称但没有MBean
后缀的类。 因此,在示例中,对象将是类Configuration
,在相同的Java包为ConfigurationMBean
。 第二种方法是使用StandardMBean
类。
MXBean是标准MBean的变体,其中复杂类型映射到javax.management.openmbean
包中定义的一组标准类型。 如果您需要在MBean界面中引用特定于应用程序的类,那么MXBeans是合适的。 他们进行了详细的规范说明MXBean
。
动态MBean是一个在运行时定义其管理界面的MBean。 例如,配置MBean可以通过解析XML文件来确定其公开的属性的名称和类型。
实现DynamicMBean
接口的类的任何Java对象都是动态MBean。
一个开放MBean是一种动态MBean,其中使用一小组预定义Java类构建了属性类型和操作参数和返回值。 开放的MBeans可以帮助远程管理程序进行操作,这些程序不一定能够访问特定于应用程序的类型,包括非Java程序。 打开的MBeans由包 javax.management.openmbean
定义。
模型MBean是一种动态MBean,充当管理界面和底层托管资源之间的桥梁。 管理界面和被管理资源都被指定为Java对象。 相同的Model MBean实现可以通过不同的管理接口和托管资源重复使用多次,并且可以提供常见的功能,如持久性和缓存。 型号MBeans由包 javax.management.modelmbean
定义。
为了有用,必须在MBean服务器中注册MBean 。 MBean服务器是MBean的存储库。 通常,MBean的唯一访问是通过MBean服务器。 换句话说,代码不再直接访问实现MBean的Java对象,而是通过MBean服务器以名称访问MBean。 每个MBean在MBean服务器中都有一个唯一的名称,由ObjectName
类定义。
MBean服务器是一个实现该接口的对象MBeanServer
。 使用最方便的MBean服务器是Platform MBean Server 。 这是一个单独的MBean服务器,可以在同一个Java虚拟机中运行的不同托管组件共享。 使用方法ManagementFactory.getPlatformMBeanServer()
访问平台MBean服务器。
应用程序代码还可以使用MBeanServerFactory
类创建一个新的MBean服务器,或访问已创建的MBean服务器。
创建MBean有两种方法。 一个是构造一个将被称为MBean的Java对象,然后使用registerMBean
方法在MBean服务器中注册它。 另一个是使用createMBean
方法之一在一个操作中创建和注册MBean。
registerMBean
方法对于本地使用来说更简单,但不能远程使用。 createMBean
方法可以远程使用,但有时需要注意类加载问题。
当它被注册或未注册的MBean服务器,如果它实现了一个MBean可以执行的操作MBeanRegistration
接口。
给定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和/或其属性满足某些限制的MBean,可以查询MBean服务器。 名称模式使用ObjectName
类构建,约束使用Query
类构建 。 方法queryNames
和queryMBeans
然后执行查询。
MBean可以实现MBeanRegistration
接口,以便在MBean服务器中注册和注销时被告知。 此外, preRegister
方法允许MBean获得对MBeanServer
对象的引用,并在MBean服务器中获取其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服务器中其他MBean发出的通知的侦听器。 在这种情况下,它实现NotificationListener
,方法MBeanServer.addNotificationListener(ObjectName, ObjectName, NotificationFilter, Object)
用于监听。
MBean服务器可以远程通过连接器来访问。 连接器允许远程Java应用程序以与本地服务器基本相同的方式访问MBean服务器。 包 javax.management.remote
定义连接器。
JMX规范还定义了适配器的概念。 适配器在协议(如SNMP或HTML)中的请求之间进行转换,并访问MBean服务器。 因此,例如,SNMP GET操作可能会导致MBean服务器上的getAttribute
。
当客户端使用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
。
您不能在ObjectName
的关键属性中使用通配符 ,例如domain:type=Foo,name=*
。 仍然允许匹配整个属性的通配符,例如*:*
或*:type=Foo,*
。
您不能在查询中使用Query.isInstanceOf
。
HeapMemoryUsage.used
在observed attribute显示器中不能使用点语法,如javax.management.monitor
软件包的文档所述。