Einleitung

Isolated Mode – Der Standard-Modus ab FirstSpirit 2019-02

Inhaltsverzeichnis

FirstSpirit-Erweiterungen werden in Java entwickelt. Die Integration einer externen Implementierung in den FirstSpirit-Server und die FirstSpirit-Client-Anwendungen (FirstSpirit SiteArchitect, FirstSpirit ServerManager,...) erfolgt über die FirstSpirit-APIs. Diese bieten Zugriff auf FirstSpirit-interne Informationen, Dienste und Funktionalitäten.

Vor Einführung des Isolated Mode, der mit FirstSpirit 2019-06 zum Standard-Modus wurde, gab es für Modul-Entwickler einige Einschränkungen bei der Verwendung von Hilfs-Bibliotheken. Der bisherige Betriebs-Modus heißt im Unterschied zum „Isolated Mode“ jetzt „Legacy Mode“ und wird nur in einer Übergangszeit weiter unterstützt.

Dieses Dokument erklärt die Hintergründe und stellt dar, wie ein bestehender Server mit seinen Modulen auf den „Isolated Mode“ umgestellt werden kann.

Classloading: bisheriges Verhalten

Bisher („Legacy Mode“) wurden alle Bestandteile der Datei fs-server.jar in der Java VM geladen. Damit hatte der VM-Classloader nicht nur Zugriff auf die offiziellen FirstSpirit-Schnittstellen, sondern auch auf die ebenfalls in der Jar-Datei enthaltenen internen Klassen und Bibliotheken (siehe Abbildung).

Welche Nachteile gab es?

Bekannte Nachteile waren:

  • Die in der Datei fs-server.jar enthaltenen Bibliotheken (z. B. Log4J; Apache Commons) führten zu globalen Abhängigkeiten. Konflikte traten beispielsweise dann auf, wenn auf dem FirstSpirit-Server eine Bibliothek eingesetzt wurde und der Modulentwickler die gleiche Bibliothek in einer anderen (neueren) Version einsetzen wollte. Ein modul-lokaler Austausch bestimmter Bibliotheken war nicht möglich.
  • Die in der Datei fs-server.jar enthaltenen Bibliotheken waren kein zugesicherter Produktbestandteil, unterlagen also auch keinem geordneten Änderungsmanagement (anders als die FirstSpirit-APIs). Welche Version einer Bibliothek in fs-server.jar vorhanden war, war abhängig von der eingesetzten FirstSpirit-Version. Das bedeutete, dass auch beim Upgrade oder Downgrade eines FirstSpirit-Servers Konflikte auftreten konnten. Änderte sich dabei die Version einer Bibliothek auf dem Server, konnte das zu Inkompatibilitäten mit dort bereits installierten Modulen führen, die diese Bibliothek aus FirstSpirit verwendeten.
  • Ein weiterer Konfliktpunkt war die unkontrollierte Verwendung der internen Implementierungsklassen, die ebenfalls in fs-server.jar enthalten waren. Da diese in der JVM-Classloader-Hierarchie zur Verfügung standen, konnten sie praktisch auch für die Modulimplementierung verwendet werden. Das war zunächst bequem, wenn eine Methode auf offiziellem Weg nicht zur Verfügung steht, aber natürlich unterliegen diese internen Klassen ebenfalls keinen Stabilitätsauflagen und können jederzeit geändert werden.

Vorteile des Isolated Mode

  • mehr Freiheit bei der Auswahl der verwendeten Bibliotheken
  • globale Abhängigkeiten zu anderen Produktbestandteilen werden weitgehend vermieden
  • die Modulentwicklung ist insgesamt sicherer und stabiler
  • Module können besser gewartet werden
  • geringere Migrationsaufwände beim Upgrade oder Downgrade des FirstSpirit-Servers 

Beispiel: Nutzte FirstSpirit intern beispielsweise „Apache Commons Logging“ in Version 1.2 für das Logging innerhalb einer Webanwendung, trat im „Legacy Mode“ immer dann ein Konflikt auf, wenn ein Modulentwickler für eine kundenspezifische Modulimplementierung „Apache Commons Logging“ in einer anderen Version verwenden wollte. Das war insbesondere dann problematisch, wenn die Modulentwicklung Abhängigkeiten eines Drittanbieters enthielt, die nicht einfach angepasst werden konnten.

Classloading im "Isolated Mode"

Im Isolated Mode sind die FirstSpirit-APIs in der Datei fs-isolated-server.jar enthalten. Das heißt, alle Methoden und Interfaces der API sind im Classloader sichtbar und können für die Modulentwicklung verwendet werden (siehe Abbildung unten).

Für den Verbindungsaufbau und weitere essentielle Funktionen wird außerdem eine minimale Infrastruktur in Form interner Klassen benötigt („basic infrastructure“, siehe Abbildung). Auch diese internen Infrastruktur-Klassen sind weiterhin im Classloader sichtbar.

Alle weiteren, internen Klassen („Impl“) und auch die bisher in der Datei fs-server.jar vorhandenen Libraries sind im „abgeschirmten“ Modus in der Classloader-Hierarchie nicht mehr enthalten. Diese Inhalte werden in einen versteckten Bereich (in ein Verzeichnis innerhalb der Jar-Datei) ausgelagert und können vom Classloader nicht mehr gefunden werden („hidden“ Bereich, siehe Abbildung). Damit treten keine Konflikte mehr auf, wenn ein Modul eine Bibliothek verwendet, die im „hidden“ Bereich in der Datei fs-isolated-server.jar bereits in einer unterschiedlichen Version vorhanden ist. Konflikte mit anderen Modulen, die die gleiche Bibliothek in einer unterschiedlichen Version verwenden, können allerdings weiterhin auftreten (sofern diese Bibliotheken global eingebunden werden).

Classloading bei FirstSpirit-Webanwendungen

Auf dem Application Server werden Konflikte mit intern verwendeten Bibliotheken durch „Shading“ vermieden. Dabei wurden alle Bibliotheken umbenannt, die in internen FirstSpirit-Webanwendungen verwendet werden. Dazu wurden die Pakete umbenannt.

Beide Wege (sowohl Shading als auch das Auslagern der internen Bibliotheken und Klassen in einen versteckten Bereich) vermeiden Konflikte mit Ressourcen in anderen Produktbestandteilen bzw. anderen Modulimplementierungen, verhindern aber auch den Zugriff auf diese Ressourcen.

Einschränkungen

Kein Mischbetrieb in Clusterumgebungen möglich

Ein Mischbetrieb von Isolated-Servern und Legacy-Servern in einem Clusterverbund ist nicht zulässig. Damit kann beispielsweise ein Isolated-Master-Server nicht in einem Verbund mit einem Legacy-Slave-Server (oder umgekehrt) betrieben werden.

Historie: Einführung des Isolated mode

Verfügbar ab FirstSpirit-Version 5.2R6 (Februar 2017) Public Beta (Einführung des Isolated mode)
Die Umstellung auf den Isolated Mode ist sehr einfach, muss aber aktiv erfolgen. Um die Kompatibilität bestehender Module sicherzustellen, wird weiterhin auch das bisherige Verhalten („legacy mode“) unterstützt. Das bedeutet, sind Module so konzipiert, dass sie auf die Verwendung interner Libraries angewiesen sind, können diese Module weiter verwendet werden. Dazu sind keine Anpassungen notwendig.

Verfügbar ab FirstSpirit-Version 2019-01 (Januar 2019) Umstellung FirstSpirit-interner Module
Mit FirstSpirit 2019-01 wurde begonnen, die FirstSpirit-Module, die von e-Spirit / Crownpeak ausgeliefert werden, auf den Isolated Mode umzustellen. Dabei wurde der Anzeigename der Module (Tag <displayname>) durch den Zusatz (I, L) ergänzt. Dieser zeigt an, dass das jeweilige Modul sowohl auf FirstSpirit-Servern betrieben werden kann, die bereits im Isolated Mode, als auch auf Servern, die noch im Legacy Mode laufen. Der eindeutige Bezeichner / Name der Module (Tag <name>) bleibt unverändert.

Verfügbar ab FirstSpirit-Version 2019-02 (Februar 2019) Freigabe
Der Isolated Mode ist offiziell freigegeben: FirstSpirit-Server, die mit diesem Release oder später neu installiert werden, verwenden standardmäßig den Isolated Mode (bei Verwendung der Datei fs-install-[version].tar.gz). Werden Module eingesetzt, sollten diese Isolated-fähig sein, um einen reibungslosen Betrieb sicherstellen zu können. Siehe dazu auch Seite Modulentwicklung "Isolated".
Bestehende FirstSpirit-Module, die ausschließlich Ressourcen verwenden, die auf dem FirstSpirit-Server verfügbar sind (wie Dienste, Bibliotheken, Projektanwendungen), sind auf einem Isolated Server direkt lauffähig. Kurzfristig sind hier keine Anpassungen notwendig. Mittelfristig sollten aber alle Ressourcen in Modulen an die neuen Bedingungen angepasst werden, um die Vorteile des Isolated mode nutzen zu können. Siehe dazu Seite Modulentwicklung "Isolated" und Server: Installation und Umstellung.

Verfügbar ab FirstSpirit-Version 2022.1 (Januar 2022) Ankündigung: Entfall des Legacy Modes
Anfang 2022 wird der Legacy Mode entfallen. Bis dahin sollten alle Server umgestellt sein.

Verfügbar ab FirstSpirit-Version 2022.3 (März 2022) Legacy-Dateien werden nicht mehr zur Verfügung gestellt
Die Legacy-Binärdateien

  • fs-access.jar
  • fs-server.jar
  • fs-webrt.jar

werden nicht mehr zur Verfügung gestellt werden und müssen durch die Isolated-Äquivalente ersetzt werden.
Darüber hinaus unterstützen der Installer (fs-install tar.gz) und der Updater (fs-update tar.gz) nicht mehr den Legacy mode. FirstSpirit Server, die noch im Legacy mode betrieben werden, werden daher nicht mehr auf neuere Releases upgedatet (per fs-update tar.gz).

Ende 2022: Entfall Legacy Mode für kundenspezifische Module
Es ist geplant, die Unterstützung des Legacy-Modus für Module enden zu lassen. Bis dahin sollten alle Module umgestellt sein.

© 2005 - 2024 Crownpeak Technology GmbH | Alle Rechte vorbehalten. | FirstSpirit 2024.5 | Datenschutz