code: public void performRecovery(ObjectManagerState objectManagerState)
                      throws ObjectManagerException {
          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
              trace.entry(this,
                          cclass,
                          "performRecovery",
                          new Object[] { objectManagerState, logicalUnitOfWork, new Integer(transactionState), token });
  
          // Delete the ManagedObject again using its original Transaction.
          Transaction transactionForRecovery = objectManagerState.getTransaction(logicalUnitOfWork);
  
          ManagedObject existingManagedObject = token.getManagedObject();
          if (existingManagedObject == null)
          {
              // The object may have already been deleted from the ObjectStore,
              // so create a dummy object to keep the transaction happy. 
              // The Token will have the ObjecStore and storedObjectIdentifier so the the correct delete in the
              // ObjectStore can take place. 
              DummyManagedObject dummyManagedObject = new DummyManagedObject("Created by TransactionDeleteLogRecord.performRecovery()");
              existingManagedObject = token.setManagedObject(dummyManagedObject);
              existingManagedObject.state = ManagedObject.stateReady;
          } // if (existingManagedObject == null).   
  
          // Redo the delete. 
          transactionForRecovery.delete(existingManagedObject);
          // No need to reset the transaction state because Delete can only be executed before
          // the transaction is prepared.
          // transactionForRecovery.internalTransaction.resetState(transactionState);
  
          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
              trace.exit(this, cclass, "performRecovery");
      }
docs: Called to perform recovery action during a warm start of the ObjectManager.
  
  @param objectManagerState of the ObjectManager performing recovery.
  @throws ObjectManagerException