Wir nutzen db4o 6.1 im Client / Server Mode. Die Verbindungen werden von
einem Connection Pool (Apache Commons) an die einzelnen Clients
verteilt. Wird eine Änderung an einem Objekt durchgeführt, wird dazu
eine Verbindung aus dem Pool geholt und die Änderung mit einem commit
abgeschlossen. Danach wird die Verbindung wieder an den Pool
zurückgegeben, ohne sie zu schließen. Anschließend wollten wir uns das
Objekt ausgeben lassen, um zu überprüfen, ob der Wert korrekt geändert
wurde. Bekommt man vom Pool aber eine andere Verbindung werden in der
Regel die alten Werte (vor der Änderung) angezeigt. Dieses Problem haben
wir erst mal behoben, indem wir nach dem Laden des Objekts immer ein
'refresh' auf das Objekt gemacht haben.
Nun haben wir aber festgestellt, dass schon im Predicate beim Holen der
Daten aus der Datenbank etwas falsch läuft. Im Predicate wird noch das
alte (unveränderte) Objekt ausgewertet. Wird auf Server-Seite auch eine
Art Caching genutzt?
Ich wollte daher fragen, ob jemand einen Hinweis zur Ursache dieses
Problem geben kann und wie wir es beheben/umgehen können. Im Anhang
habe ich nochmal ein kleines Programm angehängt, wo dieses Problem
nochmal im JUnit-Test dargestellt wird.
Weiterhin wollte ich Sie fragen, ob es eine Möglichkeit gibt, auf das
'refresh’ der Objekte zu verzichten, ohne 'purge’ zu benutzen (dadurch
werden die Antwortzeiten um ein vielfaches größer).
Ich hoffe, dass uns jemand bei den geschilderten Problem weiterhelfen kann.