1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
HBCI4Java in Anwendungen, die auf einem Application-Server laufen
-----------------------------------------------------------------
Noch einige Anmerkungen zur Verwendung von HBCI4Java in Anwendungen, die auf einem
Application-Server laufen. Wenn von allen auf einem Application-Server
deployten Anwendungen nur eine einzige Anwendung tatsächlich HBCI4Java benutzt,
gibt es keine speziellen Dinge zu berücksichtigen: die HBCI4Java-Bibliothek
(hbci4java.jar) kann entweder global für alle Web-Anwendungen oder lokal nur
für die eine betroffene Web-Anwendung deployt werden. Die Anwendung selbst
muss einmal HBCIUtils.init() aufrufen, um alle Datenstrukturen zu initialisieren.
Da für jede neue Anfrage an die Web-Anwendung zwar ein neuer Thread, aber keine
neue ThreadGroup erzeugt wird, muss hier auch nichts weiter beachtet werden.
Wenn man selbst neue Threads erzeugen will, die HBCI-Funktionen ausführen, so
muss für jeden selbst erzeugten HBCI-Thread auch eine neue ThreadGroup erzeugt
und mit HBCIUtils.initThread() initialisiert werden.
Falls auf einem Application-Server mehrere Anwendungen HBCI4Java benutzen, sind
einige Dinge zu beachten. Die HBCI4Java-Bibliothek (hbci4java.jar) muss so
deployt werden, dass *alle* Web-Anwendungen darauf Zugriff haben (z.B. nach
<CATALINA_HOME>/common/lib), und darf *nicht* mit in das Verzeichnis WEB-INF/lib
der Web-Anwendung kopiert werden. Warum das so ist, weiß ich leider auch nicht,
bei mir gibt es jedenfalls immer sehr seltsame ClassLoader-Probleme, wenn ich
das nicht beachte.
Jede installierte Web-Anwendung wird in der selben JVM und auch innerhalb der
selben ThreadGroup erzeugt und gestartet. Da eine Web-Anwendung i.d.R. nicht
wissen kann, ob noch andere Web-Anwendungen HBCI4Java benutzen, könnte es zu
Problemen bei der Verwaltung der ThreadGroup-abhängigen Daten kommen. Wenn also
zwei Web-Anwendungen ihre HBCI-Threads als "Haupt-Threads" der Anwendung laufen
lassen, laufen beide HBCI-Threads innerhalb der selben ThreadGroup und
beeinflussen damit gegenseitig ihre Daten. Es ist deshalb *immer* zu empfehlen,
in HBCI4Java-fähigen Anwendungen, die auf einem Application-Server installiert
werden sollen, für die HBCI-Funktionen explizit eine separate ThreadGroup zu
erzeugen und den Thread, der die HBCI-Funktionen ausführen soll, in dieser
ThreadGroup anzulegen.
|