Java Reference
In-Depth Information
Wir haben also gesehen, dass eine Komponente Klassen und Objekte oder nur Klassen
einer anderen Komponente nutzen kann. Der Fall, in dem nur Objekte genutzt werden, die
nutzende Komponente aber die Klassen der genutzten Komponente selbst mitbringt, ist
nicht möglich. Nehmen wir an, dass wir in der Manifest-Datei der zweiten Komponente die
Zeile
Import-Package: org.osgi.framework, javacomp.osgi.bundle1
zu
Import-Package: org.osgi.framework
v e r ä ndern und in die Jar- bzw. Zip-Datei der zweiten Komponente auch die Class-Dateien
von Counter und CounterImpl aufnehmen. Der Eff ekt ist, dass der Aufruf
context.getServiceReference(Counter.class);
in Listing 9.5 null zurückliefert, denn wie auch in der prototypischen Implementierung
eines Komponenten-Frameworks in Kapitel 6 wird jede Komponente von einem eigenen
Klassenlader geladen. Folglich ist die Schnittstelle javacomp.osgi.bundle1.Counter, die mit
dem Klassenlader der ersten Komponente geladen wurde und beim Anmelden im Metho-
denaufruf von registerService verwendet wurde, verschieden von der Schnittstelle dessel-
ben Namens, die mit dem Klassenlader der zweiten Komponente geladen wurde und als
Suchschlüssel in getServiceReference verwendet wird. Dieser Unterschied erklärt, warum
die Suche erfolglos ist und null zurückkommt.
95 Hot Deployment
Unsere beiden Beispiel-Bundles arbeiten gut zusammen, falls die Service-Komponente vor
der Client-Komponente installiert und gestartet wird. Man kann sich aber ein wesentlich
fl exibleres Zusammenwirken der Komponenten vorstellen:
! Es sollte möglich sein, dass auch die Client-Komponente vor der Service-Komponente
installiert werden kann. Die Client-Komponente soll erkennen können, wann die Service-
Komponente verfügbar wird und sie dann nutzen.
! Symmetrisch dazu soll die Client-Komponente auch erkennen, dass die Service-Kompo-
nente nicht mehr verfügbar ist und sie dann (freiwillig) nicht mehr nutzen. Am Ende von
Abschnitt 9.3 wurde erwähnt, dass selbst bei einer Deinstallation der Service-Kompo-
nente der Thread der Client-Komponente unverä ndert weiterläu . Das soll jetzt anders
werden.
! Schließlich soll auch Hot Deployment möglich sein. Dazu gehört, dass eine neue Version
der Service-Komponente installiert wird und der Client diese verä nderte Komponente
unmittelbar nutzen kann.
Um die fl exiblere Zusammenarbeit zwischen den beiden Komponenten zu realisieren, sind
Änderungen sowohl auf der Klassen- als auch auf der Objektebene nötig:
 
Search WWH ::




Custom Search