軟體包名稱
主要描述
軟體包javax.management.relation的描述
提供 Relation Service的定義。Relation Service 用於記錄 MBean Server 中各個 MBean 之間的關係。Relation Service 本身就是一個 MBean。在一個 MBean Server 中可以註冊多個 RelationService MBean 的實例。
關係類型 定義各個 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