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