Einleitung / Hintergrund: Classloading

Classloading – Sichtbarkeit von Ressourcen

Inhaltsverzeichnis

Mit Einführung des „Isolated Mode“ können Module in zwei unterschiedlichen Modi („isolated“ und „legacy“) entwickelt werden. Wobei beide Modi auch in einem Modul verwendet werden können („mixed-mode“).

Die Entscheidung darüber, welche Sichtbarkeit bestimmte Ressourcen innerhalb des Moduls bzw. auf dem Server besitzen, liegt weiterhin beim Modulentwickler. Ressourcen, die innerhalb eines Moduls verwendet werden, können serverweit oder modul-lokal sichtbar sein. Auch dabei sind gemischte Module möglich.

Mögliche Kombinationen innerhalb einer Komponente oder innerhalb eines Moduls:

  • Ressource ist serverweit verfügbar und isolated
  • Ressource ist modul-lokal verfügbar und isolated
  • Ressource ist serverweit verfügbar und nicht isolated (legacy mode)
  • Ressource ist modul-lokal verfügbar und nicht isolated (legacy mode)

Klassen und andere Ressourcen werden im Modul und in den Komponenten in <resource>-Einträgen definiert (siehe Optionale Einträge (→Entwicklerhandbuch für Komponenten)). Diese verweisen auf eine Jar-Datei oder ein Verzeichnis. Um diese Einträge im Classloader verwenden zu können, werden sie von FirstSpirit ausgepackt (Modul-Installation, Serverstart) und in ein temporäres Verzeichnis gelegt.

Globale Ressourcen (scope="server")

Globale Ressourcen stehen auch anderen Modulen auf dem Server zur Verfügung. Allerdings liegen dabei alle Klassen in einem Namespace, und damit kann es jede Klasse nur einmal geben. Damit ist eine Verwendung verschiedener Versionen einer Klasse ausgeschlossen.

Modul-lokale Ressourcen (scope="module")

Modul-lokale Ressourcen sind nur innerhalb des Moduls verfügbar. Jedes Modul sieht „seine“ lokalen Ressourcen und alle globalen Ressourcen (z. B. Libraries anderer Module). In unterschiedlichen Modulen können damit verschiedene Versionen der gleichen Klasse existieren, ohne sich gegenseitig zu beeinflussen (abhängig vom Gültigkeitsbereich).

Es gilt: Klassen aus global-definierten Jars können keine Klassen aus modul-lokal definierten Jars benutzen. Der umgekehrte Weg ist jedoch möglich.

Isolierte Ressourcen (mode="isolated")

Als Ressourcen für die Modulentwicklung können nur noch die Interfaces der FirstSpirit-API („Runtime-API“, siehe Abbildung) verwendet werden sowie modul-lokale Ressourcen (Implementierungsklassen und Bibliotheken des Moduls) und global verfügbare Ressourcen anderer Module.
FirstSpirit-interne Implementierungsklassen und Bibliotheken werden vom Classloader nicht mehr gesehen und können nicht mehr verwendet werden.

Nicht isolierte Ressourcen (mode="legacy")

Als Ressourcen für die Modulentwicklung können die Interfaces der FirstSpirit-API („Runtime-API“, siehe Abbildung) verwendet werden, sowie modul-lokale Ressourcen (Implementierungsklassen und Bibliotheken des Moduls) und global-verfügbare Ressourcen anderer Module.
FirstSpirit-interne Implementierungsklassen und Bibliotheken stehen über den Classloader ebenfalls zur Verfügung.

© 2005 - 2022 Crownpeak Technology GmbH | Alle Rechte vorbehalten. | FirstSpirit 2023.2 | Datenschutz