VSK HSLU

Verteilte Systeme und Komponenten HSLU

Verteilte Systeme und Komponenten HSLU


Set of flashcards Details

Flashcards 28
Language Deutsch
Category Computer Science
Level Other
Created / Updated 22.01.2019 / 02.01.2024
Weblink
https://card2brain.ch/box/20190122_vsk
Embed
<iframe src="https://card2brain.ch/box/20190122_vsk/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

Sie wissen, welche Aktionen nötig sind, um Daten verbindungsorientiert senden zu können. 

-> Whois Abfrage Beispiel

  1. Aufbau: Socket client = new Socket(host, port);
  2. Schreib Objekt erstellen: final PrintWriter out = new PrintWriter(client.getOutputStream());
  3. Lese Objekt erstellen: final BufferedReader in = new. BufferedReader(new InputStreamReader(client.getInputStream());
  4. whois anfrage senden: out.println("hslu.ch");
  5. out.flush();
  6. while ((line = in.readLine()) != null){
        System.out.println(line)
    }

 

 

Sie kennen den Lebenszyklus eines TCP Servers und können die einzelnen Elemente mit einem Java Programm in Beziehung stellen.

  1. Server Socket erzeugen
  2. mit acceptMethode des Server Socket auf Verbindung warten
  3. Ein und Ausgabestrom mit erhaltenem Socket verknüpfen
  4. Daten Lesen / Schreiben
  5. Stream von Client socket schliessen
  6. Bei schritt 2 weitermachen oder ServerSocket schliessen

Erstellung eines nicht blockierenden TCP Server

  1. ServerSocket listen = new ServerSocket(666)
  2. ExecutorService executor = Executors.newFixedSizeThreadPool(5);
  3. Socket client = list.accept())
  4. EchoHandler handler = new EchoHandler(client);
  5. executor.execute(handler);

 

Der EchoHandler implements Runnable

 

@Override

publid void run(){

.....

}

Erstellung eine blockierenden TCP Servers welcher die Zeit zurücksendet (also nichts liest)

 

ServerSocket server = new ServerSocket(666);

while (true){

try (Socket client = server.accept()){

     final DataOutputStream dout = new DataOutputStream(client.getOutputStream()) ;

     dout.write((date.toString()).getBytes()); //hier wird einfach noch was geschriben...

     }catch...{

.....

}

}

Sie wissen was ein Netzwerk Interface ist und wie dieses in Java repräsentiert wird.

Die Klasse NetworkInterface ist dafür gedacht

  • NetworkInterface interfaces = NetworkInterface.getNetworkInterfaces();

InetAdress für die IPS

Auf den zurückgegebenen interaces kann man dann iterieren und die IPs auslesen

Enumeration<InetAdress> inetAdresses = interfaces.getInetAdresses(); //alle Adressen zu einem Interface

 

 

Wie lässt sich die Localhost IP auselsen?

InetAdress addr = InetAdress.getByName("localhost");

Wie lässt sich die Localhost IP auselsen?

InetAdress addr = InetAdress.getByName("localhost");

Was bedeutet Objekt Persistenz

Ein Mechanismus, der den Objektzustand zu einer bestimmten Zeit sichert (persistiert).

Was bedeutet "Transiente Objekte"?

Die Daten des Objekts gehen nach dem Programmende Verloren

Welches sind die Anforderungen an die Objektpersistenz?

  • Transparenz
    Die Programmierung mit transienten und perssistenten Objekten ist genau gleich. Keine Sonderbehandlung für Persistente Objekte
  • Interoperabilität
    Die Persistenten Objekte können in jeder Umgebung benutzt werden, und nicht nur dort, wo sie entwickelt wurden
  • Skalierbare Wiererauffindbarkeit
    Das Auffinden von Persistenten Objekten erfolgt transparent, ohne spezifisches Durchsuchen von Objektpools

Sie kennen den Standardmechanismus zur Serialisierung von Java-Objekten

  1. Was wird serialisiert?
  2. Was passiert mit transienten Attributen?
  3. Welche Methoden helfen zu serialisieren und zu deserialisieren?

 

  1. Metadaten, Klassenname und Versionsnummer in den Bytestrom schreiben
  2. alle nicht statischen, nicht transienten Attribute (private, protected, public) serialisieren
  3. Weitere Objekte, auf welche die Objekt Attribute verweisen. 
  4. geerbte Attribute

 

Attribute welche mit transient gekenntzeichnet werden, werden nicht gespeichert und sollten dann mit Methoden wieder zusammengebaut werden -> writeObject(); readObject(); readResolve() können.

Serialisierung: ObjectOutputStream(writeObject())

Deserialisierung: ObjectInputStream(readObject())

Wie kann eine Klasse Serialisiert werden?

 

  • implements Serializable (reines markerinterface)
  • FileOutputStream outF = new FileOutputStream("dateiname");
  • ObjectOutputStream outS = new ObjectOutputStream(outF);
  • outS.writeObject("bla");
  • outS.flush();

Wie kann etwas deserialisiert werden?

  • FileInputStream inpF = new FileInputStream("datei");
  • ObjectInputStream inpO = new ObjectInputStream(inpF);
  • String test = (String) inpO.readObject();
  • System.out.println(test);

Spezialitäten der Serialisierung (Vererbung, Exception?)

 

  • Alle Unterklassen von Oberklassen welche serialisierbar sind, sind automatisch auch serialisierbar.
  • Ist eine Oberklasse nicht Serialisierbar dann werden die Privaten Felder nicht derer nicht serialisiert.
  • In der Oberklasse muss ein Konstruktor ohne Argumente existieren!
  • readObject() und writeObject() müssen entsprechend implementiert sein, damit der Zustand der Oberklasse beim Deserialisieren wiederhergestellt wird.
  • public static long serialVersionUID = 47248747248742; 
  • Wenn eine Klasse nicht serialisierbar sein soll:
    • readObject und writeObject mit dem Inhalt throw new NotSerializableException()

Welche 4 Kommunikationsarten gibt es? Mit Beispielen...

  1. Persistent: Nachricht wird solange gespeichert, bis Empfänger bereit ist -> E-Mail
  2. Transient: Nachricht wird nur so lange gespeichert, solange sendende und empfangende Applikation ausgeführt werden ->Restful API
  3. Asynchron:Sender kann unmittelbar nach dem versenden weiterfahren -> UDP
  4. Synchrone: Der Sender Blockiert, bis die Nachricht verarbeitet wurde -> TCP 

Was ist ein Prototyp und wie implementiert man diesen

Prototypen werden bei kostenspieligen Objekten gebraucht. Beispiel DB Verbindung mit auselen von vielen Einträgen.

 

Schritte dazu:

  1. die zu klonende Klasse muss implements Cloneable machen
  2. Override von clone()
  3. beim Aufruf von Clone muss ein Casting gemacht werden
  4. throws CloneNotSupportedException

Sie kennen zwei verschiedene Algorithmen zur Synchronisation von physischen Uhren.

  1. Berkeley Algorithmus
    Zeitserver fragt alle Maschinen nach ihrer Zeit und macht eine Durchschnittszeit
  2. Algorithmus von Cristian
    Passives System. Ein Zeitserver wird für die Zeit angefragt. Dieser Antwortet und der Client berechnet die Zeit (t1) + RTT/2) gesetzt RTT = Rount Trip Time

Weil die Zeit nicht zurückgestellt werden kann, wird diese einfach so lange verlangsamt, bis sie stimmt.

Was kennzeichnet eine logische Uhr

Alle Systeme einigen sich über eine Zeit

Kein UTC

Welcher Middleware Form entspricht RMI

Kommunikationsorientiert Middleware

Nenne drei wichte Transparenzformen

  1. Ortstransparenz
    Ort ist dem Benutzer nicht bekannt
  2. Zugriffstransparenz
    Immer gleicher Zugriff, egal ob Lokal oder aus dem Netz
  3. Nebenläufigkeitstranzparenz
    Mehrere Benutzer können auf den Dienst zugreifen. Applikation kümmert sich um den Rest.

2- Tier

  1. Client
  2. Database

3-Tier

  1. Client
  2. Application
  3. Database

Implementation von RMI

  1. Remote Interface mit marker Interface (extends remote) definieren!
  2. Remote Interface implementieren 
  3. RMI Repository starten
  4. Remote Objekte erzeugen und registrieren
  5. Client implementieren

Voraussetzungen für RMI

  • Jede zur Verfügung gestellte Methode kann die RemoteException auslösen
  • Parameter/Rückgabewert eines Klassentypes
    • Muss Serializable sein
  • Parameter/Rückgabewert eines Interfacetypes muss ebenfalls das Interface Remote implementieren.

 

Das Remote Objekt muss von welcher klasse Ableiten und welches interface implementieren?

  • extends UnicastRemoteObject implements IremoteObject

Wie muss die RMI Registry gestartet werden?

  1. java.rmi.registry.LocateRegistry.createRegistry(RMIPORT)
  2. Registry reg = LocateRegistry.getRegistry(RMIPORT)
  3. reg.rebind(BIND_NAME, ObjectToExport)

Wie kann der Client auf das Remote Object zugreifen über die RMI

  1. Registry registry = LocateRegistry.getRegistry(rmiHost, rmiPort)
  2. remoteObject rmiServer = (remoteObject) registry.lookup(bindName);
  3. rmiServer.subscribeToServer((remoteObject) rmiclient)

Security Manager Policy definieren

file rules.policy mit folgendem Inhalt anlegen

grant {
   permission java.security.AllPermission; 

}; 

 

dann im Code

  • System.setProperty("java.security.policy", "rules.policy");