Bitte wähle nachfolgend aus, welche Beiträge auf dieser Themenseite auf dem Ausdruck ausgegeben werden sollen. Um dies zu tun markiere bitte die Checkbox auf der linken Seite der Posts, die im Ausdruck berücksichtigt werden sollen und klicke anschließend ganz unten auf der Seite auf den Button "Drucken".

Exception bei threaded Zugriff auf Saldo.toString()

dominik42

Betreff:

Exception bei threaded Zugriff auf Saldo.toString()

 ·  Gepostet: 16.07.2010 - 09:15 Uhr  ·  #68302
Hi,
für eine Serveranwendung nutze ich hbci4java in separaten Thread(groups). Meine aktuelle Impl. macht nur die reine HBCI4java Jobs innerhalb eines separaten Threads. Den Zugriff auf die Ergebnisse (GVRSaldoReq bzw.GVRKUms) und wegschreiben in die Datenbank etc. sollte passieren, NACHDEM der thread beendet ist. Der Zugriff auf GVRSaldoReq fkt. auch noch problemlos. Beim Zugriff auf die btag liste aus GVRKUms erhalte ich jedoch Exceptions. Der Debugger in Eclipse zeigt an:
Code
com.sun.jdi.InvocationException occurred invoking method

Das passiert, wenn es in den toString() Methoden zu Fehlern kommt. In Saldo.toString() wird HBCIUtils.getLocale() benötigt. Dort wird auf die locale Einstellung des aktuellen Threads zugegriffen:

Code
ThreadGroup group=Thread.currentThread().getThreadGroup();
return (Locale)HBCIUtilsInternal.locales.get(group);


Da dieser Zugriff in einem für HBCI nicht mehr bekannten Thread abläuft, kommt es hier zur NullPointerException.
Ausserhalb der Debugger-Umgebung kommt es zu ähnlichen Fehlern, die sich auf diese thread Problematik zurückführen lassen.

Meine Lösung sieht nun so aus, dass ich bereits innerhalb des HBCI-threads meine eigenen Datenstrukturen (Hibernate-Entities) befülle.
Gibt es noch einen anderen Weg um den HBCI-thread möglichst frei von Implementierungsdetails der anderen Anwendungs-Schichten zu halten ?

Gruß:Dominik