• Keine Ergebnisse gefunden

• Nachteil: Abhängigkeit vom Anwendungsszenario

N/A
N/A
Protected

Academic year: 2021

Aktie "• Nachteil: Abhängigkeit vom Anwendungsszenario"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

1

Benennung der Objekte

Grundsätzlich zwei Möglichkeiten:

• Nutzung der schon vorhandenen anwendungsspezifi- schen Namen (Banknummer, Kontonummer)

• Nachteil: Abhängigkeit vom Anwendungsszenario

• Vorteil: keine zusätzlichen Namen

• Einführung eines separaten Namensschemas ("Objekt1", "Objekt2", ...)

• Nachteil: zusätzliche Namen

• Vorteil:Unabhängigkeit vom Anwendungsszenario

2

Protokoll

• Request (Anfrage):

• Objektname

• Methodenname

• Parameter des Methodenaufrufes

• Response (Antwort):

• Exception-Flag

• Falls Exception: Name und Datenelemente der Exception

• Sonst: Ausgabeparameter und Ergebnis

3

Implementierung des Protokolls

• Automatisch mittels Serializable und Objekt[Input|Output]Stream:

public class Request implements Serializable { String object_name;

...

};

ObjectOutputStream ostr = ...;

Request req = ...

ostr.writeObjekt (req);

• Von Hand mittels Data[Input|OutputStream]:

DataOutputStream ostr = ...;

Request req = ...;

ostr.writeUTF (req.object_name);

• Alles als String (XML, eigenes Format)

4

ClientStubs 1

Basisklasse ClientStubBase verwaltet Socket:

public class ClientStubBase {

static Socket socket;

public static void setServerAddress (String rech, int port) { socket = new Socket (rech, port);

}

public DataOutputStream output_stream () {

return new DataOutputStream (socket.getOutputStream());

}

public DataOutputStream input_stream () {

return new DataInputStream (socket.getInputStream());

}

};

(2)

5

ClientStubs 2

Beispiel einer ClientStub-Methode:

public class KontoClientStub extends ClientStubBase implements Konto { String object_name;

public void abheben (long betrag) throws KontoException { DataInputStream istr = input_stream();

DataOutputStream ostr = output_stream();

ostr.writeUTF (object_name);

ostr.writeUTF ("abheben");

ostr.writeLong (betrag);

ostr.flush();

if (istr.readByte() != 0) {

String exception_name = istr.readUTF();

String error_msg = istr.readUTF();

throw new KontoException (error_message);

} } ...

6

ServerStubs 1

Abstrakte Basisklasse ServerStubBase deklariert dispatch():

abstract public class ServerStubBase {

abstract public void dispatch (String methode, DataInputStream istr,

DataOutputStream ostr);

}

7

ServerStubs 2

Beispiel eines ServerStubs:

public class KontoServerStub extends ServerStubBase { KontoImpl konto_impl;

void dispatch (String method, DataInputStream istr, DataOutputStream ostr)

{

if (method.equals ("abheben")) { long betrag = istr.readLong();

try {

konto_impl.abheben (betrag);

ostr.writeByte (0);

} catch (KontoException e) { ostr.writeByte (1);

ostr.writeUTF (e.getMessage());

}

} else if (method.equals (...)) { ...

8

Dispatcher 1

public class Dispatcher { Hashtable stubs;

void connect (String name, ServerStubBase stub) { stubs.put (name, stub);

}

void disconnect (String name) { stubs.remove (name);

}

void run () {

ServerSocket server = new ServerSocket (4444);

while (true) {

Socket socket = server.accept();

DataInputStream istr =

new DataInputStream (socket.getInputStream());

DataOutputStream ostr =

new DataOutputStream (ssocket.getOutputStream());

process (istr, ostr);

} }

(3)

9

void process (DataInputStream istr, DataOutputStream ostr) { while (true) {

try {

String object_name = istr.readUTF();

ServerStubBase stub =

(ServerStubBase)stubs.get (object_name);

String methode = istr.readUTF();

stub.dispatch (methode, istr, ostr);

} catch (EOFException e) { return;

} } } ...

10

Bemerkungen

• Dispatcher sollte vom Anwendungsszenario unabhän- gig sein

• Klare Trennung zwischen Anwendung und RPC- System

• Keine Sockets etc. in Client und Server

• ClientStubBase und ServerStubBase sollen gemein-

same Funktinalität aller möglichen Stubs implementie-

ren; obwohl es in der Aufgabe nur Konten gab

Referenzen

ÄHNLICHE DOKUMENTE

Die Basis hierfür liefern nicht nur zahlreiche Therapieerfahrungen, sondern auch eine umfangreiche Studienlage – unter anderem mit DYNEXAN MUNDGEL®.. Demnach wird Lidocain über

Durch die regelmäßige prophylaktische Entwurmung können sich die Wurmeier und Larven gar nicht erst zu ausgewachsenen Wür- mern entwickeln.. Erste Anzeichen Das Aus- maß

Die FSME- Viren werden zwar direkt beim Stich übertragen, je länger die Zecke je- doch am Körper verbleibt, desto mehr Viren können in die Blutbahn gelangen und umso höher ist das

Die fortschreitende Liberalisierung hat hier sowohl für Energieunternehmen (ehern. als Versorger bezeichnet) als auch für Energiekunden (ehern. als Abneh- mer bezeichnet) zu

Wohl sind die meisten Regelungen, die hier zu finden sind, für Einrichtungen bestimmt, „in denen überwiegend Säuglinge, Kin- der oder Jugendliche betreut wer- den” (Abb. 1);

Prozubi ist Deine neue Online-Lernplattform, mit der Du online für die Prüfung bei der Industrie- und Handelskammer (IHK) lernen kannst. Du willst Dich auf

• Nutzerinnen und Nutzer von Einlagenplattformen verteilen ihr Geld noch stärker über mehrere Produkte.. • Sie bilden zudem über Zeit nach Produkten, Banken und

Weise nach, dass es sich bei ϕ tatsächlich um die Dichtefunktion einer stetigen Zufallsvariable X mit Ω =[0;1] handelt, berechne sowohl die durchschnittliche Arbeitszeit µ