import com.hazelcast.spi.InvocationBuilder;
import com.hazelcast.spi.NodeEngine;
import com.hazelcast.util.ExceptionUtil;
import java.util.concurrent.Future;
public class CounterProxy implements Counter {
private final NodeEngine nodeEngine;
private final String objectId;
CounterProxy(String objectId, NodeEngine nodeEngine) {
this.nodeEngine = nodeEngine;
this.objectId = objectId;
}
@Override
public String getPartitionKey() {
return null;
}
@Override
public String getServiceName() {
return CounterService.NAME;
}
@Override
public String getName() {
return objectId;
}
@Override
public void await(int value) throws InterruptedException {
AwaitOperation operation = new AwaitOperation(objectId, value);
int partitionId = nodeEngine.getPartitionService().getPartitionId(objectId);
InvocationBuilder builder = nodeEngine.getOperationService()
.createInvocationBuilder(CounterService.NAME, operation, partitionId);
try {
Future future = builder.invoke();
future.get();
} catch (Exception e) {
throw ExceptionUtil.rethrow(e);
}
}
@Override
public int inc(int amount) {
IncOperation operation = new IncOperation(objectId, amount);
int partitionId = nodeEngine.getPartitionService().getPartitionId(objectId);
InvocationBuilder builder = nodeEngine.getOperationService()
.createInvocationBuilder(CounterService.NAME, operation, partitionId);
try {
Future<Integer> future = builder.invoke();
return future.get();
} catch (Exception e) {
throw ExceptionUtil.rethrow(e);
}
}
@Override
public void destroy() {
}
}