**
客户端代码Java编程示例
**
使用生成u2000_idl.jar和C:\JacORB-2.2.4\lib内的jar包进行客户端代码的开发
图 Eclipse 代码demo环境
通过下面编程示例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();
}
}