package org.fishwife.jrugged.spring;
import java.util.concurrent.Callable;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.util.concurrent.ListenableFutureCallback;
import org.springframework.util.concurrent.SettableListenableFuture;
public class RequestCounter extends org.fishwife.jrugged.RequestCounter implements ServiceWrapper {
@Override
public <T> ListenableFuture<T> invokeAsync(Callable<ListenableFuture<T>> callable) throws Exception {
final SettableListenableFuture<T> response = new SettableListenableFuture<T>();
ListenableFutureCallback<T> callback = new ListenableFutureCallback<T>() {
@Override
public void onSuccess(T result) {
succeed();
response.set(result);
}
@Override
public void onFailure(Throwable ex) {
fail();
response.setException(ex);
}
};
callable.call().addCallback(callback);
return response;
}
}