Java Reference
In-Depth Information
Wenn jetzt die CounterClient-Komponente auf die Klasse Counter zugreifen möchte, wird
der ClassLoader dieser Komponente den Au rag an seinen Vorgänger weiterleiten. Dies ist
nun aber der ClassLoader der CounterService-Komponente, der die Counter-Klasse entwe-
der schon geladen hat oder ansonsten laden kann. Der Zugriff auf die Counter-Klasse gelingt
also. Es spielt somit auch keine Rolle, ob die CounterClient-Komponente eine eigene Version
der Counter-Klasse mitbringt oder nicht. Da zuerst der Vorgänger-ClassLoader befragt wird,
wird in jedem Fall die Version der Counter-Klasse, die in der CounterService-Komponente
enthalten ist, von der CounterClient-Komponente verwendet.
Ein weiterer in Abschnitt 6.1.3 erwähnter Eff ekt wird damit auch verständlich: Auch wenn
die CounterService-Komponente mit einer neuen Version der Klasse Counter aktualisiert
wird, verwendet die CounterClient-Komponente weiterhin die alte Counter-Version. Wenn
man sich den Baum der Klassenlader-Objekte ansieht (s. Bild 6.6), leuchtet dies unmittelbar
ein.
Baum der
System-ClassLoader
ClassLoader
der alten Hello-
Service-Komponente
ClassLoader
der neuen Hello-
Service-Komponente
ClassLoader
der HelloClient-
Komponente
Bild 6.6 Anordnung der ClassLoader-Ob-
jekte nach einer Neuinstallation
der CounterService-Komponente
Die weiteren Methoden der Klasse ComponentManager sind einfacher verständlich. In
removeComponent werden alle passenden, mit @Stop annotierten Methoden aufgerufen
und der Eintrag für die Komponente wird aus der HashMap gelöscht. Durch removeAll-
Components wird removeComponent für jede vorhandene Komponente aufgerufen. Diese
Methode wird aufgerufen, wenn das Framework angehalten wird. Die private Methode
callAnnotatedMethods wird von createComponent und removeComponent verwendet, um
alle passenden, mit @Start bzw. @Stop gekennzeichneten Methoden aufzurufen. Passende
Methoden sind solche, deren Rückgabetyp void ist und die parameterlos sind oder einen
einzigen Parameter des Typs ComponentContext haben. Letztere werden mit einer Refe-
renz auf das zweite Attribut dieser Klasse aufgerufen, welches die Schnittstelle Compo-
nentContext implementiert.
 
Search WWH ::




Custom Search