File: README.MultiThreading.AppServer

package info (click to toggle)
hbci4java 3.1.29%2Bdfsg-1%2Bdeb10u1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 9,524 kB
  • sloc: java: 47,025; xml: 32,904; cpp: 3,264; makefile: 153; sh: 11
file content (36 lines) | stat: -rw-r--r-- 2,357 bytes parent folder | download | duplicates (5)
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.