Java Reference
In-Depth Information
und Stop-Methoden, die vom Framework in den einzelnen Komponenten aufgerufen werden.
Die Pfeile von oben nach unten stellen die Nutzung des Frameworks durch die Komponen-
ten über die Schnittstelle ComponentContext (bind, unbind, lookup) dar. Die horizontalen
Pfeile schließlich zeigen die Nutzung einer Komponente durch eine andere (im konkreten
Fall geht es um die Anwendung der Methode increment auf die Counter-Objekte der zweiten
Komponente durch die dritte Komponente).
In unserem einfachen Framework kann eine Komponente nur höchstens eine Komponente
n u t z e n . I n d e r „ U s e s : “-Zeile können also nicht mehrere Komponenten angegeben werden,
die benutzt werden sollen, sondern nur genau eine. Werden mehrere „Uses:“-Zeilen in der
Manifest-Datei angegeben, wird nur die letzte davon berücksichtigt (dasselbe gilt, falls meh-
r e r e „ M a i n : “-Zeilen vorkommen). Umgekehrt ist es aber möglich, dass eine Komponente von
mehreren Komponenten benutzt wird. Wir könnten also problemlos eine weitere Kompo-
nente Nr. 4 entwickeln, die ebenfalls die von der zweiten Komponente bereitgestellten
Objekte verwendet. Dies ist in Bild 6.1 bereits angedeutet: Die Komponenten Nr. 3 und 4
benutzen beide die Komponente Nr. 2.
Damit es bei der parallelen Nutzung der Counter-Objekte durch mehrere Threads (wie in
der dritten Komponente) zu keinen Synchronisationsproblemen kommt, wurde die Methode
increment in Listing 6.3 bereits vorsorglich mit synchronized gekennzeichnet.
6 .1 . 5 Variation der Komponentenbeispiele
Bei den vorgestellten Beispielkomponenten bedeutete die Nutzung einer Komponente durch
eine andere, dass eine Komponente (in unserem Fall die CounterService-Komponente)
Objekte einer Klasse (Counter), die zu dieser Komponente gehörte, erzeugte und dass eine
andere Komponente (in unserem Fall die CounterClient-Komponente) diese Objekte und
damit auch die dazugehörige Klasse nutzte. Um Missverständnissen vorzubeugen sei an
dieser Stelle erwähnt, dass die Nutzung einer Komponente durch eine andere Komponente
in dieser Form zwar nicht untypisch ist, dass es aber nicht in jedem Fall so sein muss. Es ist
durchaus auch möglich, dass eine Komponente nur Klassen, aber nicht unbedingt auch
Objekte dieser Klassen für andere Komponenten zur Verfügung stellt. Als Beispiel verein-
fachen wir unsere zweite und dritte Komponente entsprechend.
Die zweite Komponente besteht jetzt aus der Klasse Counter (s. Listing 6.3) wie bisher und
einer leeren Klasse CounterService (s. Listing 6.6).
Listing 6.6 Klasse CounterService (stark vereinfacht)
package javacomp.prototype.application5;
public class CounterService
{
}
Die nutzende CounterClient-Komponente bescha sich jetzt keine von der CounterService-
Komponente bereitgestellten Objekte, sondern verwendet nur die Klasse Counter, wobei sie
die benötigten Objekte dieser Klasse selbst erzeugt. Da der ComponentContext nicht benutzt
wird, genügt deshalb eine parameterlose Start-Methode. Wie in Listing 6.5 könnte die Nut-
 
Search WWH ::




Custom Search