code: public void preDelete(Transaction transaction)
                      throws ObjectManagerException
      {
          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
              trace.entry(this,
                          cclass,
                          "preDelete",
                          new Object[] { transaction });
  
          // Whoever is calling us ought to hold a lock on the ManagedObject.
          testState(nextStateForDelete); // Test the state change.
          // We take a lock, only the owning transaction may now make non optimistic updates and 
          // all of those operations are now synchronized on the transaction. 
          // TODO Should have a variant of lock that does not create a before image.
          lock(transaction.internalTransaction.getTransactionLock()); // Make sure we are allowed to delete. 
          // Bump the updateSequence to indicate the current version of the ManagedObject.
          // The caller is protected by the transaction lock.
          // The updateSequence is only meaningful while that lock is held.
          updateSequence++;
  
          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
              trace.exit(this
                         , cclass
                         , "preDelete"
                              );
      }
docs: Driven when the object is deleted from an object store within a transaction.
  
  A subclass may override this method to do its own delete processing defore the log
  has been written.
  
  @param transaction controling the deletion.
  @throws ObjectManagerException