Module  java.management

Package javax.management.relation

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

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

关系是一个关系类型的命名实例,其中特定的MBean出现在角色中,由他们的ObjectName代表。

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

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

每个角色都有一个基数 ,它为给定的关系实例中可以出现在该角色中的MBean的数量提供下限和上限。 通常,下限和上限都是1,正好有一个MBean出现在角色中。 基数只限制每个关系实例的角色中的MBean的数量。 相同的MBean可以在任何数量的关系类型的实例中以相同的角色出现。 DependsOn示例中,给定的模块可以依赖于许多其他模块,并且取决于许多其他模块,但任何给定的关系实例dependent链接一个dependent模块和一个dependedOn模块。

可以明确地创建关系类型,作为实现RelationType接口的对象,通常为RelationTypeSupport 或者,可以使用Relation Service的createRelationType方法隐式创建它。

可以明确地创建关系实例,作为实现Relation接口的对象,通常为RelationSupport (A RelationSupport本身是一个有效的MBean,所以它可以在MBean服务器中进行注册,尽管这不是必需的)。或者,可以使用Relation Service的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
另请参见:
Java Platform documentation on JMX technology, in particular the JMX Specification, version 1.4