docs: private Entry findAfter(Object key, Transaction transaction)
                      throws ObjectManagerException
      {
          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
              trace.entry(this, cclass
                          , "findAfter",
                          new Object[] { key, transaction }
                              );
  
          // Find the first entry in the tree, commited or not.
          Entry entry = (Entry) findAfter(key);
  
          // Capture the ObjectManagers unlock sequence number. Anything unlocked after 
          // this will not count. The next lime delimits the point before which additions to 
          // list must committed and unlocked.
          long transactionUnlockPoint = Long.MAX_VALUE; // All transactions end before this.
          if (transaction != null)
              transactionUnlockPoint = transaction.getTransactionUnlockSequence();
  
          // Ascend the tree looking for one that is visible to the transaction.
          while (entry != null) {
              if (entry.state == Entry.stateAdded)
                  if (!entry.wasLocked(transactionUnlockPoint))
                      break;// Found one.
              if ((entry.state == Entry.stateToBeAdded)
                  && entry.lockedBy(transaction))
                  break;
              entry = (Entry) successor(entry);
          } // while (entry != null).
  
          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
              trace.exit(this, cclass
                         , "findAfter"
                         , new Object[] { entry }
                              );
          return entry;
      }