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();
};
};
#endif
Die 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.