1 获得CORBA Adapter所使用的Naming Service的对象引用,

2 获得所连接的EMS所对应的在NamingService中注册用的名字,记为nameOfEms。(注:即为名字树图中的id值),id值为“ZTE/E300”,kind为“EMSFactory”.

3 根据名字树图构造name, 通过步骤1中得到的NamingService去获取EmsSessionFactory_I对象的引用。

4 获得访问EMS所需的用户名和密码后,在client端构造emsSession_I CORBA对象,并实现emsSession_I接口定义的四个方法,便于Server端能够检测通讯情况和向Client端报告事件通道的可用情况。调用EmsSessionFactory_I对象引用 的getEmsSession 方法得到EmsSession_I对象引用。

5 调用emsSession_I对象的getEventChannel()获取eventChannel。此步骤也可以省略。

6 调用emsSession_I对象的getSupportedManagers操作,获取EMS所支持的所有管理者的名称。

7 根据各个管理者的名称,调用emsSession_I对象的getManager操作,分别获取各个管理者的对象引用,以便对各个管理者所提供的方法进行操作。

8 对于通知上报:client端需实现StructuredPushConsumer对象,同时可以设置过滤条件。过滤条件的设置必须符合CORBA 2.3的通知服务规范,然后调用管理者“Subscriber”对象提供的subscribe方法。以上就完成了某个通知的订阅。若要暂停或停止通知订阅的话,可以根据先前返回的订阅ID,调用“Subscriber”对象的suspendSubscription和unsubscribe方法。

package com.zte.application.idl;

import nmsSession.NmsSession_I;

import nmsSession.NmsSession_IPOATie;

import org.omg.CORBA.IntHolder;

import org.omg.CORBA.ORB;

import org.omg.CORBA.SystemException;

import org.omg.CosNaming.NameComponent;

import org.omg.CosNaming.NamingContext;

import org.omg.CosNaming.NamingContextHelper;

import org.omg.CosNaming.NamingContextPackage.NotFound;

import org.omg.CosNotifyComm.StructuredPushConsumerHelper;

import org.omg.PortableServer.POA;

import org.omg.PortableServer.POAHelper;

import org.omg.PortableServer.POAPackage.WrongPolicy;

import subscription.EMSSubscriptionMgr_I;

import subscription.EMSSubscriptionMgr_IHelper;

import common.Common_IHolder;

import emsMgr.EMSMgr_I;

import emsMgr.EMSMgr_IHelper;

import emsSession.EmsSession_I;

import emsSession.EmsSession_IHolder;

import emsSession.EmsSession_IPackage.managerNames_THolder;

import emsSessionFactory.EmsSessionFactory_I;

import emsSessionFactory.EmsSessionFactory_IHelper;

import globaldefs.ProcessingFailureException;

import managedElement.ManagedElementList_THolder;

import managedElementManager.ManagedElementMgr_I;

import managedElementManager.ManagedElementMgr_IHelper;

public class test

{

static ORB orb;

static EMSMgr_I emsMgr = null;

static EmsSession_I emsSession=null;

s

tatic ManagedElementMgr_I meMgr = null;

static EMSSubscriptionMgr_I emsSpMgr = null;

public static boolean testTai()

{

//建立连接登录、建立消息通道

try {

String[] args = new String[2];

args[0] = "-ORBInitRef";

args[1] = "NameService=corbaloc::" + "10.217.1.1" + ":" + "6004" + "/NameService";

for (int i = 0; i < args.length; i++) {

System.out.println("初始化ORB对象的启动参数为: arg[" + i + "] = " + args[i]);

}

orb = org.omg.CORBA.ORB.init(args, null);

System.out.println("成功初始化ORB对象!----Initialize Orb");

}

catch (SystemException ex) {

System.out.println("初始化ORB对象异常!");

System.out.println(ex.getMessage());

}

if (orb == null) {

System.out.println("orb == null");

return false;

}

// Get Nameservice reference

NamingContext nsRootContext = null;

try {

org.omg.CORBA.Object objRef = orb.resolve_initial_references(

NameService);

nsRootContext = NamingContextHelper.narrow(objRef);

System.out.println("成功获取取名字服务!----Get Nameservice reference");

}

catch (org.omg.CORBA.ORBPackage.InvalidName ex) {

System.out.println("取名字服务索引异常!");

System.out.println(ex.getMessage());

}

// 3.1 Get Reference to EMSSessionFactory

NameComponent[] name = new NameComponent[1];

name[0] = new NameComponent("ZTE/E300", "EMSFactory");

System.out.println("NameComponent: '" + "ZTE/E300 "+ "','EMSFactory'");

org.omg.CORBA.Object obj = null;

try {

obj = nsRootContext.resolve(name);

System.out.println("成功获取EMSSession工厂! Get Reference to EMSSessionFactory");

}

catch (NotFound ex) {

System.out.println("取EMSSession工厂异常!---NotFound---");

System.out.println(ex.getMessage());

}

catch (org.omg.CosNaming.NamingContextPackage.InvalidName ex) {

System.out.println("取EMSSession工厂异常!---InvalidName---");

System.out.println(ex.getMessage());

}

catch (org.omg.CosNaming.NamingContextPackage.CannotProceed ex) {

System.out.println("取EMSSession工厂异常!---CannotProceed---");

System.out.println(ex.getMessage());

}

//开始准备登陆并且获取EmsSession!

EmsSessionFactory_I m_emsFactory = EmsSessionFactory_IHelper.narrow(obj);

NmsSession_I csession = null;

POA rootpoa = null;

try {

// get reference to rootpoa & activate the POAManager

System.out.println("取得rootpoa并激活POAManager!");

rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));

rootpoa.the_POAManager().activate();

// create servant and register it with the ORB

System.out.println("注册NmsSession到ORB!");

NmsSessionImpl nmsSessionImpl = new NmsSessionImpl();

// nmsSessionImpl.setORB(orb);

byte [] objectID=rootpoa.activate_object(nmsSessionImpl);

// create a tie, with servant b

eing the delegate.

System.out.println("创建NmsSession并且托管给POA!");

NmsSession_IPOATie tie = new NmsSession_IPOATie(nmsSessionImpl,

rootpoa);

// obtain the objectRef for the tie

// this step also implicitly activates the the object

System.out.println("在orb上激活NmsSession对象!");

csession = tie._this(orb);

}

catch (Exception ex) {

System.out.println("创建NmsSession对象过程,执行异常!");

System.out.println(ex.getMessage());

}

EmsSession_IHolder sessionHolder = new EmsSession_IHolder();

try {

System.out.println("获取EmsSession引用对象");

m_emsFactory.getEmsSession("root","", csession, sessionHolder);

System.out.println("NMSsession ---" + csession.toString());

}

catch (globaldefs.ProcessingFailureException ex) {

System.out.println("获取EmsSession引用对象,异常!---ProcessingFailureException---");

System.out.println("可能是用户名或者密码错误,或者权限不够,或者已登陆的用户还未退出!");

System.out.println(ex.toString());

}

emsSession = sessionHolder.value;

System.out.println("EMSsession ---" + emsSession.toString());

//获得所支持的管理器

try {

managerNames_THolder mgrHolder = new managerNames_THolder();

emsSession.getSupportedManagers(mgrHolder);

String[] manages = mgrHolder.value;

for (int i = 0; i < manages.length; i++) {

System.out.println("管理器--Manager " + i + " " + manages[i]);

}

}

catch (ProcessingFailureException pfe) {

System.out.println("获得所支持的管理器,异常!---ProcessingFailureException---");

System.out.println(pfe.toString());

}

emsSession.ping();

// 初始化 ManagedElement 管理器

try {

System.out.println("初始化 ManagedElement 管理器!");

Common_IHolder mgrHolder = new Common_IHolder();

emsSession.getManager("ManagedElement", mgrHolder);

meMgr = ManagedElementMgr_IHelper.narrow(mgrHolder.value);

}

catch (ProcessingFailureException pfe) {

System.out.println(

初始化 ManagedElement 管理器异常!---ProcessingFailureException---);

System.out.println(pfe.toString());

}

// 初始化 EquipmentInventory 管理器

// try {

// System.out.println("初始化 EquipmentInventory 管理器!");

// Common_IHolder mgrHolder = new Common_IHolder();

// emsSession.getManager("EquipmentInventory", mgrHolder);

// eiMgr = EquipmentInventoryMgr_IHelper.narrow(mgrHolder.value);

// }

// catch (ProcessingFailureException pfe) {

// System.out.println(

// 初始化 EquipmentInventory 管理器异常!---ProcessingFailureException---);

// System.out.println(pfe);

// }

// 初始化 MultiLayerSubnetwork 管理器

// try {

// System.out.println("初始化 MultiLayerSubnetwork 管理器!");

// Common_IHolder mgrHolder = new Common_IHolder();

// emsSession.getManager("MultiLayerSubnetw

ork", mgrHolder);

// mlsMgr = MultiLayerSubnetworkMgr_IHelper.narrow(mgrHolder.value);

// // mlsMgr.getAllSubnetworkConnections();

// }

// catch (ProcessingFailureException pfe) {

// System.out.println(

// 初始化 MultiLayerSubnetwork 管理器异常!---ProcessingFailureException---);

// System.out.println(pfe);

// }

// 初始化 EMS 管理器

try {

System.out.println("初始化 EMS 管理器!");

Common_IHolder mgrHolder = new Common_IHolder();

emsSession.getManager("EMS", mgrHolder);

emsMgr = EMSMgr_IHelper.narrow(mgrHolder.value);

System.out.println("EMS_Manager To String ---" + emsMgr.toString());

}

catch (ProcessingFailureException pfe) {

System.out.println("初始化 EMS 管理器异常!---ProcessingFailureException---");

System.out.println(pfe.toString());

}

//初始化事件信道管理器(注意这是非标准的自定义管理器!!!!)

try {

System.out.println("初始化事件信道管理器!");

//我方在IDL中定义的一个基类

Common_IHolder mgrHolder = new Common_IHolder();

//获取注册通道管理者(这个对象我方在IDL定义的一个接口)

emsSession.getManager("Subscriber", mgrHolder);

emsSpMgr = EMSSubscriptionMgr_IHelper.narrow(mgrHolder.value);

System.out.println("EMSSubscriptionMgr To String ---" + emsSpMgr.toString());

}

catch (ProcessingFailureException pfe) {

System.out.println("初始化事件信道管理器!---ProcessingFailureException---");

System.out.println(pfe.toString());

}

//

try{

initEvent(emsMgr, rootpoa);

}catch(Exception e){

e.printStackTrace();

}

return true;

}

private static void initEvent(EMSMgr_I emsMgr, POA rootpoa) {

// 通过远程对象获取网元信息

ManagedElementList_THolder meList = null;

try {

meList = new ManagedElementList_THolder();

meMgr.getAllManagedElements(meList);

for(int i=0,size=meList.value.length;i<size;i++)

{

System.out.println(meList.value[i].name[1].value);

}

System.out.println("获得节点列表!");

}

catch (ProcessingFailureException ex) {

System.out.println(ex.toString());

}

}

public static void main(String args[]) {

try {

test ss = new test();

ss.testTai();

} catch (Exception e) {

e.printStackTrace();

}

}