next up previous contents
Next: Zusammenfassung und Ausblick Up: Schnittstelle zum Manager Previous: Der Switch-Agent

Binden an den Event Channel

In diesem Kapitel soll die Implementierung der Anbindung des Agenten an den Event Channel betrachtet werden. Dazu ist es nötig, auf das Prinzip der Anbindung an den Event Channel näher einzugehen.

Wird ein Event Channel zum ersten Mal erzeugt, besitzt er weder Supplier noch Consumer. Diese beiden führen folgende Schritte aus, um sich an den Event Channel zu binden bzw. mit diesem zu kommunizieren:

Im Falle des PC-basierten Switch wird das üblichere Verfahren (nach [Vis97c]) des Push-Modells angewendet. Das Pull-Modell soll hier nicht betrachtet werden, da das Push-Modell sich für das Verschicken von Ereignismeldungen besser eignet. Hierzu muß das Agentenobjekt das PushSupplier-Interface implementieren. Der Manager implementiert entsprechend das PushConsumer-Interface. Die für den Agenten nötigen Schritte sind in Tabelle 5.1 dargestellt.


 
 
Tabelle 5.1: Binden an den Eventchannel
Schritt Push Supplier
Binden an den Event Channel EventChannelHelper::bind()
Referenz auf das Proxy Objekt EventChannel::for_suppliers()
Consumer Proxy anfordern SupplierAdmin::obtain_push_consumer()
Supplier an den Proxy binden ProxyPushConsumer::connect_push_supplier()
Daten verschicken ProxyPushConsumer::push

Für den Prototypen wurde eine Klasse eventPushSupplier.java geschrieben. Diese greift die Information, die der Switch über die netlink-Schnittstelle des Linux-Kernels an einen externen Dämonen (brd) weiterleitet und von diesem auf <stderr> ausgegeben wird, auf und schickt sie dann an einen vorher definierten Event Channel. Der Name dieses Event Channels wird im Feld event_channel_name des in Kapitel 4.5 geschilderten structured events übergeben.

Der Event Channel wird vom Eventprogramm des Agenten (eventPushSupplier.java) erzeugt und beim BOA angemeldet.

124       // Initialize the ORB and BOA                                     
125       org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();                 
126       org.omg.CORBA.BOA boa = orb.BOA_init();

Das Eventprogramm erbt von der Klasse _PushSupplierImplBase. Nach der Initialisierung des ORB und BOA erzeugt es einen Event Channel (create_channel()):

128   // Create the channel                                             
129   EventChannel channel = EventLibrary.create_channel(boa,           
130                                       "AgentInitChannel",
131                                                    false,         
132                                                     100);

Anschließend fordert es einen ProxyPushConsumer an (obtain_push_consumer()). Um den PushSupplier des Agenten mit dem Proxy-Objekt im Event Channel zu verbinden, führt der Agent einen connect aus (connect_push_supplier()).

133   // Create the proxy-consumer                                      
134   ProxyPushConsumer proxyPushConsumer =                             
135     channel.for_suppliers().obtain_push_consumer();                 
136                                                                         
137   // Connect a supplier to proxy-consumer                           
138   eventPushSupplier supplier = new eventPushSupplier(channel,       
139                                           proxyPushConsumer);

[...]                                                        

146   try {                                                             
147     proxyPushConsumer.connect_push_supplier(supplier);              
148   }

Durch Aufruf der Methode push() auf dem Proxy-Objekt ist der Agent nun in der Lage Statusmeldungen in den Event Channel zu pushen.

202   // Push message in the channel                                    
203   System.out.println("Supplier pushing: "+any.toString());          
204   try {                                                             
205     proxyPushConsumer.push(any);                                    
206   }

Der VisiBroker Event Service unterstützt momentan lediglich generische Ereignismeldungen. Daher müssen die Daten, die in den Event Channel gepusht werden, zwingend als CORBA Any-Datentyp verpackt werden (Vorgabe des EventChannel-Interfaces). Überdies gibt es keine garantierte Datenübertragung. Die Datensicherheit stützt sich allein auf die Sicherheitsmechanismen von TCP/IP, welches zur Kommunikation zwischen Sender und Empfänger zur Anwendung kommt.

Der Vorgang für das Versenden der Ereignismeldungen des Switch gleicht dem bisher beschriebenen. Zunächst werden der BOA und der ORB initialisiert und ein neuer Event Channel mit dem Namen PCSwitch kreiert. Anschließend wird ein ProxyPushConsumer angefordert (obtain_push_consumer()). Um den PushSupplier des Agenten mit dem Proxy-Objekt im Event Channel zu verbinden, führt der Agent einen connect aus (connect_push_supplier()).

228   // Create the proxy-consumer                                      
229   ProxyPushConsumer myproxyPushConsumer =                           
230     myEventChannel.for_suppliers().obtain_push_consumer();          
231                                                                         
232   // Instantiiere neues Objekt                                       
233   myEventPushSupplier = new eventPushSupplier(myEventChannel,       
234                                         myproxyPushConsumer); 

[...]

243   try {                                                             
244     myEventPushSupplier.myproxyPushConsumer.                        
245       connect_push_supplier(myEventPushSupplier);                   
246   }

Dabei ist eventPushSupplier() die Konstruktormethode. Dieser werden die Referenz auf den Event Channel und dem proxyPushConsumer übergeben, damit diese beiden Attribute später in den Event Channel gepusht werden können:

295   myEventPushSupplier.push_event( port, mac);

Die Methode push_event() konstruiert den nötigen structured event. Der Aufbau dieses Events für die Übermittlung der Port- und MAC-Adresse an den Manager zeigt Abbildung 5.4.


  
Abbildung: Aufbau eines Structured Events für den PCSwitch Event-Channel

Der Fixed Header besteht aus dem Eintrag systemmanagement und dem Namen des Eventtyps (newsystem). Der Filterable Body sieht die Felder für den agent_type, agent_name und den event_channel_name vor, die mit den gleichen Werten wie in Kapitel 4.5 belegt werden. Anschließend folgen die Felder port_id und mac_address, die die Portadresse und die MAC-Adresse aufnehmen.


next up previous contents
Next: Zusammenfassung und Ausblick Up: Schnittstelle zum Manager Previous: Der Switch-Agent
Root on HPHEGER0
3/3/1999