next up previous
Next: Syntaktische Nachbearbeitung der generierten Up: Implementierung in CORBA Previous: Implementierung in CORBA

Semantische Nachbesserungen bei der Generierung von IDL-Schnittstellen

Die Generierung gibt die Beziehungen zwischen Objektklassen zwar korrekt wieder; folgendes Problem ergibt sich jedoch durch die Beschreibung von Beziehungen durch Attribute: Wird ein Objekt einer Klasse instantiiert, welche in mehreren anderen Klassen durch entsprechende Attribute als assoziiert gekennzeichnet ist, kann es leicht zu Inkonsistenzen kommen, wenn das Objekt z.B. in der sequence eines Objektes zwar enthalten ist, in einem anderen Objekt jedoch nicht.

Außerdem mußten neue Methodenschnittstellen eingefügt werden, die die Gültigkeit der Beziehungen periodisch überwachen. So überprüft beispielsweise die Methode der System-Objektklasse update_Processes(), welche Prozesse momentan aktiv sind. Für die Methoden, die ausschließlich der Verwaltung von Beziehungen zwischen Objektklassen dienen, mußten daher neue Methoden entworfen und implementiert werden. Dies resultiert aus der Tatsache, daß der OMG Object Relationship Service [9] zwar spezifiziert wurde, aber noch nicht Bestandteil der CORBA-Entwicklungssysteme ist. Eine zukünftige Version des CORBA-Agenten wird diesen Dienst nutzen.

Bezüglich des Erzeugens und Löschens von Objekten bzw. der Objektverwaltung allgemein ergibt sich ein weiteres Problem: Es besteht keine zentrale Komponente (eine sogenannte factory), über die Objekte einer Klasse erzeugt, gelöscht oder zum Beispiel aufgelistet werden könnten. Eine Lösung für dieses und das obige Problem war die Einführung von Metaklassen. Zu jeder Klasse existierte damit eine weitere Klasse, von der allerdings nur ein einziges Objekt instantiiert wird und Funktionen bereitstellt, die der Verwaltung von Objekten der Hauptklasse dienen. Da diese Überlegungen rein implementierungsbedingt sind, wurde darauf verzichtet, die Metaklassen in das Objektmodell aufzunehmen.

Ein Fall, in dem der Nutzen von Metaklassen auf eine andere Art zum Vorschein kommt, trat im Zusammenhang mit der Prozeß-Klasse auf: Generell gilt, daß die CORBA-Systemmanagement-Objekte beim Systemstart instantiiert werden sollten. Bei statischen Objekten bzw. Objekten, die nur über eine geringe Änderungsdynamik verfügen (wie z.B. Prozessoren, Festplatten) ist dies auch kein Problem. Anders verhält es sich aber mit dynamischen Objekten, wie zum Beispiel bei der Überwachung von Prozessen. Es ist nahezu unmöglich, diese Objekte mit dem realen Systemzustand konsistent zu halten. Dazu hätte bei jedem Start eines Prozesses ein entsprechendes Prozeßobjekt instantiiert und bei Prozeßterminierung wieder gelöscht werden müssen. Durch den Zugriff auf die Prozeßobjekte über eine sogenannte ,,before/after``-Metaklasse MetaProcess, konnte dieses Problem gelöst werden. Sobald nun ein Zugriff auf die Metaklasse durchgeführt wird, wird der Bestand an Prozeßobjekten aktualisiert; das anfragende Objekt (in diesem Fall das Managementsystem) erhält also beim Zugriff immer den aktuellen Systemzustand.


next up previous
Next: Syntaktische Nachbearbeitung der generierten Up: Implementierung in CORBA Previous: Implementierung in CORBA
Copyright Munich Network Management Team