docs: public boolean readLock(TransactionImpl tx, Object obj)
      {
          LockEntry writer = getWriter(obj);
          Collection readers = getReaders(obj);
          if (writer == null)
          {
              // only one reader at a time
              if (readers.size() == 0)
              {
                  if (addReader(tx, obj))
                  {
                      readers = getReaders(obj);
                      if (readers.size() == 1)
                      {
                          return true;
                      }
                      else
                      {
                          removeReader(tx, obj);
                          return readLock(tx, obj);
                      }
                  }
                  else
                      return readLock(tx, obj);
              }
              else if ((readers.size() == 1) && (((LockEntry) readers.iterator().next()).isOwnedBy(tx)))
              {
                  // I'm the reader, thus I am allowed to read even more !
                  return true;
              }
          }
          else if (writer.isOwnedBy(tx))
          {
              return true;    // If I'm the writer, I can read.
          }
  
          return false;
      }