Java on Tracks
Modellbahnsteuerung mit JEE, MicroProfile
und self-contained Systems
Expertenkreis Java, 14.01.2021
Dirk Weil, GEDOPLAN GmbH
Dirk Weil
GEDOPLAN GmbH, Bielefeld
GEDOPLAN IT Consulting
Consulting, coaching, concepts, reviews, development
GEDOPLAN IT Training
Trainings in Berlin, Bielefeld, on-site
JEE since 1998
Speaker and author
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 2
gedoplan.de
Die Ausgangslage
Job
Dachboden
gedoplan.de
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 3
v5t11
Visual Train Control
VT 11.5
http://commons.wikimedia.org/wiki/
File:601_Verkehrsmuseum_Nuernberg_11092010_complete_train.JPG
gedoplan.de
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 4
Aufgaben von V5T11
Stellwerk
Führerstand
gedoplan.de
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 5
Technische Basis: Digitalsteuerung Selectrix
Keine getrennten Stromkreise
Fahrspannung mit aufgeprägtem Digitalsignal
Loks enthalten Decoder
Fahrstufe
Richtung
Fahrlicht
Zusatzfunktionen (Sound etc.)
Systeme meist multiprokollfähig
SX (Selectrix)
DCC (NMRA-Standard)
MM (Motorola/Märklin)
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 6
gedoplan.de
Technische Basis: Digitalsteuerung Selectrix
Gleise werden mit Besetztmeldern überwacht
Weichen und Signale werden mit Funktionsdecodern gesteuert
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 7
gedoplan.de
1 Byte 8 Gleise
1 Byte 8 W. / S.
Domäne
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 8
gedoplan.de
Gleis
Lok
Weiche
Signal
Lokdecoder
Funktionsdecoder
Besetztmelder
Fahrstraße
Gleisverbindung
Fahrstraßen-
verwaltung
Fahrzeug-
verwaltung
Statusverwaltung
Domäne
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 9
gedoplan.de
Lok
Gleis
Weiche
Signal
Lokdecoder
Funktionsdecoder
Besetztmelder Fahrstraße
Gleisverbindung
Gleis
Weiche
Signal
Lokdecoder
, Bounded Contexts
Microservices, Self-contained Systems
Microservice
Modularisierungsansatz
hohe innere Kohärenz
geringe äußere Kopplung
passt gut zu Bounded Context
"Micro" nicht weiter spezifiziert
SCS
Autonome (Teil-)Anwendung
Alleine lauffähig (Vorsicht bei synchroner Kommunikation!)
Eigene Datenhaltung
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 10
gedoplan.de
v5t11-SCSs
Teilanwendungen als SCSs
Quarkus
Jakarta EE + MicroProfile
Persistenz mit JPA, Hibernate, PostgreSQL
Synchrone Kommunikation via REST API und MP Rest Client
Asynchrone Kommunikation mit MP Reactive Messaging, MQTT
Web-UI mittels JSF (!)
(Altlast derzeit noch: Stellwerk hat Swing-UI)
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 11
gedoplan.de
Statusverwaltung v5t11-status
Anbindung Digitalzentrale mit serieller Schnittstelle / USB
 https://fazecast.github.io/jSerialComm/
REST-API
für Signale
etc.
Web-UI für
Administration
und Debugging
Demo!
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 12
gedoplan.de
@Path("signal")
@Dependent
public class SignalEndpoint {
@PUT
@Path("{bereich}/{name}")
@Consumes(MediaType.MEDIA_TYPE_WILDCARD)
public void putSignalStellung(@PathParam("bereich") String
Fahrstraßenverwaltung v5t11-fahrstrassen
MP Rest Client
zum Stellen von
Signalen etc.
MP Reactive Messaging für asynchrone Änderungsmeldungen
Demo!
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 13
gedoplan.de
@RegisterRestClient(configKey = "v5t11.status")
public interface StatusGateway {
@PUT
@Path("signal/{bereich}/{name}")
@Consumes(MediaType.TEXT_PLAIN)
void signalStellen(@PathParam("bereich") String bereic
@Incoming("gleis-in")
void gleisChanged(byte[] msg) {
String json = new String(msg);
@Inject @Channel("gleis-out")
Emitter<String> gleisEmitter;
public void publish(Gleis gleis) {
String json = …
this.gleisEmitter.send(json);
Fahrzeugverwaltung v5t11-fahrzeuge
MP Rest Client und MP Reactive Messaging analog
Web-UI zur Fahrzeugkonfiguration und Steuerung mit JSF
Demo!
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 14
gedoplan.de
Visualisierung v5t11-leitstand
Alte Swing-Anwendung mit Quarkus-Unterbau
MP Rest Client und MP Reactive Messaging wie zuvor
Demo!
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 15
gedoplan.de
Weitere Planung
Fahrzeug-Verfolgung
Welches Fahrzeug steht/fährt wo?
Vorsignalautomatik
Vorsignale folgen dem nächsten Hauptsignal im Fahrweg
Teilautomatisierung
Automatisches Abstellen im Schattenbahnhof
Ausblenden der Geräusche in unsichtbaren Abschnitten
Betrieb als Docker-Container in Kubernetes
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 16
gedoplan.de
Erfahrungen, Rückblick
Erste EE-Version war ein Monolith
Java EE 6, JBoss 7
Aufsplittung in SCSs
+ Überschaubare Einheiten
+ Entkopplung der Datenmodelle
+ zügiges (Re-) Deployment
- Teilredundante Daten
- Kommunikationsaufwand
Quarkus
+ schnelle Entwicklungszyklen
+ schnell wachsendes Ökosystem
MicroProfile
+ Simple und leistungsfähige Bausteine (Config, Rest Client, …)
+ Leichte Einbindung von Message Brokern (MQTT, AMQP, …)
- Reactive Messaging abstrahiert nicht weit genug (z. B. Nutzlast)
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 17
gedoplan.de
… und was ist mit dem "echten Leben"?
Steuerung eines
fahrerlosen
Transportsystems
(FTS)
gedoplan.de
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 18
More
github.com/dirkweil/v5t11
Projekt
www.gedoplan.de
Trainings in Berlin, Bielefeld, inhouse
www.gedoplan.de
Reviews, Coaching, …
Blog
 dirk.weil@gedoplan.de
@dirkweil
Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 19
gedoplan.de

Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems

  • 1.
    Java on Tracks Modellbahnsteuerungmit JEE, MicroProfile und self-contained Systems Expertenkreis Java, 14.01.2021 Dirk Weil, GEDOPLAN GmbH
  • 2.
    Dirk Weil GEDOPLAN GmbH,Bielefeld GEDOPLAN IT Consulting Consulting, coaching, concepts, reviews, development GEDOPLAN IT Training Trainings in Berlin, Bielefeld, on-site JEE since 1998 Speaker and author Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 2 gedoplan.de
  • 3.
    Die Ausgangslage Job Dachboden gedoplan.de Java onTracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 3
  • 4.
    v5t11 Visual Train Control VT11.5 http://commons.wikimedia.org/wiki/ File:601_Verkehrsmuseum_Nuernberg_11092010_complete_train.JPG gedoplan.de Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 4
  • 5.
    Aufgaben von V5T11 Stellwerk Führerstand gedoplan.de Javaon Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 5
  • 6.
    Technische Basis: DigitalsteuerungSelectrix Keine getrennten Stromkreise Fahrspannung mit aufgeprägtem Digitalsignal Loks enthalten Decoder Fahrstufe Richtung Fahrlicht Zusatzfunktionen (Sound etc.) Systeme meist multiprokollfähig SX (Selectrix) DCC (NMRA-Standard) MM (Motorola/Märklin) Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 6 gedoplan.de
  • 7.
    Technische Basis: DigitalsteuerungSelectrix Gleise werden mit Besetztmeldern überwacht Weichen und Signale werden mit Funktionsdecodern gesteuert Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 7 gedoplan.de 1 Byte 8 Gleise 1 Byte 8 W. / S.
  • 8.
    Domäne Java on Tracks- Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 8 gedoplan.de Gleis Lok Weiche Signal Lokdecoder Funktionsdecoder Besetztmelder Fahrstraße Gleisverbindung
  • 9.
    Fahrstraßen- verwaltung Fahrzeug- verwaltung Statusverwaltung Domäne Java on Tracks- Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 9 gedoplan.de Lok Gleis Weiche Signal Lokdecoder Funktionsdecoder Besetztmelder Fahrstraße Gleisverbindung Gleis Weiche Signal Lokdecoder , Bounded Contexts
  • 10.
    Microservices, Self-contained Systems Microservice Modularisierungsansatz hoheinnere Kohärenz geringe äußere Kopplung passt gut zu Bounded Context "Micro" nicht weiter spezifiziert SCS Autonome (Teil-)Anwendung Alleine lauffähig (Vorsicht bei synchroner Kommunikation!) Eigene Datenhaltung Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 10 gedoplan.de
  • 11.
    v5t11-SCSs Teilanwendungen als SCSs Quarkus JakartaEE + MicroProfile Persistenz mit JPA, Hibernate, PostgreSQL Synchrone Kommunikation via REST API und MP Rest Client Asynchrone Kommunikation mit MP Reactive Messaging, MQTT Web-UI mittels JSF (!) (Altlast derzeit noch: Stellwerk hat Swing-UI) Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 11 gedoplan.de
  • 12.
    Statusverwaltung v5t11-status Anbindung Digitalzentralemit serieller Schnittstelle / USB  https://fazecast.github.io/jSerialComm/ REST-API für Signale etc. Web-UI für Administration und Debugging Demo! Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 12 gedoplan.de @Path("signal") @Dependent public class SignalEndpoint { @PUT @Path("{bereich}/{name}") @Consumes(MediaType.MEDIA_TYPE_WILDCARD) public void putSignalStellung(@PathParam("bereich") String
  • 13.
    Fahrstraßenverwaltung v5t11-fahrstrassen MP RestClient zum Stellen von Signalen etc. MP Reactive Messaging für asynchrone Änderungsmeldungen Demo! Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 13 gedoplan.de @RegisterRestClient(configKey = "v5t11.status") public interface StatusGateway { @PUT @Path("signal/{bereich}/{name}") @Consumes(MediaType.TEXT_PLAIN) void signalStellen(@PathParam("bereich") String bereic @Incoming("gleis-in") void gleisChanged(byte[] msg) { String json = new String(msg); @Inject @Channel("gleis-out") Emitter<String> gleisEmitter; public void publish(Gleis gleis) { String json = … this.gleisEmitter.send(json);
  • 14.
    Fahrzeugverwaltung v5t11-fahrzeuge MP RestClient und MP Reactive Messaging analog Web-UI zur Fahrzeugkonfiguration und Steuerung mit JSF Demo! Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 14 gedoplan.de
  • 15.
    Visualisierung v5t11-leitstand Alte Swing-Anwendungmit Quarkus-Unterbau MP Rest Client und MP Reactive Messaging wie zuvor Demo! Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 15 gedoplan.de
  • 16.
    Weitere Planung Fahrzeug-Verfolgung Welches Fahrzeugsteht/fährt wo? Vorsignalautomatik Vorsignale folgen dem nächsten Hauptsignal im Fahrweg Teilautomatisierung Automatisches Abstellen im Schattenbahnhof Ausblenden der Geräusche in unsichtbaren Abschnitten Betrieb als Docker-Container in Kubernetes Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 16 gedoplan.de
  • 17.
    Erfahrungen, Rückblick Erste EE-Versionwar ein Monolith Java EE 6, JBoss 7 Aufsplittung in SCSs + Überschaubare Einheiten + Entkopplung der Datenmodelle + zügiges (Re-) Deployment - Teilredundante Daten - Kommunikationsaufwand Quarkus + schnelle Entwicklungszyklen + schnell wachsendes Ökosystem MicroProfile + Simple und leistungsfähige Bausteine (Config, Rest Client, …) + Leichte Einbindung von Message Brokern (MQTT, AMQP, …) - Reactive Messaging abstrahiert nicht weit genug (z. B. Nutzlast) Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 17 gedoplan.de
  • 18.
    … und wasist mit dem "echten Leben"? Steuerung eines fahrerlosen Transportsystems (FTS) gedoplan.de Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 18
  • 19.
    More github.com/dirkweil/v5t11 Projekt www.gedoplan.de Trainings in Berlin,Bielefeld, inhouse www.gedoplan.de Reviews, Coaching, … Blog  dirk.weil@gedoplan.de @dirkweil Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained Systems 19 gedoplan.de