Thread1 holt das Dokument z.B aus einer View. Thread2 macht kurz darauf das selbe und bekommt exakt das selbe Objekt. Thread1 ist fertig und recycelt das Objekt. Thread 2 crasht dann wenn er auf das Objekt zugreifen will, da es ja bereits recycelt ist.
Hallo Ralf,
"exakt das selbe Objekt" stimmt mich nachdenklich. Das ist möglicherweise der Punkt. Die Documents sind vermutlich als Collection im Database-Object. Das Database-Objekt ist ja - wie man an den Initialisierungszeiten-Messungen sieht - ein sehr großes Objekt-. Wenn jetzt -wie es meine Idee war - das Database-Object zwischen verschiedenen (User-)Threads in doPost() und doGet() geshared wird, dann wird das wahrscheinlich die Ursache sein.
In Single-User Swing Anwendungen tritt diese Situation einfach nicht auf. Da kann das Database-Objekt von verschiedenen Aufrufen geshared werden.
Meine Swing-App funktioniert ja so:
+ Initialisierung:
-> hole Session, Database, View. Speichere diese in Instanzvariablen.
+ Aufruf 1: hole Collection, hole Documents, recycle Collection
+ Aufruf 2: hole Collection, hole Documents, recycle Collection.
+ [...]
+ Aufruf 2: hole Collection, hole Documents, recycle Collection.
-> recycle Session (und damit alles andere)
Das ist sauber.
Bei Multi-User Servlets greifen aber mehrere User synchron auf die gleichen Document-Objekte zu, wenn das Database-Objekt geshared wird.
Wird das Database bei jedem User-Thread (doXXX) neu erzeugt, wird nicht auf den gleichen Document-Objects gearbeitet, bei gesharter Database aber schon.
hoffe ich habe mich einigermaßen klar ausgedrückt
Gruß Axel