docs: public void retrieveProxyReference(Object obj, ClassDescriptor cld, ObjectReferenceDescriptor rds, boolean forced)
      {
          PersistentField refField;
          Object refObj = null;
  
              pb.getInternalCache().enableMaterializationCache();
              try
              {
                  Identity id = getReferencedObjectIdentity(obj, rds, cld);
                  if (id != null){
                      refObj = pb.createProxy(rds.getItemClass(), id);
                  }
                  refField = rds.getPersistentField();
                  refField.set(obj, refObj);
  
                  if ((refObj != null) && prefetchProxies
                          && (m_retrievalTasks != null)
                          && (rds.getProxyPrefetchingLimit() > 0))
                  {
                      IndirectionHandler handler = ProxyHelper.getIndirectionHandler(refObj);
  
                      if ((handler != null)
                              && addRetrievalTask(obj, rds))
                      {
                          new PBMaterializationListener(obj, m_retrievalTasks,
                                  rds, rds.getProxyPrefetchingLimit());
                      }
                  }
                  
  
                  pb.getInternalCache().disableMaterializationCache();
              }
              catch(RuntimeException e)
              {
                  pb.getInternalCache().doLocalClear();
                  throw e;
              }
          
      }