org.apache.openjpa.jdbc.kernel
Class PessimisticLockManager

java.lang.Object
  extended by org.apache.openjpa.kernel.AbstractLockManager
      extended by org.apache.openjpa.kernel.VersionLockManager
          extended by org.apache.openjpa.jdbc.kernel.PessimisticLockManager
All Implemented Interfaces:
JDBCLockManager, LockLevels, LockManager, Closeable
Direct Known Subclasses:
MixedLockManager

public class PessimisticLockManager
extends VersionLockManager
implements JDBCLockManager

Lock manager that uses exclusive database locks.

Author:
Marc Prud'hommeaux

Field Summary
protected  JDBCStore _store
           
static int LOCK_DATASTORE_ONLY
           
 
Fields inherited from class org.apache.openjpa.kernel.AbstractLockManager
ctx, log
 
Fields inherited from interface org.apache.openjpa.kernel.LockLevels
LOCK_NONE, LOCK_READ, LOCK_WRITE
 
Constructor Summary
PessimisticLockManager()
           
 
Method Summary
protected  void checkLock(ResultSet rs, OpenJPAStateManager sm, int timeout)
          This method is to provide override for non-JDBC or JDBC-like implementation of checking lock from the result set.
protected  ResultSet executeQuery(Connection conn, PreparedStatement stmnt, SQLBuffer sql)
          This method is to provide override for non-JDBC or JDBC-like implementation of executing query.
protected  List<SQLBuffer> getLockRows(DBDictionary dict, Object id, ClassMapping mapping, JDBCFetchConfiguration fetch, SQLFactory factory)
           
 JDBCStore getStore()
           
 void loadedForUpdate(OpenJPAStateManager sm)
          Notification that the given instance was loaded via a result set produced by a FOR UPDATE select.
protected  void lockInternal(OpenJPAStateManager sm, int level, int timeout, Object sdata, boolean postVersionCheck)
          Marks the instance's transactional status in accordance with the settings of VersionLockManager.getVersionCheckOnReadLock() and VersionLockManager.getVersionUpdateOnWriteLock().
protected  PreparedStatement prepareStatement(Connection conn, SQLBuffer sql)
          This method is to provide override for non-JDBC or JDBC-like implementation of preparing statement.
 boolean selectForUpdate(Select sel, int lockLevel)
          Return whether to issue the given select FOR UPDATE, depending on the capabilities of the dictionary and the fetch configuration.
 void setContext(StoreContext ctx)
          Set the context this lock manager is associated with.
 
Methods inherited from class org.apache.openjpa.kernel.VersionLockManager
getLockLevel, getVersionCheckOnReadLock, getVersionUpdateOnWriteLock, lock, lock, optimisticLockInternal, release, setLockLevel, setVersionCheckOnReadLock, setVersionUpdateOnWriteLock
 
Methods inherited from class org.apache.openjpa.kernel.AbstractLockManager
beginTransaction, close, endTransaction, getContext, lockAll, skipRelationFieldLock
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.apache.openjpa.jdbc.kernel.JDBCLockManager
skipRelationFieldLock
 
Methods inherited from interface org.apache.openjpa.kernel.LockManager
beginTransaction, close, endTransaction, getLockLevel, lock, lock, lockAll, release
 

Field Detail

LOCK_DATASTORE_ONLY

public static final int LOCK_DATASTORE_ONLY
See Also:
Constant Field Values

_store

protected JDBCStore _store
Constructor Detail

PessimisticLockManager

public PessimisticLockManager()
Method Detail

setContext

public void setContext(StoreContext ctx)
Description copied from interface: LockManager
Set the context this lock manager is associated with. This will be invoked in the lock manager before any other methods are called.

Specified by:
setContext in interface LockManager
Overrides:
setContext in class AbstractLockManager

selectForUpdate

public boolean selectForUpdate(Select sel,
                               int lockLevel)
Description copied from interface: JDBCLockManager
Return whether to issue the given select FOR UPDATE, depending on the capabilities of the dictionary and the fetch configuration.

Specified by:
selectForUpdate in interface JDBCLockManager

loadedForUpdate

public void loadedForUpdate(OpenJPAStateManager sm)
Description copied from interface: JDBCLockManager
Notification that the given instance was loaded via a result set produced by a FOR UPDATE select.

Specified by:
loadedForUpdate in interface JDBCLockManager

lockInternal

protected void lockInternal(OpenJPAStateManager sm,
                            int level,
                            int timeout,
                            Object sdata,
                            boolean postVersionCheck)
Description copied from class: VersionLockManager
Marks the instance's transactional status in accordance with the settings of VersionLockManager.getVersionCheckOnReadLock() and VersionLockManager.getVersionUpdateOnWriteLock(). Override to perform additional locking.

Overrides:
lockInternal in class VersionLockManager
See Also:
StoreContext.transactional(java.lang.Object, boolean, org.apache.openjpa.kernel.OpCallbacks)

getLockRows

protected List<SQLBuffer> getLockRows(DBDictionary dict,
                                      Object id,
                                      ClassMapping mapping,
                                      JDBCFetchConfiguration fetch,
                                      SQLFactory factory)

getStore

public JDBCStore getStore()

prepareStatement

protected PreparedStatement prepareStatement(Connection conn,
                                             SQLBuffer sql)
                                      throws SQLException
This method is to provide override for non-JDBC or JDBC-like implementation of preparing statement.

Throws:
SQLException

executeQuery

protected ResultSet executeQuery(Connection conn,
                                 PreparedStatement stmnt,
                                 SQLBuffer sql)
                          throws SQLException
This method is to provide override for non-JDBC or JDBC-like implementation of executing query.

Throws:
SQLException

checkLock

protected void checkLock(ResultSet rs,
                         OpenJPAStateManager sm,
                         int timeout)
                  throws SQLException
This method is to provide override for non-JDBC or JDBC-like implementation of checking lock from the result set.

Throws:
SQLException


Copyright © 2006-2010 Apache Software Foundation. All Rights Reserved.