Java Reference
In-Depth Information
}
else if(params.length == 1 &&
params[0] == ComponentContext.class)
{
try
{
m.invoke(mainObject, context);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
}
}
Die Klasse ComponentManager besitzt zwei Attribute: Das erste ist eine HashMap, in der zu
jedem Komponentennamen das „Hauptobjekt“ der Einstiegsklasse (in der Manifest-Datei
unter Main angegeben), das vom Komponenten-Framework bei der Installation einer Kompo-
nente erzeugt wird, gespeichert wird. Das zweite Attribut ist die Registratur, mit der Kompo-
nenten erzeugte Objekte anmelden und anderen zur Verfügung stellen können. Dieses Attri-
but wird den Start- und Stop-Methoden mit ComponentContext-Parameter übergeben.
Die interessanteste Methode ist createComponent. Ihre Parameter sind der Name der neuen
Komponente, die HashMap, welche den Inhalt der Manifest-Datei repräsentiert (von der
Methode analyzeManifestFile der Klasse WorkSpace zurückgegeben), sowie der Classpath
für die neu zu erzeugende Komponente in Form eines URL-Feldes (von der Methode get-
ClassPath der Klasse WorkSpace zurückgeliefert). Beim Erzeugen des ClassLoader-Objekts,
das die Einstiegsklasse laden soll, ist entscheidend, ob die Manifest-Datei eine „Uses:“-Zeile
hat. Wenn nicht, wird einfach ein URLClassLoader-Objekt mit dem Classpath-Parameter
(drittes Argument der Methode createComponent) erzeugt. Wie im ersten Teil des Buches
beschrieben, wird dieses Objekt dann in den Baum der System-ClassLoader an einer Stan-
dardposition eingebaut. Andernfalls, falls eine „Uses:“-Zeile vorhanden ist, muss das neue
ClassLoader-Objekt an das ClassLoader-Objekt der benutzten Komponente angehängt wer-
den. Die benutzte Komponente muss in der Manifest-Datei in Form ihrer Installationsdatei
angegeben werden. Wie beschrieben ist dieser Name auch der intern verwendete Name der
Komponente. Über den Namen der benutzten Komponente fi ndet man das dafür erzeugte
„Hauptobjekt“ und damit die dazugehörige Klasse und den ClassLoader, der diese Klasse
geladen hat. Wenn man diesen ClassLoader fi nden konnte, wird er als der ClassLoader ver-
wendet, an den der neu erzeugte ClassLoader angehängt wird. Nachdem das ClassLoader-
Objekt erzeugt wurde, kann man die in der Manifest-Datei angegebene Einstiegsklasse
laden, ein Objekt dieser Klasse erzeugen (ein öff entlicher, parameterloser Konstruktor
muss dazu vorhanden sein) sowie alle passenden, mit @Start annotierten Methoden aufru-
fen. Schließlich wird dann noch das erzeugte Objekt der Einstiegsklasse mit dem Namen
der Komponente als Schlüssel in der HashMap gespeichert.
Nachdem wir gesehen haben, was eine „Uses:“-Zeile in einer Manifest-Datei bewirkt, bli-
cken wir nochmals auf unsere Beispielkomponenten aus Abschnitt 6.1 zurück. Ohne einen
„Uses:“-Eintrag in der CounterClient-Komponente sind die ClassLoader so angeordnet, wie
in Bild 6.4 gezeigt wird.
 
Search WWH ::




Custom Search