All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bytex.snamp.cluster.HazelcastSharedObject Maven / Gradle / Ivy

package com.bytex.snamp.cluster;

import com.hazelcast.core.DistributedObject;
import com.hazelcast.core.HazelcastInstance;

import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiFunction;

/**
 * Represents shared object based on Hazelcast distributed object.
 */
abstract class HazelcastSharedObject extends GridSharedObject {
    private final AtomicReference distributedObject;

    HazelcastSharedObject(final HazelcastInstance hazelcast, final String objectName, final BiFunction objectProvider) {
        distributedObject = new AtomicReference<>(objectProvider.apply(hazelcast, objectName));
    }

    final S getDistributedObject() {
        final S result = distributedObject.get();
        if (result == null)
            throw objectIsDestroyed();
        else
            return result;
    }

    @Override
    public final String getName() {
        return getDistributedObject().getName();
    }

    @Override
    final void destroy() {
        final S obj = distributedObject.getAndSet(null);
        if (obj != null)
            obj.destroy();
    }
}