org.apache.derby.iapi.store.raw.xact
Class RawTransaction

java.lang.Object
  extended byjava.util.Observable
      extended byorg.apache.derby.iapi.store.raw.xact.RawTransaction
All Implemented Interfaces:
Transaction
Direct Known Subclasses:
Xact

public abstract class RawTransaction
extends java.util.Observable
implements Transaction

RawTransaction is the form of Transaction used within the raw store. This allows the break down of RawStore functionality into (at least) three modules (Transactions, Data, Log) without exposing internal information on the external interface.

The transaction will notify any Observer's just before the transaction is committed, aborted or a rollback to savepoint occurs. The argument passed to the update() method of the Observer's will be one of

The observer's must perform a value equality check (equals()) on the update arg to see why it is being notified.

See Also:
Observer

Field Summary
static java.lang.Integer ABORT
           
static java.lang.Integer COMMIT
           
static java.lang.Integer LOCK_ESCALATE
           
protected  StandardException observerException
           
static java.lang.Integer SAVEPOINT_ROLLBACK
           
 
Fields inherited from class java.util.Observable
 
Fields inherited from interface org.apache.derby.iapi.store.raw.Transaction
KEEP_LOCKS, RELEASE_LOCKS, XA_OK, XA_RDONLY
 
Constructor Summary
RawTransaction()
           
 
Method Summary
abstract  void addUpdateTransaction(int transactionStatus)
          Add this raw transaction on to the list of update transaction
 void checkLogicalOperationOk()
          Check to see if a logical operation is allowed by this transaction, throws a TransactionExceotion if it isn't.
abstract  void checkpointInRollForwardRecovery(LogInstant cinstant, long redoLWM)
          redo a checkpoint during rollforward recovery
abstract  long[] getCacheStats(java.lang.String cacheName)
          Get cache statistics for the specified cache
abstract  DataFactory getDataFactory()
          Get the data factory to be used during this transaction.
abstract  LogInstant getFirstLogInstant()
          Get the log instant for the first log record written by this transaction.
abstract  GlobalTransactionId getGlobalId()
          Get the shortId of this transaction.
abstract  TransactionId getId()
          Get the shortId of this transaction.
abstract  LogInstant getLastLogInstant()
          Get the log instant for the last log record written by this transaction.
abstract  LockFactory getLockFactory()
          Get the lock factory to be used during this transaction.
abstract  DynamicByteArrayOutputStream getLogBuffer()
          Get the log buffer to be used during this transaction.
abstract  boolean handlesPostTerminationWork()
          Can this transaction handles post termination work
abstract  boolean inAbort()
          Is the transaction in the middle of an abort.
abstract  boolean inRollForwardRecovery()
          Retunrs true if the transaction is part of rollforward recovery
abstract  void logAndUndo(Compensation compensation, LogInstant undoInstant, LimitObjectInput in)
          Log a compensation operation and then action it in the context of this transaction.
 void notifyObservers(java.lang.Object arg)
          Allow my users to notigy my observers.
abstract  RawContainerHandle openDroppedContainer(ContainerKey containerId, LockingPolicy locking)
          Open a container that may be dropped - use only by logging and recovery.
abstract  void prepareTransaction()
          Change the state of transaction in table to prepare.
 boolean recoveryRollbackFirst()
          Return true if this transaction should be rolled back first in recovery.
abstract  void recoveryTransaction()
          Make this transaction aware that it is being used by recovery
abstract  void reCreateContainerForLoadTran(long segmentId, long containerId, ByteArray containerInfo)
          Recreate a container during load tran - use only by media recovery.
abstract  void removeUpdateTransaction()
          Remove this raw transaction from the list of update transaction
abstract  void reprepare()
          During recovery re-prepare a transaction.
abstract  void resetCacheStats(java.lang.String cacheName)
          Reset the cache statistics for the specified cache
abstract  void setFirstLogInstant(LogInstant instant)
          Set the log instant for the first log record written by this transaction.
abstract  void setLastLogInstant(LogInstant instant)
          Set the log instant for the last log record written by this transaction.
 void setObserverException(StandardException se)
          Allow an Observer to indicate an exception to the transaction that is raised in its update() method.
abstract  void setTransactionId(GlobalTransactionId id, TransactionId shortId)
          Set the transaction Ids (Global and internal) of this transaction
abstract  void setTransactionId(Loggable beginXact, TransactionId shortId)
          Set the transactionId (Global and internal) of this transaction using a log record that contains the Global id
abstract  RawTransaction startNestedTopTransaction()
          Start a nested top transaction.
protected abstract  int statusForBeginXactLog()
          Status that needs to go into the begin transaction log record, if there is one, to help with recovery
protected abstract  int statusForEndXactLog()
          Status that needs to go into the end transaction log record, if there is one, to help with recovery
 
Methods inherited from class java.util.Observable
addObserver, clearChanged, countObservers, deleteObserver, deleteObservers, hasChanged, notifyObservers, setChanged
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.apache.derby.iapi.store.raw.Transaction
abort, addAndLoadStreamContainer, addContainer, addPostCommitWork, addPostTerminationWork, anyoneBlocked, close, commit, commitNoSync, createXATransactionFromLocalTransaction, destroy, dropContainer, dropStreamContainer, getActiveStateTxIdString, getCompatibilitySpace, getContextManager, getDefaultLockingPolicy, getFileHandler, isIdle, isPristine, logAndDo, newLockingPolicy, openContainer, openContainer, openStreamContainer, releaseSavePoint, rollbackToSavePoint, setDefaultLockingPolicy, setSavePoint, setup, xa_commit, xa_prepare, xa_rollback
 

Field Detail

COMMIT

public static final java.lang.Integer COMMIT

ABORT

public static final java.lang.Integer ABORT

SAVEPOINT_ROLLBACK

public static final java.lang.Integer SAVEPOINT_ROLLBACK

LOCK_ESCALATE

public static final java.lang.Integer LOCK_ESCALATE

observerException

protected StandardException observerException
Constructor Detail

RawTransaction

public RawTransaction()
Method Detail

getLockFactory

public abstract LockFactory getLockFactory()
Get the lock factory to be used during this transaction.


getDataFactory

public abstract DataFactory getDataFactory()
Get the data factory to be used during this transaction.


getCacheStats

public abstract long[] getCacheStats(java.lang.String cacheName)
Get cache statistics for the specified cache

Specified by:
getCacheStats in interface Transaction

resetCacheStats

public abstract void resetCacheStats(java.lang.String cacheName)
Reset the cache statistics for the specified cache

Specified by:
resetCacheStats in interface Transaction

getLogBuffer

public abstract DynamicByteArrayOutputStream getLogBuffer()
Get the log buffer to be used during this transaction.


logAndUndo

public abstract void logAndUndo(Compensation compensation,
                                LogInstant undoInstant,
                                LimitObjectInput in)
                         throws StandardException
Log a compensation operation and then action it in the context of this transaction. The CompensationOperation is logged in the transaction log file and then its doMe method is called to perform the required change. This compensation operation will rollback the change that was done by the Loggable Operation at undoInstant.

Parameters:
compensation - the Compensation Operation
undoInstant - the LogInstant of the Loggable Operation this compensation operation is going to roll back
in - optional data for the rollback operation
Throws:
StandardException - Standard cloudscape exception policy
See Also:
Compensation

setTransactionId

public abstract void setTransactionId(GlobalTransactionId id,
                                      TransactionId shortId)
Set the transaction Ids (Global and internal) of this transaction


setTransactionId

public abstract void setTransactionId(Loggable beginXact,
                                      TransactionId shortId)
Set the transactionId (Global and internal) of this transaction using a log record that contains the Global id


getId

public abstract TransactionId getId()
Get the shortId of this transaction. May return null if transactio has no ID.


getGlobalId

public abstract GlobalTransactionId getGlobalId()
Get the shortId of this transaction. May return null if transactio has no ID.

Specified by:
getGlobalId in interface Transaction

addUpdateTransaction

public abstract void addUpdateTransaction(int transactionStatus)
Add this raw transaction on to the list of update transaction


removeUpdateTransaction

public abstract void removeUpdateTransaction()
Remove this raw transaction from the list of update transaction


prepareTransaction

public abstract void prepareTransaction()
Change the state of transaction in table to prepare.


setFirstLogInstant

public abstract void setFirstLogInstant(LogInstant instant)
Set the log instant for the first log record written by this transaction.


getFirstLogInstant

public abstract LogInstant getFirstLogInstant()
Get the log instant for the first log record written by this transaction.


setLastLogInstant

public abstract void setLastLogInstant(LogInstant instant)
Set the log instant for the last log record written by this transaction.


getLastLogInstant

public abstract LogInstant getLastLogInstant()
Get the log instant for the last log record written by this transaction. If the transaction is unclear what its last log instant is, than it may return null.


checkLogicalOperationOk

public void checkLogicalOperationOk()
                             throws StandardException
Check to see if a logical operation is allowed by this transaction, throws a TransactionExceotion if it isn't. This implementation allows logical operations. Transactions that need to disallow logical operations should hide this method.

Throws:
StandardException - Standard Cloudscape error policy,

recoveryRollbackFirst

public boolean recoveryRollbackFirst()
Return true if this transaction should be rolled back first in recovery. This implementation returns false. Transactions that need to rollback first during recovery should hide this method.


reprepare

public abstract void reprepare()
                        throws StandardException
During recovery re-prepare a transaction.

After redo() and undo(), this routine is called on all outstanding in-doubt (prepared) transactions. This routine re-acquires all logical write locks for operations in the xact, and then modifies the transaction table entry to make the transaction look as if it had just been prepared following startup after recovery.

Throws:
StandardException - Standard exception policy.

setObserverException

public void setObserverException(StandardException se)
Allow an Observer to indicate an exception to the transaction that is raised in its update() method.


startNestedTopTransaction

public abstract RawTransaction startNestedTopTransaction()
                                                  throws StandardException
Start a nested top transaction. A nested top transaction behaves exactly like a user transaction. Nested top transaction allow system type work to proceed in a separate transaction to the current user transaction and be committed independently of the user transaction (usually before the user transaction). Only one nested top transaction can be active in a context at any one time. After a commit the transaction may be re-used. A nested top transaction conflicts on the logical locks of its "parent" transaction.

Throws:
StandardException - Standard Cloudscape error policy

openDroppedContainer

public abstract RawContainerHandle openDroppedContainer(ContainerKey containerId,
                                                        LockingPolicy locking)
                                                 throws StandardException
Open a container that may be dropped - use only by logging and recovery. During recovery redo, a log record may refer to a container that has long been dropped. This interface is provided so a dropped container may be opened. If the container has been dropped and is known to be committed, then even if we open the dropped container with forUpdate true, the container will be silently opened as read only. Logging and recovery code always check for committed drop status. Anybody else wanting to use this interface must keep this in mind.

Throws:
StandardException - Standard cloudscape exception policy

reCreateContainerForLoadTran

public abstract void reCreateContainerForLoadTran(long segmentId,
                                                  long containerId,
                                                  ByteArray containerInfo)
                                           throws StandardException
Recreate a container during load tran - use only by media recovery.

Throws:
StandardException - Standard cloudscape exception policy

statusForBeginXactLog

protected abstract int statusForBeginXactLog()
Status that needs to go into the begin transaction log record, if there is one, to help with recovery


statusForEndXactLog

protected abstract int statusForEndXactLog()
Status that needs to go into the end transaction log record, if there is one, to help with recovery


inAbort

public abstract boolean inAbort()
Is the transaction in the middle of an abort.


handlesPostTerminationWork

public abstract boolean handlesPostTerminationWork()
Can this transaction handles post termination work


recoveryTransaction

public abstract void recoveryTransaction()
Make this transaction aware that it is being used by recovery


notifyObservers

public void notifyObservers(java.lang.Object arg)
Allow my users to notigy my observers.


inRollForwardRecovery

public abstract boolean inRollForwardRecovery()
Retunrs true if the transaction is part of rollforward recovery


checkpointInRollForwardRecovery

public abstract void checkpointInRollForwardRecovery(LogInstant cinstant,
                                                     long redoLWM)
                                              throws StandardException
redo a checkpoint during rollforward recovery

Throws:
StandardException


Apache Derby V10.0 Engine Documentation - Copyright © 1997,2004 The Apache Software Foundation or its licensors, as applicable.