Hibernate ConcurrentModificationException

torax13

Erfahrenes Mitglied
Hi,

eine Frage zu Hibernate/JPA (ich verwende das JPA mit Hibernate als Implementierung). Das ganze läuft eigentlich soweit ganz gut, nur treten in letzter Zeit häufiger ConcurrentModificationException auf.

Hintergrund: die Anwendung besteht aus einem Web-Part, welches u.a. per Servlet Daten von einem GreaseMonkey Skript empfängt und per JPA in die DB speichert.

Zusätzlich läuft in regelmäßigen Abständen ein Job, welcher ein paar Webseiten parst und Daten ebenfalls per JPA in die DB kippt.

Der Parser Teil ist seit einiger Zeit unverändert, bringt aber seit kurzen fast immer obige Exception (hat er früher auch ab und zu, aber so selten das es kein Problem war)

Eine Erweiterung des Greasemonkey Sripts meldet nun sehr viel häufiger Daten per Servlet, was wohl zu der Verstärkung des Problems geführt hat.


Ich hab nun schon im 'Hibernate in Action' Buch rauf und runter gelesen, aber nichts gefunden, was mir so richtig weiterhilft. Letztlich würd ich Hibernate gern sagen: 'pass auf hier bei dem Parser Teil, ignoriere alle Änderungen an DB, schreib einfach deine Daten zurück'. Eventuell per Konfiguration zur Laufzeit oder per persistent.xml Eintrag.

Irgendwelche Ideen? Gehts vielleicht auch ganz anders?

schon mal Dank fürs lesen.
Gruß
 
Vermutlich fasst dein Batchjob Daten an, die gerade in einem anderen EntityManager gehalten werden. Das ist halt ein üblichen Problem bei konkurrierenden Datenbankzugriffen. Es sollte helfen sich in das Thema Locking einzulesen (optimistic VS. pessimistic).

Auf der anderen Seite wäre es spannend zu erfahren, wann genau die Exception auftritt. Beim Iterieren über Ergebniscollections oder beim Zurückspeichern der Daten. Im letzteren Fall trifft oberes zu und du solltest die Sache mit einer geschickten Wahl des Isolationlevels auf den Transaktionen in den Griff bekommen. Für ersteren Fall stellt sich die Frage, wieso unterschiedliche Threads zugriff auf die gleiche Collection bekommen. Dass du grundsätzlich eine Collection nicht modifizieren solltest während du über sie iterierst ist sicherlich klar, oder?

Gruß
Ollie
 
Manchmal sollte man einfach mal über sein Problem reden ;)

Ich hab mich durch das sporadische Auftreten und Hibernate im Stacktrace in die Irre führen lassen. Letztlich hab ich beim Untersuchen der Stelle wo die Exceoption geworfen wird, den Fehler auch auch gleich gesehen. wie Du auch schreibst, hab ich Versucht die Collection zu Modifizieren wärend ich darüber iterrierte.... Allerdings halt nur unter bestimmten Umständen.

Vielen Dank
Torax
 

Neue Beiträge

Zurück