客户应用框架,也可用于对符合 DMTF 管理标准的其他平台上的管理应用 实现进行测试。
清单 1. 使用 SBLIM 开发包构建管理程序实例
import org.sblim.wbem.cim.CIMClass;
import org.sblim.wbem.cim.CIMDataType;
import org.sblim.wbem.cim.CIMException;
import org.sblim.wbem.cim.CIMInstance;
import org.sblim.wbem.cim.CIMObjectPath;
import org.sblim.wbem.cim.CIMNameSpace;
import org.sblim.wbem.cim.CIMProperty;
import org.sblim.wbem.cim.CIMValue;
import org.sblim.wbem.client.CIMClient;
import org.sblim.wbem.client.PasswordCredential;
import org.sblim.wbem.client.UserPrincipal;
……
UserPrincipal cimPrinciple = new UserPrincipal ("JINGLEI");
String password = "password";
PasswordCredential cimCredential = new PasswordCredential (password.toCharArray());
CIMNameSpace cimNamespace =
new CIMNameSpace("http://CD06070C.CN.IBM.COM:5988", "root/cimv2");
CIMClient cimClient =
new CIMClient(cimNamespace, cimPrinciple, cimCredential, CIMClient.CIM_XML);
CIMObjectPath aPath = new CIMObjectPath("CIM_Identity", "root/cimv2");
Enumeration instNames = cimClient.enumerateInstanceNames (aPath);
while(instNames.hasMoreElements())
{
CIMObjectPath eachEnumPath = (CIMObjectPath) instNames.nextElement();
Enumeration assoNames = cimClient.associatorNames (eachEnumPath,
"CIM_ConcreteDependency",null,null,null);
while(assoNames.hasMoreElements())
{
CIMObjectPath retPath = (CIMObjectPath) assoNames.nextElement();
Enumeration assoInsts = cimClient.associatorNames (retPath,
"CIM_MemberOfCollection", null, null, null);
while(assoInsts.hasMoreElements())
{
CIMObjectPath path = (CIMObjectPath) assoInsts.nextElement();
String privilege = path.getKey ("InstanceID").getValue().toString();
}
}
}
……
程序片断分析 :
本程序用来遍历 CD06070C.CN.IBM.COM 机器上用户及其权限。CIMClient 是 SBLIM 提供的用于和管理应用服务器端进行通信的类,用来向服务一侧请求管理 对象信息。它封装了底层的通信连接建立 , 消息发送接收等基本功能。管理对 象的信息使用类 CIMObjectPath 来封装,cimClient.enumerateInstanceNames (aPath) 操作将获取所有 CIM_Identity 类的实例,而 CIM_Identity 是 DMTF 定义的用来建模系统帐户的类,即该操作将获取 IBM i 上所有系统帐户的实例 。对于每一个帐户 , 为了得到其对应的权限 , 参照图 4 的权限管理建模方式 , 首先通过关联类 CIM_ConcreteDependency 得到该用户的角色 CIM_Role 的实 例。cimClient.associatorNames 实现从 CIM_Identity 到 CIM_Role 的映射。 在获得了用户角色之后,再通过 cimClient.associatorNames 和关联类 CIM_MemberOfCollection 找到这个角色拥有的权限 , 即 CIM_Privilege 的实 例。权限值放在 InstanceID 属性里 , 可以通过 CIMObjectPath 的 getKey 方 法提取。
结束语
Profile 的出现推动了分布式环境下系统管理应用的标准化进程。目前, DMTF 已经发布了几十个 |