Module java.management

Package javax.management.relation


package javax.management.relation

提供了关系服务的定义。关系服务用于记录MBean Server中MBeans之间的关系。关系服务本身也是一个MBean。在MBean Server中可以注册多个RelationService MBean实例。

关系类型定义了MBeans之间的关系。它包含了MBeans在关系中扮演的角色。通常一个关系类型中至少有两个角色。

关系是关系类型的一个命名实例,其中特定的MBeans出现在角色中,通过它们的ObjectName来表示。

例如,假设有代表应用程序中模块的Module MBeans。一个DependsOn关系类型可以表达一些模块依赖于其他模块的关系,这可以用来确定模块启动或停止的顺序。DependsOn关系类型将有两个角色,dependentdependedOn

每个角色都是类型化的,意味着出现在该角色中的MBean必须是角色类型的实例。在DependsOn示例中,两个角色都将是Module类型。

每个角色都有一个基数,它提供了在给定关系实例中可以出现在该角色中的MBeans数量的下限和上限。通常,下限和上限都是1,角色中恰好有一个MBean。基数仅限制了关系实例中角色中MBeans的数量。同一个MBean可以在关系类型的任意数量实例中出现在相同的角色中。在DependsOn示例中,给定模块可以依赖于许多其他模块,并且可以被许多其他模块所依赖,但是任何给定的关系实例将精确地将一个dependent模块与一个dependedOn模块联系起来。

关系类型可以显式创建,作为实现RelationType接口的对象,通常是一个RelationTypeSupport。另外,可以使用关系服务的createRelationType方法隐式创建关系类型。

关系实例可以显式创建,作为实现Relation接口的对象,通常是一个RelationSupport。(一个RelationSupport本身是一个有效的MBean,因此可以注册到MBean Server中,尽管这不是必需的。)另外,可以使用关系服务的createRelation方法隐式创建关系实例。

可以按照以下方式编写DependsOn示例。

import java.util.*;
import javax.management.*;
import javax.management.relation.*;

// ...
MBeanServer mbs = ...;

// 创建关系服务MBean
ObjectName relSvcName = new ObjectName(":type=RelationService");
RelationService relSvcObject = new RelationService(true);
mbs.registerMBean(relSvcObject, relSvcName);

// 为了更容易访问关系服务,创建一个MBean代理
RelationServiceMBean relSvc =
    MBeanServerInvocationHandler.newProxyInstance(mbs, relSvcName,
                                                  RelationServiceMBean.class,
                                                  false);

// 定义DependsOn关系类型
RoleInfo[] dependsOnRoles = {
    new RoleInfo("dependent", Module.class.getName()),
    new RoleInfo("dependedOn", Module.class.getName())
};
relSvc.createRelationType("DependsOn", dependsOnRoles);

// 现在定义一个关系实例 "moduleA DependsOn moduleB"

ObjectName moduleA = new ObjectName(":type=Module,name=A");
ObjectName moduleB = new ObjectName(":type=Module,name=B");

Role dependent = new Role("dependent", Collections.singletonList(moduleA));
Role dependedOn = new Role("dependedOn", Collections.singletonList(moduleB));
Role[] roleArray = {dependent, dependedOn};
RoleList roles = new RoleList(Arrays.asList(roleArray));
relSvc.createRelation("A-DependsOn-B", "DependsOn", roles);

// 查询关系服务以查找moduleA依赖的模块
Map<ObjectName,List<String>> dependentAMap =
    relSvc.findAssociatedMBeans(moduleA, "DependsOn", "dependent");
Set<ObjectName> dependentASet = dependentAMap.keySet();
// 包含moduleB的ObjectName集合
自版本:
1.5
参见:
  • Class
    Description
    当为关系提供的关系ID已经被使用时,会引发此异常。
    当提供了无效的关系服务时,会引发此异常。
    无效的关系类型。
    当在角色信息中,其最小度数大于最大度数时,会引发此异常。
    角色值无效。
    用于MBeanServerNotification的过滤器。
    任何预期使用关系服务管理的关系的MBean类都必须实现此接口。
    任何在关系管理期间可能引发的异常的超类。
    当在关系服务中没有给定关系ID的关系时,会引发此异常。
    关系服务中关系变化的通知。
    关系服务负责创建和删除关系类型和关系,处理一致性并提供查询机制。
    关系服务负责创建和删除关系类型和关系,处理一致性并提供查询机制。
    当访问关系服务但未注册时,会引发此异常。
    RelationService内部使用RelationSupport对象表示简单关系(仅包含角色,没有属性或方法),具有任意关系类型的无限数量角色。
    RelationService内部使用RelationSupport对象表示简单关系(仅包含角色,没有属性或方法),具有任意关系类型的无限数量角色。
    RelationType接口必须由任何预期表示关系类型的类实现。
    当在关系服务中没有给定名称的关系类型时,会引发此异常。
    RelationTypeSupport对象实现了RelationType接口。
    表示一个角色:包括角色名称和引用的MBeans(通过它们的ObjectName)。
    RoleInfo对象总结了关系类型中的一个角色。
    当在给定关系类型中没有给定名称的角色信息时,会引发此异常。
    RoleList表示角色(Role对象)的列表。
    当关系中的角色不存在,或不可读,或不可设置时,会引发此异常。
    表示对关系的多次访问的结果(用于读取或写入)。
    描述在访问角色时可能遇到的各种问题的类。
    表示未解析的角色:由于问题而未从关系中检索到的角色。
    RoleUnresolvedList表示RoleUnresolved对象的列表,表示由于在尝试访问(读取或写入)角色时遇到问题而未从关系中检索到的角色。