Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler Class Reference

Inheritance diagram for org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler:

Inheritance graph
[legend]
Collaboration diagram for org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 RAIDb1PessimisticTransactionLevelScheduler ()
final void scheduleReadRequest (SelectRequest request) throws SQLException
final void readCompletedNotify (SelectRequest request)
void scheduleNonSuspendedWriteRequest (AbstractWriteRequest request) throws SQLException
final synchronized void notifyWriteCompleted (AbstractWriteRequest request)
String getXmlImpl ()

Protected Member Functions

final void commitTransaction (long transactionId)
final void rollbackTransaction (long transactionId)

Package Attributes

TransactionExclusiveLock lock = new TransactionExclusiveLock()

Detailed Description

This scheduler provides transaction level scheduling for RAIDb-1 controllers. Each write takes a lock on the whole database. All following writes are blocked until the transaction of the first write completes.

Author:
Emmanuel Cecchet
Version:
1.0

Definition at line 46 of file RAIDb1PessimisticTransactionLevelScheduler.java.


Constructor & Destructor Documentation

org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler.RAIDb1PessimisticTransactionLevelScheduler  ) 
 

Creates a new Pessimistic Transaction Level Scheduler

Definition at line 71 of file RAIDb1PessimisticTransactionLevelScheduler.java.

00072   {
00073     super(RAIDbLevels.RAIDb1, ParsingGranularities.NO_PARSING);
00074   }


Member Function Documentation

final void org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler.commitTransaction long  transactionId  )  [protected, virtual]
 

See also:
org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.commitTransaction(long)

Implements org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.

Definition at line 159 of file RAIDb1PessimisticTransactionLevelScheduler.java.

00160   {
00161     if (lock.isLocked())
00162       releaseLock(transactionId);
00163     // else this was an empty or read-only transaction
00164   }

String org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler.getXmlImpl  )  [virtual]
 

See also:
org.objectweb.cjdbc.controller.scheduler.AbstractScheduler#getXmlImpl()

Implements org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.

Definition at line 208 of file RAIDb1PessimisticTransactionLevelScheduler.java.

00209   {
00210     return "<" + DatabasesXmlTags.ELT_RAIDb1Scheduler + " "
00211         + DatabasesXmlTags.ATT_level + "=\""
00212         + DatabasesXmlTags.VAL_pessimisticTransaction + "\"/>";
00213   }

final synchronized void org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler.notifyWriteCompleted AbstractWriteRequest  request  )  [virtual]
 

See also:
org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.notifyWriteCompleted(AbstractWriteRequest)

Implements org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.

Definition at line 143 of file RAIDb1PessimisticTransactionLevelScheduler.java.

References org.objectweb.cjdbc.common.sql.AbstractRequest.getTransactionId(), org.objectweb.cjdbc.common.sql.AbstractRequest.isAutoCommit, and org.objectweb.cjdbc.common.sql.AbstractWriteRequest.isCreate().

00145   {
00146     // Requests outside transaction delimiters must release the lock
00147     // as soon as they have executed
00148     if (request.isAutoCommit() && (!request.isCreate()))
00149       releaseLock(request.getTransactionId());
00150   }

final void org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler.readCompletedNotify SelectRequest  request  )  [virtual]
 

See also:
org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.readCompletedNotify(SelectRequest)

Implements org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.

Definition at line 98 of file RAIDb1PessimisticTransactionLevelScheduler.java.

00099   {
00100   }

final void org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler.rollbackTransaction long  transactionId  )  [protected, virtual]
 

See also:
org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.rollbackTransaction(long)

Implements org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.

Definition at line 169 of file RAIDb1PessimisticTransactionLevelScheduler.java.

00170   {
00171     if (lock.isLocked())
00172       releaseLock(transactionId);
00173     // else this was an empty or read-only transaction
00174   }

void org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler.scheduleNonSuspendedWriteRequest AbstractWriteRequest  request  )  throws SQLException [virtual]
 

Note that CREATE statements are not synchronized.

See also:
org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.scheduleNonSuspendedWriteRequest(AbstractWriteRequest)

Implements org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.

Definition at line 107 of file RAIDb1PessimisticTransactionLevelScheduler.java.

References org.objectweb.cjdbc.common.log.Trace.debug(), org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.getPendingWrites(), org.objectweb.cjdbc.common.log.Trace.isDebugEnabled(), org.objectweb.cjdbc.common.log.Trace.isWarnEnabled(), and org.objectweb.cjdbc.common.log.Trace.warn().

00109   {
00110     if (request.isCreate())
00111     {
00112       synchronized (this)
00113       {
00114         request.setId(requestId++);
00115       }
00116       return;
00117     }
00118 
00119     if (lock.acquire(request))
00120     {
00121       synchronized (this)
00122       {
00123         request.setId(requestId++);
00124       }
00125       if (logger.isDebugEnabled())
00126         logger.debug("Request " + request.getId() + " scheduled for write ("
00127             + getPendingWrites() + " pending writes)");
00128     }
00129     else
00130     {
00131       if (logger.isWarnEnabled())
00132         logger.warn("Request " + request.getId() + " timed out ("
00133             + request.getTimeout() + " s)");
00134       throw new SQLException("Timeout (" + request.getTimeout()
00135           + ") for request: "
00136           + request.getSQLShortForm(Constants.SQL_SHORT_FORM_LENGTH));
00137     }
00138   }

final void org.objectweb.cjdbc.controller.scheduler.raidb1.RAIDb1PessimisticTransactionLevelScheduler.scheduleReadRequest SelectRequest  request  )  throws SQLException [virtual]
 

Additionally to scheduling the request, this method replaces the SQL Date macros such as now() with the current date.

See also:
org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.scheduleReadRequest(SelectRequest)

Implements org.objectweb.cjdbc.controller.scheduler.AbstractScheduler.

Definition at line 86 of file RAIDb1PessimisticTransactionLevelScheduler.java.

00088   {
00089     synchronized (this)
00090     {
00091       request.setId(requestId++);
00092     }
00093   }


The documentation for this class was generated from the following file:
Generated on Mon Apr 11 22:04:36 2005 for C-JDBC by  doxygen 1.3.9.1