In diesem Abschnitt soll gezeigt werden wie anstelle von Vererbung der Tie Mechanismus eingesetzt werden kann. Der Tie Mechanismus stellt eine Alternative zur Vererbung dar und wird eingesetzt, wenn es unangebracht oder unmöglich ist, daß die Objekt Implementation von der durch den IDL Compiler generierten Skeleton Klasse erbt.
Der Tie Mechanismus stellt eine Alternative zur Implementierung der Implementationsklasse über das Erben von der generierten Skeleton Klasse dar. Da Java keine Mehrfachvererbung unterstützt und der Entwickler möglicher Weise von einer anderen als der Skeleton Klasse erben möchte, kann es notwendig werden, den Tie Mechanismus zu verwenden.
Der Tie Mechanismus bietet eine sogenannte Delegator Implementation Klasse an, die von org.omg.CORBA.Object erbt. Die Delegator Implementation bietet keine eigene Semantik, sondern delegiert alle Aufrufe an wirkliche Implementationsklassen, die separat implementiert werden können.
Die
Operations
Klasse definiert sämtliche Methoden, die von der Objekt Implementation implementiert werden müssen. Diese Klasse agiert als das sogenannte delegierte Objekt für die entsprechende _tie Klassen, wenn der Tie Mechanismus verwendet wird.
Als Beispiel dient das Count Programm aus
Eine erste JavaCORBA Anwendung. Anstelle des dort verwendeten Vererbungsmechanismuses wird der Tie Mechanismus verwendet.
Der Aufruf des IDL Compilers wird in der Form abgewandelt, daß nun die benötigten tie Klassen generiert werden.
Prompt> idl2java count.idl -no_comments
In dem Verzeichnis Counter wurden gegenüber der Version des Programmes in
Eine erste JavaCORBA Anwendung zusätzlich die Dateien _tie_Count und CountOperations angelegt.
Listing 1 zeigt die Modifikationen an der Server Klasse. Es sollte der extra Schritt in Form der Erzeugung einer Instanz von
_tie_Count
beachtet werden.
class CountServer {
static public void main(String[] args) {
try {
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
org.omg.CORBA.BOA boa = orb.BOA_init();
//Erzeugen eines CountImpl Objektes.
CountImpl countImpl = new CountImpl();
//Erzeugen von _tie_Count und initialisieren mit CountImpl
Counter.Count count = new Counter._tie_Count(countImpl, "My Count");
boa.obj_is_ready(count);
boa.impl_is_ready();
}
catch(org.omg.CORBA.SystemException e) {
System.err.println(e);
}
}
}
Die Veränderungen an der CountImpl Klasse schließen folgendes ein:
class CountImpl implements Counter.CountOperations {
private int sum;
CountImpl() {
System.out.println("Count Object Created");
sum = 0;
}
public int sum() {
return sum;
}
public void sum(int val) {
sum = val;
}
public int increment() {
sum++;
return sum;
}
}
Die Quellen:
© Copyright 1998 André Möller, Oliver Mentz & Magnus Wiencke