VSK HSLU
Verteilte Systeme und Komponenten HSLU
Verteilte Systeme und Komponenten HSLU
Fichier Détails
Cartes-fiches | 28 |
---|---|
Langue | Deutsch |
Catégorie | Informatique |
Niveau | Autres |
Crée / Actualisé | 22.01.2019 / 02.01.2024 |
Lien de web |
https://card2brain.ch/box/20190122_vsk
|
Intégrer |
<iframe src="https://card2brain.ch/box/20190122_vsk/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>
|
Créer ou copier des fichiers d'apprentissage
Avec un upgrade tu peux créer ou copier des fichiers d'apprentissage sans limite et utiliser de nombreuses fonctions supplémentaires.
Connecte-toi pour voir toutes les cartes.
Sie wissen, welche Aktionen nötig sind, um Daten verbindungsorientiert senden zu können.
-> Whois Abfrage Beispiel
- Aufbau: Socket client = new Socket(host, port);
- Schreib Objekt erstellen: final PrintWriter out = new PrintWriter(client.getOutputStream());
- Lese Objekt erstellen: final BufferedReader in = new. BufferedReader(new InputStreamReader(client.getInputStream());
- whois anfrage senden: out.println("hslu.ch");
- out.flush();
- 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.
- Server Socket erzeugen
- mit acceptMethode des Server Socket auf Verbindung warten
- Ein und Ausgabestrom mit erhaltenem Socket verknüpfen
- Daten Lesen / Schreiben
- Stream von Client socket schliessen
- Bei schritt 2 weitermachen oder ServerSocket schliessen
Erstellung eines nicht blockierenden TCP Server
- ServerSocket listen = new ServerSocket(666)
- ExecutorService executor = Executors.newFixedSizeThreadPool(5);
- Socket client = list.accept())
- EchoHandler handler = new EchoHandler(client);
- 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
- Was wird serialisiert?
- Was passiert mit transienten Attributen?
- Welche Methoden helfen zu serialisieren und zu deserialisieren?
- Metadaten, Klassenname und Versionsnummer in den Bytestrom schreiben
- alle nicht statischen, nicht transienten Attribute (private, protected, public) serialisieren
- Weitere Objekte, auf welche die Objekt Attribute verweisen.
- 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...
- Persistent: Nachricht wird solange gespeichert, bis Empfänger bereit ist -> E-Mail
- Transient: Nachricht wird nur so lange gespeichert, solange sendende und empfangende Applikation ausgeführt werden ->Restful API
- Asynchron:Sender kann unmittelbar nach dem versenden weiterfahren -> UDP
- 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:
- die zu klonende Klasse muss implements Cloneable machen
- Override von clone()
- beim Aufruf von Clone muss ein Casting gemacht werden
- throws CloneNotSupportedException
Sie kennen zwei verschiedene Algorithmen zur Synchronisation von physischen Uhren.
- Berkeley Algorithmus
Zeitserver fragt alle Maschinen nach ihrer Zeit und macht eine Durchschnittszeit - 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
- Ortstransparenz
Ort ist dem Benutzer nicht bekannt - Zugriffstransparenz
Immer gleicher Zugriff, egal ob Lokal oder aus dem Netz - Nebenläufigkeitstranzparenz
Mehrere Benutzer können auf den Dienst zugreifen. Applikation kümmert sich um den Rest.
2- Tier
- Client
- Database
3-Tier
- Client
- Application
- Database
Implementation von RMI
- Remote Interface mit marker Interface (extends remote) definieren!
- Remote Interface implementieren
- RMI Repository starten
- Remote Objekte erzeugen und registrieren
- 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?
- java.rmi.registry.LocateRegistry.createRegistry(RMIPORT)
- Registry reg = LocateRegistry.getRegistry(RMIPORT)
- reg.rebind(BIND_NAME, ObjectToExport)
Wie kann der Client auf das Remote Object zugreifen über die RMI
- Registry registry = LocateRegistry.getRegistry(rmiHost, rmiPort)
- remoteObject rmiServer = (remoteObject) registry.lookup(bindName);
- 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");
-
- 1 / 28
-