Die Portierung der Interpreter gestaltete sich
relativ einfach, da bei diesen Interpretern bereits eine
RMI-Schnittstelle
vorhanden war. Lediglich die Datentypen der Rückgabewerte konnten nicht
direkt in die IDL-Schnittstelle übernommen werden. Java-Klassen werden
in IDL zu structs konvertiert und es existiert kein Vererbungsmechanismus
auf structs. Die Java-Klassen
HostList, HostInterfaceList und IPRoutingList erben
voneinander und somit mußten die Datentypen für die IDL-Schnittstelle
abgeändert werden. Die Methoden, welche diese Java-Klassen implementierten,
gingen natürlich ebenfalls verloren. Die IDL-Schnittstelle sieht nun
wie folgt aus:
#ifndef _IPRouting_idl_ #define _IPRouting_idl_ #include "Migration.idl" module iprouting { exception ResourceException {string reason; }; struct HostElement { string hostName; }; typedef sequence<HostElement> HostList; struct InterfaceElement { string description; string IPAddress; HostElement host; }; typedef sequence<InterfaceElement> InterfaceList; struct HostInterfaceElement { long nInterfaces; InterfaceList interfaces; }; typedef sequence<HostInterfaceElement> HostInterfaceList; struct IPRoutingElement { string pattern; long patternInts[4]; string IPAddress; InterfaceElement interfaceElement; }; typedef sequence<IPRoutingElement> IPRoutingList; struct HostIPRoutingElement { IPRoutingList ipRoutingList; }; typedef sequence<HostIPRoutingElement> HostIPRoutingList; interface IPRouting : agent::Migration { HostList getHosts() raises (ResourceException); HostInterfaceList getHostInterfaces(in string community) raises (ResourceException); HostIPRoutingList getIPRouting(in string community) raises (ResourceException); void update(); }; }; #endifDie Funktionalität der einzelnen Operationen ist gleich geblieben. Neu hinzugekommen ist die Operation update(), die bewirkt, daß bei einem Aufruf der get*()-Methoden, die jeweiligen Rückgabesequenzen neu erstellt werden und nicht die zwischengespeicherte Sequenz zurückgeliefert wird.