Bonjour,
J'utilise Hibernate 3.1.3 et spring 1.2.5 au sein d'une architecture SOA.
J'ai des problèmes lorsque je stress mon application avec plusieurs utilisateurs simultannées.
Concernant Spring, j'utilise la gestion la gestion des transactions déclaratives au niveau de chaque appel de méthode de service--> Chaque appel de méthode de service est donc encapsuler par une ouverture et fermeture de session/transaction hibernate.
J'utilise par ailleurs le pattern "session-per-request-with-detached-objects" décrit dans la doc Hibernate.
Chaque objet persistant renvoyé par une méthode de service passe à l'état "détaché" car la session hibernate dans laquelle il a été chargé est automatiquement fermé par Spring.
Par conséquent, lorsque cette objet est repassé en paramètre à une seconde méthode de service, celui est rattaché à la nouvelle session hibernate ouverte pour ce second service.
Et ainsi de suite lors de l'enchainement d'appel de méthode de service....
Tout fonctionne bien lorsqu'il n'y a qu'un seul utilisateur connecté à mon application.
Dès que plusieurs utlisateurs se connecte à l'application, des erreurs (NonUniqueObjectException) apparaissent lors du rattachement des objets détachés. Comme si la session hibernate était partagé par plusieurs Thread.
Or d'après ce que j'ai lu, lorsque l'on utilise de la gestion déclarative de transaction avec Spring, le mode de gestion de session est fixé par Thread.
J'ai essayé d'ajouter le paramètre hibernate.current_session_context_class=thread sans succès.
Quelqu'un aurait-il un piste ?
|