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;
    }
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 ; }
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.