2009-08-18 12 views
2

Il me semble que JBoss réutilise les gestionnaires d'entités et les sessions d'hibernation sous-jacentes pour plusieurs requêtes. J'ai exécuté un test qui prouve que dans certains cas l'état d'une entité peut être périmé même s'il est simplement récupéré en utilisant em.find().Comment forcer JBoss 4.2.3 à effacer le cache de session d'hibernate pour chaque requête?

Comment est-ce que je peux désactiver ce comportement et forcer pour effacer ou jeter des sessions utilisées pour s'assurer que chaque demande est traitée avec le cache clair?

UPD:

Voici un exemple de cas.

requête HTTP 1. Un bean session crée une instance d'entité et les stocke avec le champ "A" mis à la valeur 1. L'entité persistante obtient ID = 4.

requête HTTP 2. Un bean session recherche une entité avec ID = 4, définit son champ "A" à la valeur 2 et l'enregistre.

Requête HTTP 3. Un bean session recherche une entité avec ID = 4 et vérifie son champ "A". Si la valeur est 1, elle fait une chose, si elle est 2, elle fait autre chose.

Si le message EM de la requête 3 est identique à celui de la requête 1, un comportement indésirable se produit. J'ai testé cela et j'ai obtenu environ. 10% des cas d'échec.

+0

Um ... pourquoi voudriez-vous? – cletus

+0

J'ai mis à jour la question avec un exemple expliquant pourquoi – artemb

+1

Artem, il semble que vous utilisiez un contexte de persistance étendue (qui est lié au cycle de vie du bean session et aura donc le comportement que vous décrivez) à la place: http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/architecture.html#architecture-ejb-persistctxscope. – ChssPly76

Répondre

0

Ok, j'ai compris cela. JBoss gère correctement les sessions, il y avait un bug dans mon test =) Désolé, et merci pour votre aide

0

Avez-vous essayé evicting l'objet du Session?

+0

Comment et quand (où) feriez-vous cela pour atteindre l'objectif que j'ai indiqué dans la question? – artemb