Java Reference
In-Depth Information
werden somit keine Interprozesskommunikations-Mechanismen benötigt, sondern es
werden nur synchrone Methodenaufrufe verwendet. Die Verteilung der Klassen auf
mehrere Rechner und ein asynchrones Verhalten spielen beim Nachrichtenaustausch
in diesem Beispiel also keine Rolle.
Im vorliegenden Beispiel gibt es zwei Server: zum einen ein Objekt der Klasse
TemperaturDienst
und zum anderen ein Objekt der Klasse
WetterDienst
. Beide
Klassen enthalten jeweils eine Methode, die als Dienst zur Verfügung gestellt werden
soll: in der Klasse
TemperaturDienst
die Methode
erfrageTemperatur()
und in
der Klasse
WetterDienst
die Methode
erfrageWetter()
. Die Dienste müssen mit
einem Dienstnamen beim Broker registriert werden. Der Einfachheit halber wird als
Dienstname der jeweilige Methodenname gewählt.
Intern arbeitet der Broker mit zwei Objekten der Klasse
HashMap
:
x
In dem Objekt
serverMap
werden vom Broker die Dienste aller Server mit ihrem
Namen registriert. Da der Broker aber nicht mit den Servern direkt kommunizieren
kann, werden in dem Objekt
serverMap
die entsprechenden Server-side Proxys
unter dem Dienstnamen eingetragen. Bei einer Anfrage eines Clients sucht der
Broker in dieser Hashmap nach dem passenden Server-side Proxy und leitet die
Anfrage des Clients weiter.
x
In dem Objekt
clientMap
registriert der Broker die Client-side Proxys mit ihrem
Namen für die Dauer eines Aufrufs. Dies ist notwendig, damit der Broker eine Ant-
wortnachricht wieder an den richtigen Client-side Proxy zurückliefern kann. Als
Name eines Client-side Proxys wird in dem Objekt
clientMap
der Klassenname
des jeweiligen Client-side Proxys benutzt. Ein Client-side Proxy fügt den Namen
seiner Klasse in die Anfragenachricht ein. Aus dieser Nachricht kann dann sowohl
der Broker als auch später der Server-side Proxy den Namen des Client-side
Proxies und damit indirekt auch den Namen des Clients ermitteln.
Als Format für Nachrichten wird ein Byte-Array verwendet. In dem Byte-Array, das die
Nachricht mit der Anforderung eines Dienstaufrufs enthält, werden der Name des
Client-side Proxys, der Name des angeforderten Dienstes und die Parameter für den
Dienstaufruf mit einem Semikolon getrennt übergeben. In dem Byte-Array für die
Rückgabenachricht werden der Name des Client-side Proxys und der Rückgabewert
übertragen.
Zuerst werden die jeweiligen Schnittstellen für die Dienste definiert. Dazu dienen die
Interfaces
ITemperaturDienst
und
IWetterDienst
. Diese Interfaces werden
dann von den Servern aber auch von den jeweiligen Client-Side Proxys implementiert.
Es folgt zuerst das Interface
IWetterDienst
mit der Methode
erfrageWetter()
,
mit der das Wetter von heute oder morgen abgefragt werden kann:
// Datei: IWetterDienst.java
public interface IWetterDienst
{
public String erfrageWetter (Tag tag);
}
Search WWH ::
Custom Search