[jboss-user] [JBoss Cache Users] - how to lock a node for update?
do-not-reply at jboss.com
Mon Sep 21 18:24:02 EDT 2009
I just started using JBoss Cache and went through the doc and searched the forum but didn't find the answer for my question. I am using JBossCache 3.2.0.GA.
I need to perform the following operation frequently in a clustered caching environment:
| Node node = cache.getChild(Fqn.fromString("app/sequence/msgId"));
| Integer currentId = (Integer)node.get("id");
| Integer nextId = new Integer(currentId.intValue()+1);
| node.put("id", nextId);
Basically, a read followed by a write that increment the value. I'd like to know what's the best way to approach this.
If I don't use any locking, the node.put() will, according to the doc, fast fail if another thread on the same JBoss node or the clustered node updates the value, in which case I need to capture exception and repeat this operation and might suffer the starvation problem.
Alternatively, I think I can use LockManager.lock() to proactively lock the node before read / update it. The starvation problem may still occur, but if I obtain the lock, I know I won't get an exception for writing later one. But I didn't find any useful document on the use of the LockManager and therefore, I am not sure if this approach is recommended or not.
Furthermore, I am not sure how my setting of the isolationLevel attribute (either "READ_COMMITTED" or "REPEATABLE_READ") affects the behavior in the above two scenarios.
Can someone please share your thoughts on this?
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4256268#4256268
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4256268
More information about the jboss-user