[jboss-user] [JBoss Cache: Core Edition] - Re: Manual node locking?

mircea.markus do-not-reply at jboss.com
Fri Jun 19 07:06:34 EDT 2009


anonymous wrote : To lock object O:
  | 1. val = cache.put( '/locks', O, 'lock' )
  | 2a. If val == null, we have the lock (no previous 'put')
  | 2b. Else (val != null ) somebody else locked it first. Use a cache listener to wait for removed nodes
  | 3a. Lock owner in (2a) proceeds. When finished, call cache.remove( '/locks', O )
  | 3b. Contenders from (2b) get notified and return to (1)
You have to use tx in order to keep the lock from step1 to step 3. Otherwise the lock will be released when cache.put returns. Here is a way for doing this:

//1 use the tx manager that comes with cache;line bellow can also be specified through configuration, in transaction element, transactionManagerLookupClass attribute
  | configuration.setTransactionManagerLookupClass(DummyTransactionManagerLookup.class.getName());
  | 
  | //2. obtain the TransactionManager
  | TransactionManager tm = cache.getConfiguration().getRuntimeConfig().getTransactionManager();
  | 
  | //3. start a transaction
  |       tm.begin();
  | 
  | //4. make sure that the node will be locked even if you only read it. After this call you are ensured to be the only one having access to the node
  | cache.getInvocationContext().getOptionOverrides().setForceWriteLock(true);
  | Object o = cache.get(fqn, "k");
  | 
  | //5. do whatever you need, the locks are still held here
  | ....
  | 
  | //locks are released here, other trying to read same fqn will be allowed to
  | 6.tm.release();



View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4238745#4238745

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4238745



More information about the jboss-user mailing list