docs: @Override
      public Object findAndFault(Object key)
                      throws FaultException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.entry(tc, "findAndFault", key);
  
          Bucket bucket = getOrCreateBucketForKey(key); // d739870
          Element element;
          Object object = null;
  
          synchronized (bucket)
          {
              element = bucket.findByKey(key);
  
              if (element != null)
              {
                  // We found the object in the bucket; do not pin for performance,
                  // update the LRU data, and return it to the caller        d140003.5
                  element.accessedSweep = numSweeps;
  
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                      Tr.exit(tc, "findAndFault : found in cache");
                  return element.object;
  
              } else if (faultStrategy == null)
              {
                  // We could not find the object and no FaultStrategy is
                  // installed.
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                      Tr.exit(tc, "findAndFault : not in cache : no FaultStrategy");
                  return null;
              }
  
              // We could not find the object in the bucket: we'll notify
              // the FaultStrategy so that it can attempt to fault the
              // object in. We'll hold the lock on the bucket while we do this
  
              try
              {
                  // Notify the FaultStrategy and see if it is able to fault in the
                  // object
  
                  object = faultStrategy.faultOnKey(this, key);
  
                  if (object != null)
                  {
                      // The object was faulted in, and must be inserted into
                      // the cache.
  
                      // Insert the object.
                      element = bucket.insertByKey(key, object);
  
                      // Just update the LRU data - do not pin.               d140003.5
                      element.accessedSweep = numSweeps;
                  }
              } catch (Exception e)
              {
                  FFDCFilter.processException(e, CLASS_NAME + ".findAndFault",
                                              "417", this);
                  throw new FaultException(e, key.toString()); //PK59118
              }
          }
  
          if (object != null) {
              synchronized (this) {
                  // ACK! This is going to be a choke point
                  numObjects++;
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.exit(tc, "findAndFault : not in cache : faulted");
  
          return object;
      }