The key is acquiring a RL in ClusteredSessionValve:

  |    // let the servlet invocation go through       
  |    Lock lock =  manager.getReadLock(requestedSessionId);
  |    lock.lock();
  |    try
  |    {
  |          if (isEvent)
  |          {
  |             getNext().event(request, response, event);
  |          }
  |          else
  |          {
  |             getNext().invoke(request, response);
  |          }
  |    }
  |    finally
  |    {
  |       lock.unlock();
  |    }
  | 

The stuff inside that try/finally block encapsulates the application code's 
interaction with the session. The lock returned by manager.getReadlLock(...) is 
the RL from a java.util.concurrent.lock.ReadWriteLock. When any replication 
activity happens, it happens outside the above block and the corresponding WL 
is acquired.

Result is, application code will not be manipulating the session when the WL is 
held. Application code doesn't need access to the RL as it will never be 
conflicting with the replication code.


Unspoken and unproven assumption here: there is a sufficient benefit to having 
*guaranteed* lockout of application activity. One benefit is it removes the 
need for the application to synchronize.

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

Reply to the post : 
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4240432
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to