-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: Encore une question de Lock... ;)
PostPosted: Wed Feb 01, 2006 1:33 pm 
Beginner
Beginner

Joined: Tue Oct 18, 2005 10:47 am
Posts: 20
Location: Basel
Bonjour à tous !

Je souhaite avoir une petite précision au sujet des 'pessimistic lock'.
Voici un petit code d'example :

Code:
Session s = sessionFactory.openSession();
Query q = s.createQuery("FROM Hell");
Object o = q.uniqueResult();
s.lock(o,LockMode.UPGRADE);

Session s2 = sessionFactory.openSession();
Query q2 = s.createQuery("FROM Hell");
Object o2 = q.uniqueResult();

Avec les paramètres par défaut, o2 ne vaut pas null.
Or, si l'on précise explicitement que l'on veut 'locker' une instance, on ne devrait plus y avoir accès dans les autres sessions, non ?

Merci d'avance pour vos réactions.
Joël.


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 02, 2006 3:01 am 
Regular
Regular

Joined: Tue May 03, 2005 8:19 am
Posts: 53
Location: Paris
Pourquoi o2 devrait il être null?

D'après la javadoc, LockMode.UPGRADE est equivalent à une requete SQL select ... for update.

Tu poses donc un lock, pour que personne ne puisse mettre à jour ton objet o.
Si dans une transaction différente tu essayes de modifier o2, je ne pense pas que tu puisses tant que le verrou ne sera pas supprimé.


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 02, 2006 6:45 am 
Beginner
Beginner

Joined: Tue Oct 18, 2005 10:47 am
Posts: 20
Location: Basel
Merci pour ta réponse, lauvigne.

Effectivement, o2 peut être initialisé correctement si on part du principe que des données verrouillées peuvent tout de même être accessibles en lecture seule.

Mon problème est que ca ne devrait pas etre le cas chez moi. Des données verrouillées ne peuvent pas être accessibles en lecture. Il faudrait donc que je puisse savoir si un objet est déjà verrouillé dans une autre session.

Par exemple, c'aurait été bien pratique pour moi si, en ajoutant cette ligne au code précédent :
Code:
s2.lock(o2,LockMode.UPGRADE);

j'obtienne une exception de type org.hibernate.exception.LockAcquisitionException, par exemple (d'ailleurs, en faisant une recherche dans le code, je ne vois nulle part où le constructeur de cette classe est appelé, est-ce normal ?)
Or, suite à mon code, tout se déroule correctement (pas d'exception) et je me retrouve avec 2 instances lockées, ce qui ne me semble pas logique.

Ai-je mal interprété le rôle du lock, ou bien est ce que je ne l'utilise pas convenablement ?

Merci d'avance,
Joël.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.