Thema dieser Dokumentation / Das FirstSpirit 5 Modul- / Komponenten-Modell / Komponentenlose Modul-Implementierung (JDBC-Connector-Modul)
Komponentenlose Modul-Implementierung (JDBC-Connector-Modul)
Um beispielsweise einen MySQL-JDBC-Treiber zur Nutzung innerhalb von FirstSpirit einzubinden oder zu aktualisieren, ist es erforderlich, den FirstSpirit-Server herunterzufahren bzw. einen Neustart durchzuführen. Besteht außerdem die Anforderung, z. B. zwei verschiedene MySQL-JDBC-Treiber für unterschiedliche Datenbankserver mit abweichenden Treiber-Versionen parallel zu betreiben, wird immer der erste von der JVM gefundene Treiber geladen (System-Classloader, siehe auch Classloading).
Für den ersten der beiden zuvor beschriebenen Anwendungsfälle bietet sich die Implementierung einer Bibliothek-Modul-Komponente an (siehe Implementierung einer Bibliothek-(Library) Komponente (JDBC-Treiber-Modul)) oder, wie in diesem Kapitel beschrieben, als komponentenlose Modul-Umsetzung, wobei der MySQL-Connector hier als Modul-Ressource außerhalb des <components>-Elements im Modul-Deskriptor definiert wird und somit über den FirstSpirit Modul-Classloader erreichbar ist und nicht im VM-System-Classloader landet (siehe auch Classloading). Dadurch ergibt sich die Möglichkeit, mehrere Module (bspw. Module MySQL3 und Module MySQL5) mit unterschiedlichen Treiberversionen zu erstellen und diese anschließend parallel zu betreiben, wie im zweiten Anwendungsfall beschrieben. Grundlegend gilt: die Modul-Ressourcen sind systemweit verfügbar. D.h., sie werden in ein temporäres Verzeichnis (eines pro Modul) entpackt und sind dann über den Server-ClassLoader erreichbar. Das führt dazu, dass bei Namensgleichheit von Dateien das erste Modul/Datei/Klasse gewinnt. Das ist in der VM exakt genau so: sind mehrere JARs im ClassPath vorhanden, gewinnt immer die erste gefundene Ressource.
Vorteile der Integration eines Datenbank-Treibers als Modul-Implementierung:
- Der MySQL-JDBC Treiber kann im laufenden Betrieb des FirstSpirit-Servers nachgeladen werden, der Server muss somit nicht heruntergefahren/neugestartet werden.
- Es können Treiber in unterschiedlichen Versionen vorliegen und parallel zur Verwendung kommen.
Die Beispiele, die eine JDBC-Modul-Library verwenden, werden aus lizenztechnischen Gründen ohne die entsprechende JDBC-Bibliothek ausgeliefert. Diese muss vom jeweiligen Distributor heruntergeladen und im lib-Verzeichnis des Moduls abgelegt werden. Dazu muss die txt-Datei, die als Platzhalter dient, durch die entsprechende Bibliothek ersetzt werden, z. B. „mysql-connector-java-3.1.14-bin.jar.txt“ im Verzeichnis Library/MySQL03/lib durch „mysql-connector-java-3.1.14-bin.jar.“ |
Um aus einem JDBC-Treiber eine FirstSpirit-Modul zu erstellen genügen wenige Schritte (hier am Beispiel von „mysql-connector-java-3.1.14-bin.jar "):
1. Erstellen des Modul-Deskriptors – module.xml
Listing: Modul-Deskriptor ohne Komponenten – module.xml
<!DOCTYPE module SYSTEM "http://www.FirstSpirit.de/module.dtd">
<module>
<name>MySQL</name>
<version>3.1.14</version>
<description>JDBC Driver for MySQL (MySQL Connector/J 3.1.14)</description>
<vendor>MySQL-AB</vendor>
<resources>
<resource>lib/mysql-connector-java-3.1.14-bin.jar</resource>
</resources>
<components/>
</module>
2. Anlegen der Modul-Verzeichnisstruktur
3. Erstellen der Modul-Archiv-Datei
Entweder über das Kommando:
$ zip -r MySQL.fsm .
adding: META-INF/ (stored 0%)
adding: META-INF/module.xml (deflated 40%)
adding: lib/ (stored 0%)
adding: lib/mysql-connector-java-3.1.14-bin.jar (deflated 4%)
oder über die grafische Benutzeroberfläche des bevorzugten Zip-Werkzeugs. Sollte es nicht möglich sein, die aus dem Zip-Vorgang resultierende Datei direkt als *.fsm - MySQL.fsm zu deklarieren, kann die MySQL.zip-Datei einfach umbenannt werden in MySQL.fsm.
4. Das neu erstellte Modul über den ServerManager installieren
5. Verwendung des Modul-Treibers
In den Layer-Eigenschaften der entsprechenden Datenbank den Eintrag module=MySQL03 (Name siehe module.xml, Element <name>MySQL</name>) ergänzen:
Um die mysql-connector Version 5 zu nutzen, ist in den Layer-Eigenschaften der entsprechende Datenbank der Eintrag module=MySQL03 auf module=MySQL05 zu ändern: