![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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/1.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/2.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/3.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/4.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/5.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/6.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/7.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/8.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/9.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/10.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/11.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/12.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/13.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/14.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/15.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/16.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/17.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/18.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/20.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/21.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/22.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/23.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/24.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/25.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/26.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/27.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/28.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/29.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/30.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/31.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/32.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/33.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/34.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/35.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/36.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/37.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/38.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/39.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/40.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/41.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/42.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/43.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/44.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/45.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/46.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/47.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/48.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/49.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/50.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/51.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/52.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/53.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/54.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/55.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/56.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/57.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/58.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/59.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/60.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/61.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/62.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/63.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/64.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/65.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/66.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/67.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/68.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/69.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/70.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/71.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/72.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/73.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/74.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/75.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/76.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/77.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/78.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/79.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/80.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/81.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/82.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/83.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/84.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/85.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/86.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/87.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/88.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/89.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022040204/5ec9829eeb0b9e7be03682bb/html5/thumbnails/90.jpg)
Java Forum 2019 | Johannes Schneider | cedarsoft.com
Fragen / Anregungen / Ergänzungen?
Demo Code unter:
https://github.com/jschneider/rxjava2-examples