90
Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Rx-Java 2

von 0 auf 100 in 45 min

Page 2: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Das Ziel:“Ist doch eigentlich ganz einfach”

“Dafür hätte ich nicht so lange da bleiben müssen”

Page 3: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Jetzt geht es wirklich los!

Warum Reactive Programming?

Page 4: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Szenario 1Verbindungsaufbau

Steuerung

Page 5: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

GET 1(-3): Port-Guessing (80?, 443?, 8080?)

Page 6: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

GET 4: PLC-Infos abrufen

Page 7: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

GET 5: Berechtigungs-Infos

Page 8: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

GET 6: Daten-Modell

Page 9: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

GET 7: Visu-Modell

Page 10: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

GET 8: Customizations

Page 11: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

GET 9: Initiale Daten

Page 12: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

9(+) Requests à 30 ms → kein Problem

Page 13: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Aber: VPN + Mobilfunk → ...

Page 14: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Was tun? Klar: Parallelisieren

Page 15: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

→ Observer-Pattern / Callbacks (???)

Page 16: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Aber: Calls bauen (teilweise) aufeinander auf

Page 17: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Welcome to Callbacks-Hell

Page 18: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Szenario 2UI-Anbindung

(Android, Swing, JavaFX)

Page 19: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Aktionen im Hintergrund

Page 20: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Aber: Progress anzeigen

Page 21: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Aber: Abbrechen durch Benutzer

Page 22: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Update der UI nur im UI-Thread

Page 23: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Aber: Nicht zu viele Updates der UI!

Page 24: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Observer-Pattern (???)

Eigentlich richtig - in der Praxis zu kompliziert

Page 25: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Vorlesung “Design Patterns”

Page 26: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Typisches Pattern: 90% Pattern - 10% Probleme / Grenzen

Page 27: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Observer-Pattern10% Pattern - 90% Probleme / Grenzen

Page 28: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Niemand implementiert das “richtig”

Page 29: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Was dem Observer-Pattern fehlt...

… löst Reactive Programing

Page 30: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Schritt 1

aus Sicht des Observers

Page 31: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Page 32: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Grundsätzlicher Ansatz Reactive:

return Observable

Wenn du nicht mehr weiter weißt, füge einen Layer ein...

Page 33: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Grundprinzip

public Observable<String> fetchBestMovies(){...}

Page 34: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Noch ist nix passiert

public Observable<String> fetchBestMovies(){...}

Observable<String> myObservable = fetchBestMovies();

Noch ist nix passiert! Methode läuft noch nicht.

Page 35: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Jetzt geht es los!

public Observable<String> fetchBestMovies(){...}

Observable<String> myObservable = fetchBestMovies();

//...

myObservable.subscribe([...]);

Hier geht es (erst) los!

Page 36: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Callback

myObservable.subscribe(new Observer<String>(){

[...]

});Das eigentliche Callback.

Page 37: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Jetzt geht es los

myObservable.subscribe(new Observer<String>(){

public void onSubscribe(Disposable d) { }

public void onNext(String s) {}

public void onError(Throwable e) {}

public void onComplete() {}

});

Ganz am Anfang 1x aufgerufen

Page 38: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

“Normale” Listener-Methode

myObservable.subscribe(new Observer<String>(){

public void onSubscribe(Disposable d) { }

public void onNext(String s) {}

public void onError(Throwable e) {}

public void onComplete() {}

});

Call für jedes Element

Page 39: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Fehlerbehandlung

myObservable.subscribe(new Observer<String>(){

public void onSubscribe(Disposable d) { }

public void onNext(String s) {}

public void onError(Throwable e) {}

public void onComplete() {}

});

Falls ein Fehler auftritt

Page 40: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Habe fertich

myObservable.subscribe(new Observer<String>(){

public void onSubscribe(Disposable d) { }

public void onNext(String s) {}

public void onError(Throwable e) {}

public void onComplete() {}

});

Damit wird gemeldet, dass keine Elemente mehr kommen

Page 41: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Abbruch durch Consumer (z.B. UI-Interaktion)

myObservable.subscribe(new Observer<String>(){ @Override public void onSubscribe(Disposable d) {

//Remember that disposable }[...]});

disposable.dispose();

Observer kann (irgendwann) abbrechen!

Page 42: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Page 43: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Callback auf welchem Thread?

Observer entscheidet!

Page 44: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Callback auf welchem Thread?

public Observable<String> fetchBestMovies(){...}

Observable<String> myObservable = fetchBestMovies();

myObservable.observeOn(SwingScheduler.INSTANCE).subscribe();

Wir “observieren” auf dem Swing Thread

Page 45: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Callback auf welchem Thread?

public Observable<String> getFunnyNames(){...}

Observable<String> myObservable = getFunnyNames();

myObservable.observeOn(Schedulers.IO).subscribe();

Wir “observieren” auf einem (großen) Thread-Pool

Page 46: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Callback auf welchem Thread?

public Observable<String> getFunnyNames(){...}

Observable<String> myObservable = getFunnyNames();

myObservable.observeOn(Schedulers.COMPUTE).subscribe();

Wir “observieren” auf einem Thread-Pool mitGröße == Anzahl Kerne

Page 47: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Callback auf welchem Thread?

public Observable<String> fetchBestMovies(){...}

Observable<String> myObservable = fetchBestMovies();

myObservable.observeOn(Schedulers.COMPUTE).subscribe();

Jeder Call wrappt das ursprüngliche Observable!

Page 48: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Page 49: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Page 50: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Demo 1

Hello World - aus Observer-Sicht

Page 51: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Wiederholung Basics

Wie war das noch?

Page 52: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Observable zurück geben

return Observable

Anstatt wie klassisch ein Callback zu übergeben

Page 53: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Erst bei subscribe()Geht die Reise los

Dadurch mehr Kontrolle / Konfigurationsmöglichkeit beim Aufrufer

Page 54: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Alles da was wir brauchen

Übliche Methoden sind vorhanden

onNext(T)

onError(Throwable)

onComplete()

Page 55: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Threading ist gelöst

(auch eigene Schedulers möglich)

observeOn(Scheduler)

Page 56: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Observer kann abbrechen

Disposable

Z.B. beim Verlassen einer Seite...

Falls ein anderer Server schneller antwortet...

Page 57: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Schritt 2

aus Sicht des “Observable”

Page 58: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Page 59: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Grundsätzlicher Ansatz Reactive:

return Observable

Wenn du nicht mehr weiter weißt, füge einen Layer ein...

Page 60: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Aus Sicht des Observierten

public Observable<String> fetchBestMovies(){

[...]

//Hier passiert noch nichts teures/langes

return observable;

}Schnell zurückkehren! Keine Arbeit direkt machen!

Page 61: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Erst bei subscribe() geht es los

Page 62: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Vorsicht!Oder: Was (fast) alle Tutorials falsch machen!

Page 63: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Macht das Sinn??? Deshalb Rective???

public Observable<String> fetchBestMovies(){

return Observable.fromArray(“a”, “b”, “c”);

}

Schnell zurückkehren??? Keine Arbeit direkt machen???

Brauche ich dafür eine fette Bibliothek???

Page 64: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Das ist ein (sinnfreies) Beispielum ein Observable zu bekommen

Page 65: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Besseres Minimal-Beispiel

Page 66: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

→ Eigentlich lohnt es sich jetzt schon

Aber das Beste kommt ja noch

Page 67: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Reactive Operatoren

Page 68: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

(zu) hohe Frequenz?

Throtteling ist schon da

Page 69: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Bitte etwas langsamer!

fetchBestMovies().throttleLatest(500L, TimeUnit.MILLISECONDS, true).observeOn(SwingScheduler.INSTANCE) //Maybe a ui thread?

.subscribe(new Observer<String>() {

Liefert den letzten/jüngsten Wert alle 500 ms

Page 70: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Demo 3

Operatoren, Operatoren, Operatoren

Page 71: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Operatoren sind schwer zu verstehendeshalb:

https://rxmarbles.com/

Page 72: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Typen von “Observables”Observable / Flowable

Maybe / Single / Completable

Page 73: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Page 74: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Szenario 3Pagination für eine Suche

Endless Loading

Page 75: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Eine Query mit vieeeeeeeeeeelen Results

Page 76: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

UI entscheidet, wann die nächste Seite kommt

Page 77: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Demo Flowable

Page 78: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Alles perfekt?

Naja...

Page 79: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Performance(!?)

Kein Ersatz für For-Schleifen!

Page 80: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Debugging

Laaaange StackTraces

wie früher bei Hibernate ;-)

Page 81: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Komplexität, Komplexität

“Aus vielen Operatoren folgt große Verantwortung”

Page 82: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Best Practices

Was “unbedingt” zu empfehlen ist

Page 83: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

observeOn() wird häufig benötigt

Page 84: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

… subscribeOn() sehr selten

Page 85: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

doOn…()-Methoden sind sehr hilfreich

Page 86: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Operatoren: Möglichst mit Einzeilern(vergleiche Streaming API)

Page 87: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Abstrakte Basis-Klassen für Observer erstellen

Page 88: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Es gibt für alles bereits einen Operator ;-)

Page 89: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Demos / Tests erstellen

Page 90: Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 · Java Forum 2019 | Johannes Schneider | cedarsoft.com Rx-Java 2 von 0 auf 100 in 45 min

Java Forum 2019 | Johannes Schneider | cedarsoft.com

Fragen / Anregungen / Ergänzungen?

Demo Code unter:

https://github.com/jschneider/rxjava2-examples