2009-08-18 2 views
2

Es scheint mir, dass JBoss Entity Manager und die zugrunde liegenden Hibernate-Sitzungen für mehrere Anfragen wiederverwendet. Ich habe einen Test durchgeführt, der beweist, dass in einigen Fällen der Zustand einer Entität veraltet sein kann, selbst wenn sie gerade mit em.find() geholt wird.Wie erzwinge JBoss 4.2.3, den Sitzungscache des Hibernate für jede Anfrage zu löschen?

Wie kann ich dieses Verhalten deaktivieren und erzwinge, verwendete Sitzungen zu löschen oder wegzuwerfen, um sicherzustellen, dass jede Anfrage mit gelöschtem Cache behandelt wird?

UPD:

Hier ist ein Beispielfall.

HTTP-Anforderung 1. Eine Session-Bean eine Entitätsinstanz und speichert sie mit dem Feld "A" schafft Satz 1. Die persistente Entität ID = bekommt 4.

HTTP-Anforderung 2. Eine Session-Bean ein nachschlägt zu schätzen Entity mit ID = 4, setzt sein Feld "A" auf den Wert 2 und speichert es.

HTTP-Anfrage 3. Eine Session-Bean sucht nach einer Entität mit ID = 4 und überprüft ihr Feld "A". Wenn der Wert 1 ist, tut er eine Sache, wenn es 2 ist, tut es eine andere Sache.

Falls das EM in Anforderung 3 dasselbe wie in Anforderung 1 ist, tritt ein unerwünschtes Verhalten auf. Ich habe das getestet und habe ca. 10% Fehlerfälle.

+0

Um ... warum möchten Sie? – cletus

+0

Ich habe die Frage mit einem Beispiel aktualisiert, das erklärt, warum – artemb

+1

Artem scheint, dass Sie einen erweiterten Persistenzkontext verwenden (der an den Sitzungsbohnenlebenszyklus gebunden ist und daher das von Ihnen beschriebene Verhalten aufweist), aber transaktionsorientiert sein soll stattdessen: http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/architecture.html#architecture-ejb-persistctxscope. – ChssPly76

Antwort

0

Ok, das habe ich herausgefunden. JBoss behandelt Sitzungen korrekt, es gab einen Fehler in meinem Test =) Entschuldigung, und Danke für Ihre Hilfe

0

Versuchen Sie evicting das Objekt vom Session?

+0

Wie und wann (wo) würdest du das tun, um das Ziel zu erreichen, das ich in der Frage angegeben habe? – artemb

Verwandte Themen