**

客户端代码Java编程示例

**
 使用生成u2000_idl.jar和C:\JacORB-2.2.4\lib内的jar包进行客户端代码的开发
图 Eclipse 代码demo环境

U2000北向 CORBA客户端代码Java编程示例
通过下面编程示例demo(包含4个类Client,AlarmReciever,TANmsSession_IImpl,Util),实现获取EmsSession、查询U2000支持的manager列表和事件通知订阅。
1 获取EmsSession和查询U2000支持的manager列表
详细的代码示例如下:
package demo;
/**

  • iManager U2000 CORBA interface client program demo
    */
    //Common java data type import
    import mtnm.tmforum.org.emsSession.EmsSession_I;
    import mtnm.tmforum.org.emsSession.EmsSession_IHolder;
    import mtnm.tmforum.org.emsSession.EmsSession_IPackage.managerNames_THolder;
    import mtnm.tmforum.org.emsSessionFactory.EmsSessionFactory_I;
    import mtnm.tmforum.org.emsSessionFactory.EmsSessionFactory_IHelper;
    import mtnm.tmforum.org.nmsSession.NmsSession_I;
    import mtnm.tmforum.org.nmsSession.NmsSession_IPOA;

import org.omg.CosNaming.NameComponent;
import org.omg.DynamicAny.DynAnyFactory;
import org.omg.DynamicAny.DynAnyFactoryHelper;

/************************************************************
Type : client demo program code
Description : U2000 CORBA Program development demo to get emsSession object
************************************************************/
public class Client {
private Client() {
}

private static Client instance = new Client();

public static Client getInstance() {
	return instance;
}
//ORB object
private static org.omg.CORBA.ORB orb = null;

//POA object reference
private static org.omg.PortableServer.POA rootPOA = null;

//emsSeesion object
private static EmsSession_I emsSession = null;

//dynamic any factory,  for translating any type to dynamic any type
private static DynAnyFactory dynAnyFactory = null;;

public static void log(String str) {
	System.out.println(str);
}
//
public static void main(String[] args) {
	if(args.length<4){
		log("usage: java demo.Client 10.71.227.152 12001 admin test1234");
		return;
	}
	log("-------------------------------------------------------");
	log("Naming service IP: " + args[0]);
	log("Naming service port: " + args[1]);
	log("EMS user name : " + args[2]);
	log("Password for user " + args[2] + " : " + args[3]);
	log("-------------------------------------------------------");
	Client.getInstance().connect(args[0], args[1], args[2], args[3]);
}

/*
 * NSIP: naming service IP
 * NSPort: naming service port
 * userName: an EMS user name
 * passWord: the password for a specified EMS user
 */
public  int connect(String NSIP, String NSPort,String userName, String passWord) {
	try {
		//initialize ORB parameters
		String argv[] = new String[2];
		argv[0] = "-ORBInitRef";
		argv[1] = "NameService=corbaloc::" + NSIP + ":" + NSPort+ "/NameService";

		//The step 1: initialize ORB
		orb = org.omg.CORBA.ORB.init(argv, null);
		log("The step 1: initialize ORB successfully!");

		//The step 2: get RootPOA
		rootPOA = org.omg.PortableServer.POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
		rootPOA.the_POAManager().activate();
		log("The step 2: get RootPOA successfully!");

		//the step 3: construct dynamic any factory
		dynAnyFactory = DynAnyFactoryHelper.narrow(orb
				.resolve_initial_references("DynAnyFactory"));
		log("the step 3: construct dynamic any factory."
				+ (dynAnyFactory!= null ? "successfully!" : "failed!"));

		//The step 4: get naming service root object reference
		org.omg.CosNaming.NamingContextExt nc = org.omg.CosNaming.NamingContextExtHelper
				.narrow(orb.resolve_initial_references("NameService"));
		log("The step 4: get naming service root object refrence successfully!");

		//The step 5: get EmsSessionFactory_I object reference from naming service
		
		//construct EmsSessionFactory_I NameComponent,please get it's parameters from HuaWei
		org.omg.CosNaming.NameComponent[] name;
		name = new NameComponent[5];
		name[0] = new NameComponent("TMF_MTNM", "Class");
		name[1] = new NameComponent("HUAWEI", "Vendor");
		name[2] = new NameComponent("Huawei/U2000", "EmsInstance");
		name[3] = new NameComponent("2.0", "Version");
		name[4] = new NameComponent("Huawei/U2000", "EmsSessionFactory_I");

		EmsSessionFactory_I EmsSessionFactory = null;
		try {
			EmsSessionFactory = EmsSessionFactory_IHelper.narrow(nc.resolve(name));
			log("The step 5: get EmsSessionFactory_I object refrence from naming service successfully!");
		} catch (Exception ex) {
			log("The step 5: get EmsSessionFactory_I object refrence from naming service failed! \n please confirm U2000 CORBA is running and EMS name!");
			ex.printStackTrace();
			return 0;
		}

		//get emsSession 
		NmsSession_IPOA pNmsSessionServant = new TANmsSession_IImpl();
		NmsSession_I NmsSession =  pNmsSessionServant._this(orb);

		//The step 6: invoke getEmsSession interface to login U2000 CORBA
		EmsSession_IHolder emsSessionInterfaceHolder = new EmsSession_IHolder();
		try {
			EmsSessionFactory.getEmsSession(userName, passWord, NmsSession,emsSessionInterfaceHolder);
			emsSession = emsSessionInterfaceHolder.value;
			log("The step 6: invoke getEmsSession interface to login U2000 CORBA successfully!");
		} catch (Exception ex) {
			log("The step 6: invoke getEmsSession interface to login U2000 CORBA failed!");
			log(ex.getLocalizedMessage());
			ex.printStackTrace();
			return 0;
		}
		//get and list all supported Managers
		log("The step 7: list all supported Managers:");
		managerNames_THolder managerNames_Holder = new managerNames_THolder();
		emsSession.getSupportedManagers(managerNames_Holder);
		for (int i = 0; i < managerNames_Holder.value.length; i++) {
			log("EmsManagerName[" + i + "] " + managerNames_Holder.value[i]);
		}
		log("The step 8: try to connect structuredPushConsumer to the event channel.");
		//get alarms from EventChannel  
		new AlarmReciever(orb,emsSession).activate();
		orb.run();

	} catch (Exception e) {
		e.printStackTrace();
	
	}
	return 0;
}
public static void listen(){
	//get alarms from EventChannel  
	new AlarmReciever(orb,emsSession).activate();
	orb.run();
}

/**
 *   Getter function, return dynAnyFactory
 */
public static DynAnyFactory getDynAnyFactory() {
	return dynAnyFactory;
}

/**
 *   Setter function, set dynAnyFactory
 */
public static void setDynAnyFactory(DynAnyFactory dynAnyFactory) {
	Client.dynAnyFactory = dynAnyFactory;
}

/**
 *   Getter function, return emsSession
 */
public static EmsSession_I getEmsSession() {
	return emsSession;
}

/**
 *   Setter function, set emsSession
 */
public static void setEmsSession(EmsSession_I emsSession) {
	Client.emsSession = emsSession;
}

/**
 *   Getter function, return orb
 */
public static org.omg.CORBA.ORB getOrb() {
	return orb;
}

/**
 *   Setter function,set orb
 */
public static void setOrb(org.omg.CORBA.ORB orb) {
	Client.orb = orb;
}

/**
 *   Getter function, return rootPOA
 */
public static org.omg.PortableServer.POA getRootPOA() {
	return rootPOA;
}

/**
 *   Setter function,set rootPOA
 */
public static void setRootPOA(org.omg.PortableServer.POA rootPOA) {
	Client.rootPOA = rootPOA;
}

/**
 *   Setter function, set instance
 */
public static void setInstance(Client instance) {
	Client.instance = instance;
}

}
package demo;
import mtnm.tmforum.org.nmsSession.NmsSession_IPOA;
import mtnm.tmforum.org.session.Session_I;
/**

  • NmsSession_IPOA for EMS(U2000) invoking.
  • @author

*/
public class TANmsSession_IImpl extends NmsSession_IPOA {

public void eventLossCleared(String endTime) {
	log("TANmsSession_IImpl.eventLossCleared(String endTime) is invoked by EMS(U2000).");
	log("endTime:"+endTime);
	
}

public void eventLossOccurred(String startTime, String notificationId) {
	log("TANmsSession_IImpl.eventLossOccurred(String startTime, String notificationId) is invoked by EMS.");
	log("startTime:"+startTime+", notificationId:"+notificationId);
}

public Session_I associatedSession() {
	log("TANmsSession_IImpl.associatedSession() is invoked by EMS(U2000).");
	return null;
}

public void endSession() {
	log("TANmsSession_IImpl.endSession() is invoked by EMS(U2000).");
	
}

public void ping() {
	log("TANmsSession_IImpl.ping() is invoked by EMS(U2000).");
	
}
private static void log(String str){
	System.out.println(str);
}

}
2 事件通知订阅和过滤
代码中斜体字部分代码表示订阅和过滤的关键代码,示例代码如下:
package demo;

import mtnm.tmforum.org.emsSession.EmsSession_I;
import mtnm.tmforum.org.globaldefs.ProcessingFailureException;

import org.omg.CORBA.IntHolder;
import org.omg.CosEventChannelAdmin.AlreadyConnected;
import org.omg.CosEventChannelAdmin.TypeError;
import org.omg.CosEventComm.Disconnected;
import org.omg.CosNotification.EventType;
import org.omg.CosNotification.StructuredEvent;
import org.omg.CosNotifyChannelAdmin.AdminLimitExceeded;
import org.omg.CosNotifyChannelAdmin.ClientType;
import org.omg.CosNotifyChannelAdmin.ConsumerAdmin;
import org.omg.CosNotifyChannelAdmin.EventChannel;
import org.omg.CosNotifyChannelAdmin.EventChannelHolder;
import org.omg.CosNotifyChannelAdmin.InterFilterGroupOperator;
import org.omg.CosNotifyChannelAdmin.ProxySupplier;
import org.omg.CosNotifyChannelAdmin.StructuredProxyPushSupplier;
import org.omg.CosNotifyChannelAdmin.StructuredProxyPushSupplierHelper;
import org.omg.CosNotifyComm.InvalidEventType;
import org.omg.CosNotifyComm.StructuredPushConsumer;
import org.omg.CosNotifyComm.StructuredPushConsumerPOA;
import org.omg.CosNotifyFilter.ConstraintExp;
import org.omg.CosNotifyFilter.Filter;
import org.omg.CosNotifyFilter.InvalidConstraint;
import org.omg.CosNotifyFilter.InvalidGrammar;

/**
*

  • get events from event channel

*/
public class AlarmReciever {
private StructuredPushConsumer structuredPushConsumer;
private EventChannel eventChannel;
private ConsumerAdmin consumerAdmin;
private StructuredProxyPushSupplier proxyPushSupplier;
private EmsSession_I emsSession_I;
// ORB object
private org.omg.CORBA.ORB orb = null;

public AlarmReciever(org.omg.CORBA.ORB orb, EmsSession_I emsSession) {
	this.orb = orb;
	this.emsSession_I = emsSession;
}

public void activate() {
	EventChannelHolder eventChannelHolder = new EventChannelHolder();
	try {
		emsSession_I.getEventChannel(eventChannelHolder);
	} catch (ProcessingFailureException e) {
		e.printStackTrace();
		return;
	}
	eventChannel = eventChannelHolder.value;

	// get consumer consumerAdmin
	try {
		IntHolder adminID = new IntHolder();
		consumerAdmin = eventChannel.new_for_consumers(
				InterFilterGroupOperator.AND_OP, adminID);
	} catch (Exception e) {
		consumerAdmin = null;
		e.printStackTrace();
		return;
	}

	EventType eventTypeAdd[] = new EventType[2];
	eventTypeAdd[0] = new EventType();
	eventTypeAdd[1] = new EventType();

	// subscript only NT_ALARM and NT_HEARTBEAT type events
	eventTypeAdd[0].domain_name = "tmf_mtnm";
	eventTypeAdd[0].type_name = "NT_ALARM";
	eventTypeAdd[1].domain_name = "tmf_mtnm";
	eventTypeAdd[1].type_name = "NT_HEARTBEAT";
	EventType eventTypeRemove[] = new EventType[0];
	try {
		log("subscript alarm");
		consumerAdmin.subscription_change(eventTypeAdd, eventTypeRemove);
	} catch (InvalidEventType e) {
		e.printStackTrace();
		log("Failed to set subscription_change.");
		return;
	}

	consumerAdmin.remove_all_filters();
	try {

		EventType alarmEventTypes[] = new EventType[1];
		alarmEventTypes[0] = new EventType();
		alarmEventTypes[0].domain_name = "tmf_mtnm";
		alarmEventTypes[0].type_name = "NT_ALARM";

		ConstraintExp[] alarmExps = new ConstraintExp[2];

		// filter the alarm which perceivedSeverity is PS_CRITICAL or
		// PS_CLEARED.
		alarmExps[0] = new ConstraintExp(alarmEventTypes,
				"($perceivedSeverity == 2) or ($perceivedSeverity == 5)");

		// filter the alarm which serviceAffecting is not
		// SA_NON_SERVICE_AFFECTING.
		alarmExps[1] = new ConstraintExp(alarmEventTypes,
				"$X733_EventType == 'equipmentAlarm'");

		Filter alarmFilter = eventChannel.default_filter_factory()
				.create_filter("TCL");
		alarmFilter.add_constraints(alarmExps);
		consumerAdmin.add_filter(alarmFilter);

		EventType htEventTypes[] = new EventType[1];
		htEventTypes[0] = new EventType();
		htEventTypes[0].domain_name = "tmf_mtnm";
		htEventTypes[0].type_name = "NT_HEARTBEAT";

		ConstraintExp[] htExps = new ConstraintExp[1];

		// filter all heart beat
		htExps[0] = new ConstraintExp(htEventTypes, "1 == 1");
		Filter heartbeatFilter = eventChannel.default_filter_factory()
				.create_filter("TCL");
		heartbeatFilter.add_constraints(htExps);
		consumerAdmin.add_filter(heartbeatFilter);

	} catch (InvalidGrammar e1) {
		e1.printStackTrace();
	} catch (InvalidConstraint e) {
		e.printStackTrace();
	}

	// create and implicitly activate the client
	structuredPushConsumer = (StructuredPushConsumer) new Consumer()._this(orb);

	// get the structured proxy push supplier
	ClientType clientType = ClientType.STRUCTURED_EVENT;
	org.omg.CORBA.IntHolder proxyId = new org.omg.CORBA.IntHolder(0);
	ProxySupplier proxySupplier = null;
	try {
		proxySupplier = consumerAdmin.obtain_notification_push_supplier(
				clientType, proxyId);

	} catch (AdminLimitExceeded e) {
		e.printStackTrace();
		log(" Failed to obtain notification_push_supplier.");
		return;
	}
	proxyPushSupplier = StructuredProxyPushSupplierHelper
			.narrow(proxySupplier);

	// connect structuredPushConsumer to the event channel
	try {
		proxyPushSupplier
				.connect_structured_push_consumer(structuredPushConsumer);
		log("Succeed to connect structuredPushConsumer to the event channel.");
	} catch (AlreadyConnected e) {
		e.printStackTrace();
		log("Failed to connect to structuredPushConsumer to the event channel.");
	} catch (TypeError e) {
		e.printStackTrace();
		log("Failed to connect to structuredPushConsumer to the event channel.");
	}
}

public static void log(String log) {
	System.out.println(log);
}

class Consumer extends StructuredPushConsumerPOA {

	public void disconnect_structured_push_consumer() {
		log("Consumer disconnect_structured_push_consumer.");

	}
	public void push_structured_event(StructuredEvent event)
			throws Disconnected {
		// print received event
		log("<+++>");
		log("event_type=" + event.header.fixed_header.event_type.type_name);
		for (int i = 0; i < event.filterable_data.length; i++) {
			if (null == event.filterable_data[i]) {
				continue;
			}
			log(event.filterable_data[i].name + "="
					+ Util.parseAny(event.filterable_data[i].value));
		}
		log("<--->");
	}

	public void offer_change(EventType[] eventTypeArray,
			EventType[] eventTypeArray1) throws InvalidEventType {
		for(int i=0;i<eventTypeArray.length;i++){
			log(eventTypeArray[i].type_name);
		}
	}
}

}

package demo;
import org.omg.CORBA.Any;
import org.omg.CORBA.TCKind;
import org.omg.DynamicAny.DynAnyFactory;
import org.omg.DynamicAny.DynArray;
import org.omg.DynamicAny.DynEnum;
import org.omg.DynamicAny.DynSequence;
import org.omg.DynamicAny.DynStruct;
import org.omg.DynamicAny.DynUnion;
/**

  • parse any type to string.
  • @author

*/
public class Util
{
private static DynAnyFactory factory = Client.getDynAnyFactory();

/**
 * parseAny
 *
 * @param any Any
 * @return String
 */
public static  String parseAny( Any any )
{
    if( null==any ){
        return null;
    }
    StringBuffer result = new StringBuffer();
    try {
        switch (any.type().kind().value()) {
        case TCKind._tk_char:
            result.append(any.extract_char());
            break;
        case TCKind._tk_null:
            break;
        case TCKind._tk_boolean:
            result.append(any.extract_boolean());
            break;
        case TCKind._tk_short:
            result.append(any.extract_short());
            break;
        case TCKind._tk_long:
            result.append(any.extract_long());
            break;
        case TCKind._tk_double:
            result.append(any.extract_double());
            break;
        case TCKind._tk_float:
            result.append(any.extract_float());
            break;
        case TCKind._tk_octet:
        	result.append(any.extract_octet());
        	break;
        case TCKind._tk_ulong:
        	result.append(any.extract_ulong());
        	break;
        case TCKind._tk_string:
            result.append(any.extract_string());
            break;
        case TCKind._tk_enum:
        {
            DynEnum dynEnum = (DynEnum) factory.create_dyn_any(any);
            result.append(dynEnum.get_as_string());
            break;
        }
        case TCKind._tk_any:
        {
        	any=factory.create_dyn_any(any).get_any();
        	result.append(any);
            break;
        }
        case TCKind._tk_objref:
        {
        	result.append(any.extract_Object());
            break;
        }
            
        case TCKind._tk_struct:
        case TCKind._tk_except:
        {
            DynStruct dynstruct = (DynStruct) factory.create_dyn_any(any);
            org.omg.DynamicAny.NameValuePair[] members = dynstruct.get_members();
            result.append("{");
            for (int i = 0; i < members.length; i++) {
                //result.append("[" + members[i].id + "=");
            	if(i>0){
            		result.append(" ");
            	}
                result.append(members[i].id).append(" ").append(parseAny(members[i].value));
            }
            result.append("}");
            break;
        }
        case TCKind._tk_union:
            DynUnion dynunion = (DynUnion) factory.create_dyn_any(any);
            result.append(dynunion.member_name()).append(" ");
            result.append(parseAny(dynunion.member().to_any()));
            break;
        case TCKind._tk_sequence:
            DynSequence dynseq = (DynSequence) factory.create_dyn_any(any);
            Any[] contents = dynseq.get_elements();
            result.append("{");
            for (int i = 0; i < contents.length; i++){
                result.append(parseAny(contents[i]));
            }
            result.append("}");
            break;
        case TCKind._tk_array:
            DynArray dynarray = (DynArray) factory.create_dyn_any(any);
            Any[] array_contents = dynarray.get_elements();
            result.append("{");
            for (int i = 0; i < array_contents.length; i++){
                result.append(parseAny(array_contents[i]) ).append(" ");
            }
            result.append("}");
            break;
        default:
            result.append(any.type().kind().value());

        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return result.toString();

}

}

相关文章: