Clone
2
Romexis Client.de
Patrick Gniza edited this page 2026-08-22 15:46:50 +02:00

Deutsch | English

Romexis Client

Der Dienst romexis-client stellt den Linux-Romexis-Client browserbasiert über dasselbe X11-/noVNC-Runtime-Konzept bereit, das auch der Admin-Container verwendet.

Er wird unabhängig von romexis-admin gebaut: Beide Images verwenden die gemeinsame romexis-gui-runtime, während die Client-Anwendungsdateien aus dem dedizierten Image romexis-client-payload stammen.


Image-Abhängigkeiten

romexis-client-payload:<version>
            |
            v
romexis-gui-runtime:1-<arch>
            |
            v
romexis-client:<version>-<arch>

Die Trennung verhindert, dass reine Admin-Änderungen einen Client-Rebuild erzwingen, und hält die große Installer-Extraktion von den architekturspezifischen GUI-Abhängigkeiten getrennt.


Runtime-Komponenten

Die gemeinsame GUI-Runtime stellt bereit:

Java 17
OpenJFX
Xvfb
Openbox
x11vnc
noVNC / websockify
GTK / Mesa / OpenGL dependencies
Chilkat
DxService compatibility library

Das finale Client-Image ergänzt das versionsspezifische Romexis-Client-Payload sowie die Client-Start- und Testskripte.


Zugriff

Der Client wird über noVNC bereitgestellt. Der konkrete Host-Port wird über die Compose-Konfiguration gesteuert.

Für Logs:

docker compose logs -f romexis-client

Shell zur Fehleranalyse öffnen:

docker compose run --rm --entrypoint /bin/bash romexis-client

Build und Tags

Veröffentlichte Versions-Tags folgen demselben Schema wie Server und Admin:

romexis-client:<version>-amd64
romexis-client:<version>-arm64
romexis-client:<version>
romexis-client:latest

Zuerst werden die Architektur-Tags erstellt. Die öffentlichen Multi-Architektur-Tags werden erst veröffentlicht, wenn beide Architekturen erfolgreich abgeschlossen wurden.


Laufzeitverhalten

Der Container startet Xvfb, Openbox, idesk, x11vnc und noVNC. Romexis selbst startet nicht automatisch. Öffne den noVNC-Desktop und doppelklicke auf das Symbol Romexis Client. Dadurch belegt eine ungenutzte Client-Sitzung keinen großen Java-Heap, und der Anwendungsstart bleibt für den Bediener sichtbar.

Der Launcher verhindert über eine Sperrdatei doppelte Romexis-Prozesse und schreibt das Client-Protokoll nach:

/tmp/romexis-client.log

Das optionale Debug-Terminal wird über CLIENT_DEBUG_XTERM gesteuert.


Browser- und Runtime-Konfiguration

Die Standardadresse im Browser lautet:

http://localhost:6081/vnc.html?autoconnect=true
Variable Standard Zweck
CLIENT_NOVNC_PORT 6081 Veröffentlichter noVNC-Hostport
CLIENT_VNC_PASSWORD promax Passwort des internen VNC-Servers
CLIENT_RESOLUTION 1280x900x24 Auflösung des virtuellen Desktops
CLIENT_JAVA_OPTS -Xss500k -Xmx16G JVM-Optionen des Clients
CLIENT_LANGUAGE de Romexis-Sprache
CLIENT_COUNTRY DE Land der Java-Locale
CLIENT_DEBUG_XTERM false Aktiviert ein zusätzliches Debug-Terminal
ROMEXIS_AGENT_OPTIONPANE_PATCH true Aktiviert die Java-17-Swing-Lifecycle-Korrektur

Compose veröffentlicht nur noVNC. x11vnc lauscht innerhalb des Containers auf Port 5900, wird standardmäßig aber nicht als Hostport veröffentlicht.


RMI-Auflösung und Identität

Der Client verwendet den öffentlichen SERVER_RMI_HOSTNAME als Server- und Zertifikatsidentität. Beim Containerstart wird dieser Hostname auf die interne Adresse des Compose-Dienstes romexis abgebildet. Der Client-Launcher verbindet sich auch bei übersetzten öffentlichen Hostports mit den festen Containerports 1099 und 2099.

Bei einer Portübersetzung sollte ein DNS-Name statt einer IP-Adresse verwendet werden. Eine IP-Adresse kann nicht über /etc/hosts auf den internen Dienst umgebogen werden.


RomexisOptionPaneUI-Patch

Beim Start des Clients wird der gemeinsame RomexisPropertyAgent geladen. Sein serverspezifischer RxCr2-Ersatz ist deaktiviert, der OptionPane-Patch dagegen standardmäßig aktiv.

Unter Java 17 kann ein AWT-Property-Change-Event einen Sekundenbruchteil zu früh ausgeführt werden, bevor die Planmeca-Klasse m_MessageArea initialisiert hat. Wenn der ursprüngliche Listener danach die Dialoggröße berechnet, ruft er getPreferredSize() auf dieser null-Referenz auf. Die resultierende NullPointerException tritt im AWT-Event-Thread auf und kann die gesamte Anwendung beenden, statt nur das Pop-up zu zeichnen.

RomexisOptionPaneUIPatch transformiert ausschließlich romexis_laf.RomexisOptionPaneUI$MyPCListener.propertyChange() und ergänzt unmittelbar vor dem fehlerhaften Aufruf einen Null-Guard. Das ursprüngliche Romexis-JAR bleibt auf dem Datenträger unverändert. Der Patch sollte nur für einen kontrollierten Vergleich deaktiviert werden:

ROMEXIS_AGENT_OPTIONPANE_PATCH=false

Persistente Daten und Healthcheck

Die Client-ProgramData liegen getrennt vom Server- und Admin-Zustand:

${ROMEXIS_DATA_ROOT}/docker/client/programdata
  -> /ProgramData/Planmeca/Romexis

Der Healthcheck prüft X-Display, laufenden Romexis.jar-Prozess und noVNC-Port. Da Romexis bedarfsgesteuert startet, kann der Dienst bis zum Doppelklick auf das Desktop-Symbol im Zustand starting bleiben oder unhealthy werden.


Betrieb und Fehleranalyse

docker compose up -d romexis-client
docker compose logs -f romexis-client
docker compose exec romexis-client tail -f /tmp/romexis-client.log

Wenn kein Desktop erscheint, prüfe die Meldungen von Xvfb, Openbox, x11vnc und websockify im Containerprotokoll. Beendet sich Romexis nach dem Aktivieren des Symbols, prüfe /tmp/romexis-client.log und stelle sicher, dass SERVER_RMI_HOSTNAME auf den internen Dienst romexis aufgelöst wird.