包 javax.management.relation
提供关系服务的定义。关系服务用于记录 MBean 服务中 MBean 之间的关系。关系服务本身就是一个 MBean。一个 RelationService
MBean 的多个实例可以在一个 MBean Server 中注册。
relation type 定义了 MBean 之间的关系。它包含 MBean 在关系中扮演的 roles。通常一个关系类型中至少有两个角色。
relation 是关系类型的命名实例,其中特定的 MBean 出现在角色中,由它们的 ObjectName
表示。
例如,假设有 Module
MBean,表示应用程序中的模块。 DependsOn
关系类型可以表达一些模块依赖于其他模块的关系,这可以用来确定模块启动或停止的顺序。 DependsOn
关系类型有两个角色,dependent
和 dependedOn
。
每个角色都是 typed ,这意味着出现在该角色中的 MBean 必须是角色类型的实例。在 DependsOn
示例中,两个角色都是 Module
类型。
每个角色都有一个 cardinality ,它提供了在给定关系实例中可以出现在该角色中的 MBean 数量的下限和上限。通常,下限和上限均为 1,角色中恰好出现一个 MBean。基数仅限制每个关系实例中角色中的 MBean 数量。同一个 MBean 可以在一个关系类型的任意数量的实例中以同一个角色出现。在 DependsOn
示例中,一个给定的模块可以依赖于许多其他模块,并且被许多其他模块依赖,但是任何给定的关系实例都恰好将一个 dependent
模块与一个 dependedOn
模块链接起来。
可以显式创建关系类型,作为实现 RelationType
接口的对象,通常是 RelationTypeSupport
。或者,它可以使用关系服务的 createRelationType
方法隐式创建。
可以显式创建关系实例,作为实现 Relation
接口的对象,通常是 RelationSupport
。 (RelationSupport
本身是一个有效的 MBean,因此它可以在 MBean 服务中注册,尽管这不是必需的。)或者,可以使用关系服务的 createRelation
方法隐式创建关系实例。
DependsOn
示例可能编码如下。
import java.util.*; import javax.management.*; import javax.management.relation.*; // ... MBeanServer mbs = ...; // Create the Relation Service MBean ObjectName relSvcName = new ObjectName(":type=RelationService"); RelationService relSvcObject = new RelationService(true); mbs.registerMBean(relSvcObject, relSvcName); // Create an MBean proxy for easier access to the Relation Service RelationServiceMBean relSvc = MBeanServerInvocationHandler.newProxyInstance(mbs, relSvcName, RelationServiceMBean.class, false); // Define the DependsOn relation type RoleInfo[] dependsOnRoles = { new RoleInfo("dependent", Module.class.getName()), new RoleInfo("dependedOn", Module.class.getName()) }; relSvc.createRelationType("DependsOn", dependsOnRoles); // Now define a relation instance "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); // Query the Relation Service to find what modules moduleA depends on Map<ObjectName,List<String>> dependentAMap = relSvc.findAssociatedMBeans(moduleA, "DependsOn", "dependent"); Set<ObjectName> dependentASet = dependentAMap.keySet(); // Set of ObjectName containing moduleB
- 自从:
- 1.5
- 参见:
-
类描述当为关系提供的关系 ID 已被使用时,会引发此异常。当提供无效的关系服务时会引发此异常。无效的关系类型。当在角色信息中,其最小度数大于其最大度数时,会引发此异常。角色值无效。该接口必须由任何预期表示使用关系服务管理的关系的 MBean 类实现。此类是在关系管理期间可以引发的任何异常的超类。当关系服务中给定关系 id 没有关系时,会引发此异常。关系服务中的更改通知。关系服务负责创建和删除关系类型和关系,处理一致性并提供查询机制。关系服务负责创建和删除关系类型和关系,处理一致性并提供查询机制。当对 Relation Service 进行访问但未注册时会引发此异常。关系服务在内部使用 RelationSupport 对象来表示任何关系类型的简单关系(只有角色,没有属性或方法),具有无限数量的角色。关系服务在内部使用 RelationSupport 对象来表示任何关系类型的简单关系(只有角色,没有属性或方法),具有无限数量的角色。RelationType 接口必须由任何期望表示关系类型的类来实现。当关系服务中没有给定名称的关系类型时会引发此异常。RelationTypeSupport 对象实现 RelationType 接口。表示角色:包括角色名称和引用的 MBean(通过它们的 ObjectName)。RoleInfo 对象总结了关系类型中的角色。当给定关系类型中没有具有给定名称的角色信息时,会引发此异常。RoleList 表示角色列表(角色对象)。当关系中的角色不存在、不可读或不可设置时会引发此异常。表示对关系的多个角色进行多次访问的结果(用于读取或写入)。此类描述了访问角色时可能遇到的各种问题。表示未解决的角色:由于问题而未从关系中检索到的角色。RoleUnresolvedList 表示 RoleUnresolved 对象的列表,表示由于在尝试访问(读取或写入)角色时遇到的问题而未从关系中检索到的角色。