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?
Thank you,
View the original post :
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4256268#...
Reply to the post :
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&a...