Coverage Report - org.odmg.Transaction
 
Classes in this File Line Coverage Branch Coverage Complexity
Transaction
N/A
N/A
1
 
 1  
 package org.odmg;
 2  
 
 3  
 
 4  
 
 5  
 /**
 6  
 
 7  
  * This interfaces provides the operations necessary to perform database transactions.
 8  
 
 9  
  * All access, creation, and modification of persistent objects and their fields
 10  
 
 11  
  * must be done within a transaction. Before performing any database operations,
 12  
 
 13  
  * a thread must explicitly create a transaction object or associate itself with
 14  
 
 15  
  * an existing transaction object (by calling <code>join</code>),
 16  
 
 17  
  * and that transaction must be open (through a call to <code>begin</code>).
 18  
 
 19  
  * All subsequent operations by the thread, including reads, writes, and lock
 20  
 
 21  
  * acquisitions, are done under the thread�s current transaction.
 22  
 
 23  
  * <p>
 24  
 
 25  
  * A thread may only operate on its current transaction. For example,
 26  
 
 27  
  * a <code>TransactionNotInProgressException</code> is thrown if a thread attempts
 28  
 
 29  
  * to begin, commit, checkpoint, or abort a transaction prior to joining itself
 30  
 
 31  
  * to that transaction.
 32  
 
 33  
  * <p>
 34  
 
 35  
  * A transaction is either <i>open</i> or <i>closed</i>. A transaction is open if a call
 36  
 
 37  
  * has been made to <code>begin</code>, but no call has been made to <code>commit</code> or
 38  
 
 39  
  * <code>abort</code>. Once <code>commit</code> or <code>abort</code> is called,
 40  
 
 41  
  * the transaction is closed. The method <code>isOpen</code> can be called to
 42  
 
 43  
  * determine the state of the transaction.
 44  
 
 45  
  * <p>
 46  
 
 47  
  * Read locks are implicitly obtained on objects as they are accessed.
 48  
 
 49  
  * Write locks are implicitly obtained as objects are modified.
 50  
 
 51  
  * <code>Transaction</code> objects are transient, they cannot be stored in the database.
 52  
 
 53  
  * @author        David Jordan (as Java Editor of the Object Data Management Group)
 54  
 
 55  
  * @version ODMG 3.0
 56  
 
 57  
  * @see TransactionNotInProgressException
 58  
 
 59  
  */
 60  
 
 61  
 
 62  
 
 63  
 public interface Transaction
 64  
 
 65  
 {
 66  
 
 67  
     /**
 68  
 
 69  
      * Attach the caller's thread to this <code>Transaction</code> and detach the thread
 70  
 
 71  
      * from any former <code>Transaction</code> the thread may have been associated with.
 72  
 
 73  
      */
 74  
 
 75  
     public void join();
 76  
 
 77  
 
 78  
 
 79  
     /**
 80  
 
 81  
      * Detach the caller's thread from this <code>Transaction</code>, but do not attach
 82  
 
 83  
      * the thread to another <code>Transaction</code>.
 84  
 
 85  
      */
 86  
 
 87  
     public void leave();
 88  
 
 89  
 
 90  
 
 91  
     /**
 92  
 
 93  
      * Start a transaction.
 94  
 
 95  
      * Calling <code>begin</code> multiple times on the same transaction object,
 96  
 
 97  
      * without an intervening call to <code>commit</code> or <code>abort</code>,
 98  
 
 99  
      * causes the exception <code>TransactionInProgressException</code> to be thrown
 100  
 
 101  
      * on the second and subsequent calls. Operations executed before a transaction
 102  
 
 103  
      * has been opened, or before reopening after a transaction is aborted or committed,
 104  
 
 105  
      * have undefined results;
 106  
 
 107  
      * these may throw a <code>TransactionNotInProgressException</code> exception.
 108  
 
 109  
      */
 110  
 
 111  
     public void begin();
 112  
 
 113  
 
 114  
 
 115  
     /**
 116  
 
 117  
      * Determine whether the transaction is open or not.
 118  
 
 119  
      * A transaction is open if a call has been made to <code>begin</code>,
 120  
 
 121  
      * but a subsequent call to either <code>commit</code> or <code>abort</code>
 122  
 
 123  
      * has not been made.
 124  
 
 125  
      * @return True if the transaction is open, otherwise false.
 126  
 
 127  
      */
 128  
 
 129  
     public boolean isOpen();
 130  
 
 131  
 
 132  
 
 133  
     /**
 134  
 
 135  
      * Commit and close the transaction.
 136  
 
 137  
      * Calling <code>commit</code> commits to the database all persistent object
 138  
 
 139  
      * modifications within the transaction and releases any locks held by the transaction.
 140  
 
 141  
      * A persistent object modification is an update of any field of an existing
 142  
 
 143  
      * persistent object, or an update or creation of a new named object in the database.
 144  
 
 145  
      * If a persistent object modification results in a reference from an existing
 146  
 
 147  
      * persistent object to a transient object, the transient object is moved to the
 148  
 
 149  
      * database, and all references to it updated accordingly. Note that the act of
 150  
 
 151  
      * moving a transient object to the database may create still more persistent
 152  
 
 153  
      * references to transient objects, so its referents must be examined and moved as well.
 154  
 
 155  
      * This process continues until the database contains no references to transient objects,
 156  
 
 157  
      * a condition that is guaranteed as part of transaction commit.
 158  
 
 159  
      * Committing a transaction does not remove from memory transient objects created
 160  
 
 161  
      * during the transaction
 162  
 
 163  
      */
 164  
 
 165  
     public void commit();
 166  
 
 167  
 
 168  
 
 169  
     /**
 170  
 
 171  
      * Abort and close the transaction.
 172  
 
 173  
      * Calling abort abandons all persistent object modifications and releases the
 174  
 
 175  
      * associated locks.
 176  
 
 177  
      * Aborting a transaction does not restore the state of modified transient objects
 178  
 
 179  
      */
 180  
 
 181  
     public void abort();
 182  
 
 183  
 
 184  
 
 185  
     /**
 186  
 
 187  
      * Commit the transaction, but reopen the transaction, retaining all locks.
 188  
 
 189  
      * Calling <code>checkpoint</code> commits persistent object modifications made
 190  
 
 191  
      * within the transaction since the last checkpoint to the database.
 192  
 
 193  
      * The transaction retains all locks it held on those objects at the time the
 194  
 
 195  
      * checkpoint was invoked.
 196  
 
 197  
      */
 198  
 
 199  
     public void checkpoint();
 200  
 
 201  
 
 202  
 
 203  
     /**
 204  
 
 205  
      * Read lock mode.
 206  
 
 207  
      */
 208  
 
 209  
     public static final int READ = 1;
 210  
 
 211  
 
 212  
 
 213  
     /**
 214  
 
 215  
      * Upgrade lock mode.
 216  
 
 217  
      */
 218  
 
 219  
     public static final int UPGRADE = 2;
 220  
 
 221  
 
 222  
 
 223  
     /**
 224  
 
 225  
      * Write lock mode.
 226  
 
 227  
      */
 228  
 
 229  
     public static final int WRITE = 4;
 230  
 
 231  
 
 232  
 
 233  
     /**
 234  
 
 235  
      * Upgrade the lock on the given object to the given lock mode.
 236  
 
 237  
      * The call has no effect if the object's current lock is already at or above
 238  
 
 239  
      * that level of lock mode.
 240  
 
 241  
      * @param        obj        The object to acquire a lock on.
 242  
 
 243  
      * @param        lockMode        The lock mode to acquire. The lock modes are <code>READ</code>,
 244  
 
 245  
      * <code>UPGRADE</code>, and <code>WRITE</code>.
 246  
 
 247  
      * @exception LockNotGrantedException        Is thrown if the given lock mode could not be acquired.
 248  
 
 249  
      */
 250  
 
 251  
     public void lock(Object obj, int lockMode)
 252  
 
 253  
             throws LockNotGrantedException;
 254  
 
 255  
 
 256  
 
 257  
     /**
 258  
 
 259  
      * Upgrade the lock on the given object to the given lock mode.
 260  
 
 261  
      * Method <code>tryLock</code> is the same as <code>lock</code> except it returns
 262  
 
 263  
      * a boolean indicating whether the lock was granted instead of generating an exception.
 264  
 
 265  
      * @param        obj        The object to acquire a lock on.
 266  
 
 267  
      * @param        lockMode        The lock mode to acquire. The lock modes are <code>READ</code>,
 268  
 
 269  
      * <code>UPGRADE</code>, and <code>WRITE</code>.
 270  
 
 271  
      * @return        True if the lock has been acquired, otherwise false.
 272  
 
 273  
      */
 274  
 
 275  
     public boolean tryLock(Object obj, int lockMode);
 276  
 
 277  
 
 278  
 
 279  
 }
 280