模块  java.management

Package javax.management.relation

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

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

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

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

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

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

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

可以显式创建关系实例,作为实现Relation接口的对象,通常为RelationSupport RelationSupport本身是一个有效的MBean,因此它可以在MBean Server中注册,但这不是必需的。)或者,可以使用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
另请参见:
JMX Specification, version 1.4