code: public DistributedObjectFuture getOrCreateProxyFuture(String name, boolean publishEvent, boolean initialize) {
          DistributedObjectFuture proxyFuture = proxies.get(name);
          if (proxyFuture == null) {
              if (!proxyService.nodeEngine.isRunning()) {
                  throw new HazelcastInstanceNotActiveException();
              }
              proxyFuture = createProxy(name, publishEvent, initialize);
              if (proxyFuture == null) {
                  return getOrCreateProxyFuture(name, publishEvent, initialize);
              }
          }
          return proxyFuture;
      }
docs: Retrieves a DistributedObjectFuture or creates it if it is not available.
  If {@code initialize} is false and DistributedObject implements {@link InitializingObject},
  {@link InitializingObject#initialize()} will be called before {@link DistributedObjectFuture#get()} returns.
  
  @param name         The name of the DistributedObject proxy object to retrieve or create.
  @param publishEvent true if a DistributedObjectEvent should be fired.
  @param initialize   true if the DistributedObject proxy object should be initialized.