Search in sources :

Example 1 with FutureAdapter

use of com.alibaba.dubbo.rpc.protocol.dubbo.FutureAdapter in project dubbo by alibaba.

the class FutureFilter method asyncCallback.

private void asyncCallback(final Invoker<?> invoker, final Invocation invocation) {
    Future<?> f = RpcContext.getContext().getFuture();
    if (f instanceof FutureAdapter) {
        ResponseFuture future = ((FutureAdapter<?>) f).getFuture();
        future.setCallback(new ResponseCallback() {

            public void done(Object rpcResult) {
                if (rpcResult == null) {
                    logger.error(new IllegalStateException("invalid result value : null, expected " + Result.class.getName()));
                    return;
                }
                ///must be rpcResult
                if (!(rpcResult instanceof Result)) {
                    logger.error(new IllegalStateException("invalid result type :" + rpcResult.getClass() + ", expected " + Result.class.getName()));
                    return;
                }
                Result result = (Result) rpcResult;
                if (result.hasException()) {
                    fireThrowCallback(invoker, invocation, result.getException());
                } else {
                    fireReturnCallback(invoker, invocation, result.getValue());
                }
            }

            public void caught(Throwable exception) {
                fireThrowCallback(invoker, invocation, exception);
            }
        });
    }
}
Also used : FutureAdapter(com.alibaba.dubbo.rpc.protocol.dubbo.FutureAdapter) ResponseCallback(com.alibaba.dubbo.remoting.exchange.ResponseCallback) ResponseFuture(com.alibaba.dubbo.remoting.exchange.ResponseFuture) Result(com.alibaba.dubbo.rpc.Result)

Aggregations

ResponseCallback (com.alibaba.dubbo.remoting.exchange.ResponseCallback)1 ResponseFuture (com.alibaba.dubbo.remoting.exchange.ResponseFuture)1 Result (com.alibaba.dubbo.rpc.Result)1 FutureAdapter (com.alibaba.dubbo.rpc.protocol.dubbo.FutureAdapter)1