org.jasig.cas.ticket.registry.support
Class JdbcLockingStrategy

java.lang.Object
  extended by org.jasig.cas.ticket.registry.support.JdbcLockingStrategy
All Implemented Interfaces:
LockingStrategy, org.springframework.beans.factory.InitializingBean

public class JdbcLockingStrategy
extends java.lang.Object
implements LockingStrategy, org.springframework.beans.factory.InitializingBean

Locking strategy that uses database storage for lock state that has the following properties:

This class requires a backing database table to exist based on the following template:

 CREATE TABLE LOCKS (
   APPLICATION_ID VARCHAR(50) NOT NULL,
   UNIQUE_ID VARCHAR(50) NULL,
   EXPIRATION_DATE TIMESTAMP NULL
 );
 ALTER TABLE LOCKS ADD CONSTRAINT LOCKS_PK
 PRIMARY KEY (APPLICATION_ID);
 

Note that table and column names can be controlled through instance properties, but the create table script above is consistent with defaults.

Since:
3.3.6
Version:
$Revision: 47522 $
Author:
Marvin S. Addison

Nested Class Summary
static class JdbcLockingStrategy.DatabasePlatform
          Supported database platforms provides support for platform-specific behavior such as locking semantics.
 
Field Summary
static int DEFAULT_LOCK_TIMEOUT
          Default lock timeout is 1 hour
 
Constructor Summary
JdbcLockingStrategy()
           
 
Method Summary
 boolean acquire()
          Attempt to acquire the lock.
 void afterPropertiesSet()
          
 void release()
          Release the lock if held.
 void setApplicationId(java.lang.String id)
           
 void setApplicationIdColumnName(java.lang.String name)
           
 void setDataSource(javax.sql.DataSource dataSource)
           
 void setExpirationDateColumnName(java.lang.String name)
           
 void setLockTimeout(int seconds)
           
 void setPlatform(JdbcLockingStrategy.DatabasePlatform platform)
           
 void setTableName(java.lang.String name)
           
 void setUniqueId(java.lang.String id)
           
 void setUniqueIdColumnName(java.lang.String name)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_LOCK_TIMEOUT

public static final int DEFAULT_LOCK_TIMEOUT
Default lock timeout is 1 hour

See Also:
Constant Field Values
Constructor Detail

JdbcLockingStrategy

public JdbcLockingStrategy()
Method Detail

setUniqueId

public void setUniqueId(java.lang.String id)
Parameters:
id - Identifier used to identify this instance in a row of the lock table. Must be unique across all clients vying for locks for a given application ID.

setApplicationId

public void setApplicationId(java.lang.String id)
Parameters:
id - Application identifier that identifies a row in the lock table for which multiple clients vie to hold the lock.

setLockTimeout

public void setLockTimeout(int seconds)
Parameters:
seconds - Maximum amount of time in seconds lock may be held.

setTableName

public void setTableName(java.lang.String name)
Parameters:
name - Name of database table holding locks.

setApplicationIdColumnName

public void setApplicationIdColumnName(java.lang.String name)
Parameters:
name - Name of database column that stores application ID.

setUniqueIdColumnName

public void setUniqueIdColumnName(java.lang.String name)
Parameters:
name - Name of database column that stores unique ID.

setExpirationDateColumnName

public void setExpirationDateColumnName(java.lang.String name)
Parameters:
name - Name of database column that stores lock expiration date.

setDataSource

public void setDataSource(javax.sql.DataSource dataSource)
Parameters:
dataSource - JDBC data source.

setPlatform

public void setPlatform(JdbcLockingStrategy.DatabasePlatform platform)
Parameters:
platform - Database platform that indicates when special syntax is needed for database operations.

afterPropertiesSet

public void afterPropertiesSet()

Specified by:
afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean

acquire

@Transactional
public boolean acquire()
Description copied from interface: LockingStrategy
Attempt to acquire the lock.

Specified by:
acquire in interface LockingStrategy
Returns:
True if lock was successfully acquired, false otherwise.
See Also:
LockingStrategy.acquire()

release

@Transactional
public void release()
Description copied from interface: LockingStrategy
Release the lock if held. If the lock is not held nothing is done.

Specified by:
release in interface LockingStrategy
See Also:
LockingStrategy.release()


Copyright © 2004-2010 Java Architectures Special Interest Group. All Rights Reserved.