Conseguir accidentes a trav茅s de NotificationIRP en OSS

Hola En una publicaci贸n anterior, se consider贸 un m茅todo para recibir alarmas activas a trav茅s de AlarmIRP. A continuaci贸n, veremos c贸mo recibir alarmas a medida que ocurren usando NotificationIRP. En el ejemplo, utilizaremos NetAct Nokia.

En comparaci贸n con AlarmIRP, la interfaz considerada en este art铆culo nos requerir谩, adem谩s de crear un cliente CORBA, tambi茅n crear un "servidor CORBA" que procesar谩 los mensajes de NotificationIRP. Este "servidor", entre otras cosas, debe implementar el m茅todo push_structured_events al que OSS transmitir谩 eventos en forma de StructuredEvent [] . Para hacer esto, necesitamos la siguiente clase:

private class IRPManager extends org.omg.CosNotifyComm.SequencePushConsumerPOA{ @Override public void push_structured_events(StructuredEvent[] notifications) throws org.omg.CosEventComm.Disconnected { for (StructuredEvent alarm: notifications) { alarmPrint(alarm); } } @Override public void offer_change(EventType[] arg0, EventType[] arg1) throws org.omg.CosNotifyComm.InvalidEventType { System.out.println("Offer Change!"); } @Override public void disconnect_sequence_push_consumer() { System.out.println("Disconnected!"); } } 

El m茅todo alarmPrint es similar al mismo nombre del art铆culo anterior. Al final, se adjuntar谩 el c贸digo completo de todo el proyecto.

Ahora necesita "ajustar" esta clase con la funcionalidad del servidor ORB, obtener NotificationIRP y pasarle un enlace al objeto recibido.

 _irpMan = new IRPManager(); _notificationOrb = ORB.init(new String[0], null); org.omg.CORBA.ORB orb = ORB.init(new String[0], null); org.omg.CORBA.Object rootObj = orb.string_to_object(readIOR()); _notifIrp = com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.NotificationIRPHelper.narrow(rootObj); POA poa; poa = POAHelper.narrow(_notificationOrb.resolve_initial_references("RootPOA")); poa.the_POAManager().activate(); _notifySrvr = poa.servant_to_reference(_irpMan); _notifyServer = _notificationOrb.object_to_string(_notifySrvr); //     String[] aCat = _notifIrp.get_notification_categories(new NotificationTypesSetHolder()); StringTypeOpt alarmFltr = new StringTypeOpt(); alarmFltr.value(alarmFilter); //   _attId = _notifIrp.attach_push(_notifyServer, timetick, aCat, alarmFltr, ""); // ORB   (new notificationThread()).start(); 

Para ejecutar ORB usaremos un subproceso:
 private class notificationThread extends Thread { public void run() { _notificationOrb.run(); } } 

OSS dejar谩 de enviarnos notificaciones despu茅s de que expire el tiempo , o hasta que lo rechacemos llamando al m茅todo de desconexi贸n . Si necesitamos recibir mensajes despu茅s de que caduque el temporizador, debemos informarlo al sistema utilizando el m茅todo get_subscription_status . Cuando se llama, el temporizador comenzar谩 la cuenta regresiva nuevamente.
Queda por recopilar todo, encontrar las bibliotecas necesarias en NetAct y conectarse a la m谩quina virtual en la que se est谩 ejecutando el servidor nbi3gc (desde el IOR en este ejemplo estamos leyendo el archivo). Para ejecutar el ejemplo propuesto, usaremos el comando:
java -cp .: jacorb-3.1.jar: jacorb-services-3.1.jar: nbi3gc-internal-corba-interface-17.8.0.158.jar AlarmClient

Debajo del spoiler, el c贸digo de ejemplo completo
 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import org.omg.CORBA.IntHolder; import org.omg.CORBA.ORB; import org.omg.CORBA.ORBPackage.InvalidName; import org.omg.CosNotification.EventType; import org.omg.CosNotification.Property; import org.omg.CosNotification.StructuredEvent; import org.omg.PortableServer.POA; import org.omg.PortableServer.POAHelper; import org.omg.PortableServer.POAManagerPackage.AdapterInactive; import org.omg.PortableServer.POAPackage.ServantNotActive; import org.omg.PortableServer.POAPackage.WrongPolicy; import org.omg.TimeBase.UtcT; import org.omg.TimeBase.UtcTHelper; import com.nsn.oss.nbi.internal.corba.ManagedGenericIRPConstDefs.StringTypeOpt; import com.nsn.oss.nbi.internal.corba.ManagedGenericIRPConstDefs.StringTypeOptHolder; import com.nsn.oss.nbi.internal.corba.ManagedGenericIRPSystem.InvalidParameter; import com.nsn.oss.nbi.internal.corba.ManagedGenericIRPSystem.OperationNotSupported; import com.nsn.oss.nbi.internal.corba.ManagedGenericIRPSystem.ParameterNotSupported; import com.nsn.oss.nbi.internal.corba.NotificationIRPConstDefs.NotificationTypesSetHolder; import com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.GetNotificationCategories; public class AlarmClient { private com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.NotificationIRP _notifIrp = null; public String alarmFilter =""; private final long UNIX_OFFSET = 122192928000000000L; public String delimiter = ";"; private org.omg.CORBA.ORB _notificationOrb = null; private String _notifyServer = null; private org.omg.CORBA.Object _notifySrvr = null; private String _attId = ""; private IRPManager _irpMan = null; public int timetick = 15; public static void main(String[] args) { AlarmClient ac = new AlarmClient(); ac.startNotifications(); try { Thread.sleep(20000); } catch (InterruptedException e) { e.printStackTrace(); } ac.stopNotifications(); } private String readIOR(String iorType) { File f = new File("/d/oss/global/var/NSN-nbi3gc/ior/NotificationIRP.ior"); BufferedReader br; String iorContents = null; try { br = new BufferedReader(new FileReader(f)); iorContents = br.readLine(); br.close(); } catch (IOException e) { e.printStackTrace(); } return iorContents; } private void alarmPrint(StructuredEvent alarm){ String result = ""; UtcT timeValue = null; Date dt; DateFormat df; if (alarm.filterable_data != null) { for (Property filterableData: alarm.filterable_data) { String fieldName = filterableData.name; switch (fieldName){ case "b": timeValue = UtcTHelper.extract(filterableData.value); dt = new Date((timeValue.time - UNIX_OFFSET) / 10000); df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); result = result + df.format(dt) + delimiter; break; case "e": result = result + filterableData.value.extract_string() + delimiter; break; case "i": result = result + filterableData.value.extract_string() + delimiter; break; } } } System.out.println(result); } public void startNotifications(){ _irpMan = new IRPManager(); _notificationOrb = ORB.init(new String[0], null); org.omg.CORBA.ORB orb = ORB.init(new String[0], null); org.omg.CORBA.Object rootObj = orb.string_to_object(readIOR("NotificationIRP")); _notifIrp = com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.NotificationIRPHelper.narrow(rootObj); POA poa; try { poa = POAHelper.narrow(_notificationOrb.resolve_initial_references("RootPOA")); poa.the_POAManager().activate(); _notifySrvr = poa.servant_to_reference(_irpMan); _notifyServer = _notificationOrb.object_to_string(_notifySrvr); String[] aCat = _notifIrp.get_notification_categories(new NotificationTypesSetHolder()); StringTypeOpt alarmFltr = new StringTypeOpt(); alarmFltr.value(alarmFilter); _attId = _notifIrp.attach_push(_notifyServer, timetick, aCat, alarmFltr, ""); (new notificationThread()).start(); } catch (InvalidName | AdapterInactive | ParameterNotSupported | com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.AtLeastOneNotificationCategoryNotSupported | InvalidParameter | com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.Attach | com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.AlreadySubscribed | ServantNotActive | WrongPolicy | GetNotificationCategories | OperationNotSupported e) { e.printStackTrace(); } } public void stopNotifications() { try { _notifIrp.detach(_notifyServer, _attId); _notificationOrb.shutdown(true); } catch (com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.DetachException | ParameterNotSupported | InvalidParameter e) { e.printStackTrace(); } } public int renewSubscription() { com.nsn.oss.nbi.internal.corba.NotificationIRPConstDefs.SubscriptionStateHolder arg2 = new com.nsn.oss.nbi.internal.corba.NotificationIRPConstDefs.SubscriptionStateHolder(); IntHolder arg3 = new IntHolder(); StringTypeOptHolder arg1 = new StringTypeOptHolder(); arg1.value.value(alarmFilter); try { _notifIrp.get_subscription_status(_attId, arg1, arg2, arg3); } catch (InvalidParameter | com.nsn.oss.nbi.internal.corba.ManagedGenericIRPSystem.OperationNotSupported | com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.GetSubscriptionStatus e) { e.printStackTrace(); } return arg2.value.value(); } private class IRPManager extends org.omg.CosNotifyComm.SequencePushConsumerPOA{ @Override public void push_structured_events(StructuredEvent[] notifications) throws org.omg.CosEventComm.Disconnected { for (StructuredEvent alarm: notifications) { alarmPrint(alarm); } } @Override public void offer_change(EventType[] arg0, EventType[] arg1) throws org.omg.CosNotifyComm.InvalidEventType { System.out.println("Offer Change!"); } @Override public void disconnect_sequence_push_consumer() { System.out.println("Disconnected!"); } } private class notificationThread extends Thread { public void run() { _notificationOrb.run(); } } } 

Gracias por su atencion Result贸 brevemente, pero, en mi opini贸n, se consideran los puntos principales, espero que esta informaci贸n sea 煤til. Preguntas y comentarios son bienvenidos.

Source: https://habr.com/ru/post/es423583/


All Articles