org.jboss.ejb.plugins.lock
Class SimpleReadWriteEJBLock

java.lang.Object
  extended by org.jboss.ejb.plugins.lock.BeanLockSupport
      extended by org.jboss.ejb.plugins.lock.SimpleReadWriteEJBLock
All Implemented Interfaces:
BeanLock, BeanLockExt, org.jboss.util.deadlock.Resource

public class SimpleReadWriteEJBLock
extends BeanLockSupport

This lock allows multiple read locks concurrently. Once a writer has requested the lock, future read-lock requests whose transactions do not already have the read lock will block until all writers are done -- then all the waiting readers will concurrently go (depending on the reentrant setting / methodLock). A reader who promotes gets first crack at the write lock -- ahead of other waiting writers. If there is already a reader that is promoting, we throw an inconsistent read exception. Of course, writers have to wait for all read-locks to release before taking the write lock.

Version:
$Revision: 1.5.6.2 $

Revisions:

2002/6/4: yarrumretep

  1. Initial revision
Author:
Peter Murray

Field Summary
 
Fields inherited from class org.jboss.ejb.plugins.lock.BeanLockSupport
container, id, refs, synched, synchedDepth, tx, txTimeout
 
Constructor Summary
SimpleReadWriteEJBLock()
           
 
Method Summary
 void endInvocation(Invocation mi)
          Callback to the BeanLock to inform it that a method invocation has ended.
 void endTransaction(Transaction transaction)
          Informs the lock that the given transaction has ended.
 void schedule(Invocation mi)
          This method implements the actual logic of the lock.
 void wontSynchronize(Transaction transaction)
          Signifies to the lock that the transaction will not Synchronize (Tx demarcation not seen).
 
Methods inherited from class org.jboss.ejb.plugins.lock.BeanLockSupport
addRef, attemptSync, getId, getRefs, getResourceHolder, getTransaction, releaseSync, removeRef, setContainer, setId, setTimeout, setTransaction, sync
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SimpleReadWriteEJBLock

public SimpleReadWriteEJBLock()
Method Detail

schedule

public void schedule(Invocation mi)
Description copied from interface: BeanLock
This method implements the actual logic of the lock. In the case of an EJB lock it must at least implement the serialization of calls

Specified by:
schedule in interface BeanLock
Specified by:
schedule in class BeanLockSupport
Parameters:
mi - The method invocation that needs a lock.

endTransaction

public void endTransaction(Transaction transaction)
Description copied from interface: BeanLock
Informs the lock that the given transaction has ended.

Specified by:
endTransaction in interface BeanLock
Specified by:
endTransaction in class BeanLockSupport
Parameters:
transaction - The transaction that has ended.

wontSynchronize

public void wontSynchronize(Transaction transaction)
Description copied from interface: BeanLock
Signifies to the lock that the transaction will not Synchronize (Tx demarcation not seen).

OSH: This method does not seem to be called from anywhere. What is it meant for? To be called on a timeout before the transaction has terminated?

Specified by:
wontSynchronize in interface BeanLock
Specified by:
wontSynchronize in class BeanLockSupport

endInvocation

public void endInvocation(Invocation mi)
Description copied from interface: BeanLock
Callback to the BeanLock to inform it that a method invocation has ended. A common use of this method is to release a method lock.

Specified by:
endInvocation in interface BeanLock
Specified by:
endInvocation in class BeanLockSupport


Copyright © 2002 JBoss Group, LLC. All Rights Reserved.