軟體包 javax.management.relation 的描述。提供 Relation Service 的定義。Relation Service 用於記錄 MBean Server 中各個 MBean 之間的關係。Relation Service 本身就是一個 MBean。在一個 MBean Server 中可以註冊多個 RelationService MBean 的實例。
基本介紹
- 外文名:javax.management.relation
- 提供:Relation Service 的定義
- 記錄:MBean Server 中各個 MBean
- 定義:各個 MBean 之間的關係
概述,創建,編碼,
概述
關係 是關係類型的命名實例,其中具體的 MBean 將出現在由其 ObjectName 表示的角色中。例如,假定存在 Module MBean,其表示應用程式內的模組。DependsOn 關係類型可以表達一些模組依賴於其他模組(這些模組可以用於定義模組開始和停止的順序)的關係。DependsOn 關係類型應有兩個角色,dependent 和 dependedOn。
每個角色都經過了類型化,意味著在該角色中出現的 MBean 必須是該角色類型的實例。在 DependsOn 示例中,兩個角色都屬於類型 Module。
每個角色都有一個容量,它在給定關係實例的這一角色中出現的 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 = (RelationServiceMBean)
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 dependentAMap = relSvc.findAssociatedMBeans(moduleA, "DependsOn", "dependent");
Set dependentASet = dependentAMap.keySet();
// Set of ObjectName containing moduleB
包規範
Specification of the JMX API, version 1.2 (Chapter 11, Relation Service)
從以下版本開始:
1.5