Example usage for org.springframework.web.context.request.async DeferredResult setResult

List of usage examples for org.springframework.web.context.request.async DeferredResult setResult

Introduction

In this page you can find the example usage for org.springframework.web.context.request.async DeferredResult setResult.

Prototype

public boolean setResult(T result) 

Source Link

Document

Set the value for the DeferredResult and handle it.

Usage

From source file:comsat.sample.actuator.SampleController.java

private Callable<Map<String, Object>> ollehCallable(final Message message,
        final DeferredResult<Map<String, Object>> optDeferred) throws SuspendExecution {
    return new Callable<Map<String, Object>>() {
        @Override//from ww  w  .j  a v  a 2  s . c o m
        @Suspendable
        public Map<String, Object> call() throws Exception {
            try {
                Fiber.sleep(10);
                Map<String, Object> model = new LinkedHashMap<>();
                model.put("message", message.getValue());
                model.put("title", "Hello Home");
                model.put("date", new Date());
                if (optDeferred != null)
                    optDeferred.setResult(model);
                return model;
            } catch (Throwable t) {
                if (optDeferred != null)
                    optDeferred.setErrorResult(t);
                throw t;
            }
        }
    };
}

From source file:siddur.solidtrust.image.ImageController.java

@RequestMapping(value = "/api/images")
public @ResponseBody DeferredResult<Object> findCarImages(final @RequestParam("id") String id,
        HttpServletRequest request) {/*  w  w  w . j av  a  2 s.c  o  m*/
    final String ip = request.getRemoteHost();
    final String username = request.getAttribute(SolidtrustConstants.CLIENT_ID) + "";
    final int port = request.getLocalPort();
    final String address = request.getLocalAddr();

    final DeferredResult<Object> result = new DeferredResult<>(2000L, "no data");
    log4j.info("Id=" + id + " ,Remaining: " + suspendedImageRequests.remainingCapacity());
    try {
        suspendedImageRequests.add(result);
    } catch (Exception e1) {
        result.setResult("Image service is overload");
        return result;
    }
    result.onCompletion(new Runnable() {

        @Override
        public void run() {
            suspendedImageRequests.remove(result);
        }
    });

    new Thread(new Runnable() {

        @Override
        public void run() {
            AccessItem ai = new AccessItem();
            ai.setIp(ip);
            ai.setUsername(username);
            ai.setService(Product.IMAGES.getId());
            ai.setRequest(id);

            ImageProduct ip = null;
            try {
                ip = findImagesByLicensePlate(id);
            } catch (Exception e) {
                ai.setStatus(-1);
                log4j.error(e.getMessage(), e);
                ai.setResponse(e.getMessage());
                free.save(ai);
                return;
            }

            if (ip == null) {
                ai.setStatus(-1);
                ai.setResponse("Not found:" + id);
                free.save(ai);
                return;
            }

            ai.setResponse(ip.getId() + "");
            free.save(ai);

            ImageProduct resp = addPrefix(port, address, ip);
            result.setResult(resp);

        }
    }).start();

    return result;
}

From source file:co.paralleluniverse.springframework.web.method.support.FiberInvocableHandlerMethod.java

protected Object fiberDispatchInvoke(final Object... args) {
    final Object b = getBean();
    final Method m = getBridgedMethod();
    ReflectionUtils.makeAccessible(m);//from   w ww  .jav  a2 s .  c om

    // Returning deferred even for normal return values, Spring return handlers will take care dynamically based on the actual returned value
    final DeferredResult ret = new DeferredResult();

    // The actual method execution and deferred completion is dispatched to a new fiber
    new Fiber(new SuspendableRunnable() {
        private Object deAsync(final Object o) throws SuspendExecution, Exception {
            if (o instanceof Callable)
                return deAsync(((Callable) o).call());
            else
                return o;
        }

        @Override
        public void run() throws SuspendExecution, InterruptedException {
            try {
                Object originalRet = m.invoke(b, args);
                ret.setResult(deAsync(originalRet));
            } catch (IllegalArgumentException ex) {
                assertTargetBean(m, b, args);
                ret.setErrorResult(
                        new IllegalStateException(getInvocationErrorMessage(ex.getMessage(), args), ex));
            } catch (InvocationTargetException ex) {
                // Unwrap for HandlerExceptionResolvers ...
                Throwable targetException = ex.getTargetException();
                if (targetException instanceof RuntimeException || targetException instanceof Error
                        || targetException instanceof Exception) {
                    ret.setErrorResult(targetException);
                } else {
                    String msg = getInvocationErrorMessage("Failed to invoke controller method", args);
                    ret.setErrorResult(new IllegalStateException(msg, targetException));
                }
            } catch (Exception ex) {
                ret.setErrorResult(ex);
            }
        }
    }).start();

    return ret;
}

From source file:com.chessix.vas.web.AccountController.java

@RequestMapping(value = "/{clasId}/{accountId}/balance", method = RequestMethod.GET)
public DeferredResult<Object> balance(@PathVariable final String clasId, @PathVariable final String accountId) {
    log.debug("balance({},{})", clasId, accountId);
    final ActorRef clas = clasService.getClas(clasId);
    final DeferredResult<Object> deferredResult = new DeferredResult<Object>();
    if (clas != null) {
        final Future<Object> future = Patterns.ask(clas,
                new Balance.RequestBuilder(accountService.getAccountId(accountId)).build(), timeout);

        future.onComplete(new OnComplete<Object>() {
            @Override/*  w w w.  j a v a2s  . c  om*/
            public void onComplete(final Throwable failure, final Object result) {
                if (failure != null) {
                    // We got a failure, handle it here
                    deferredResult.setErrorResult(failure);
                } else {
                    // We got a result, do something with it
                    deferredResult.setResult(result);
                }
            }
        }, system.dispatcher());
    } else {
        deferredResult.setErrorResult(new SaldoDTO(clasId, accountId, null, false, "CLAS does not exist"));
    }
    return deferredResult;
}

From source file:com.sishuok.chapter3.web.listener.ListenerController.java

@RequestMapping("/listener1")
@ResponseBody/*from  www  .j ava 2 s  .  c  o  m*/
public DeferredResult<String> listener1() {
    final DeferredResult<String> result = new DeferredResult<String>();
    result.onTimeout(new Runnable() {
        @Override
        public void run() {
            System.out.println("===");
        }
    });

    result.onCompletion(new Runnable() {
        @Override
        public void run() {
            System.out.println("===?");
        }
    });

    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(2 * 1000L);
            } catch (InterruptedException e) {
            }
            System.out.println("DeferredResult?");
            result.setResult("success");
        }
    }).start();
    return result;
}

From source file:com.chessix.vas.web.ClasController.java

/**
 * Count the number of records for the CLAS with id {@code classId}.
 *//*  w  w w .  j a v  a 2 s .  c om*/
@RequestMapping(value = "/{clasId}/count", method = RequestMethod.GET)
public DeferredResult<Object> count(@PathVariable final String clasId) {
    log.debug("count({})", clasId);

    final DeferredResult<Object> deferredResult = new DeferredResult<Object>();
    final ActorRef clas = clasService.getClas(clasId);
    if (clas != null) {
        final Future<Object> future = Patterns.ask(clas, new Count.RequestBuilder(clasId).build(), timeout);
        future.onComplete(new OnComplete<Object>() {
            @Override
            public void onComplete(final Throwable failure, final Object result) {
                if (failure != null) {
                    // We got a failure, handle it here
                    deferredResult.setErrorResult(failure);
                } else {
                    // We got a result, do something with it
                    deferredResult.setResult(result);
                }
            }
        }, system.dispatcher());
    } else {
        deferredResult.setResult(
                new Count.ResponseBuilder(false).clasId(clasId).message("CLAS does not exist").build());
    }

    return deferredResult;
}

From source file:com.chessix.vas.web.ClasController.java

/**
 * Validate if for given {@code classId} the speed layer is in sync.
 *//*from   w ww .  jav  a 2  s  .  com*/
@RequestMapping(value = "/{clasId}/validate/speed", method = RequestMethod.GET)
public DeferredResult<Object> validateSpeedLayer(@PathVariable final String clasId) {
    log.debug("fastValidate({})", clasId);

    final DeferredResult<Object> deferredResult = new DeferredResult<Object>();
    final ActorRef clas = clasService.getClas(clasId);
    if (clas != null) {
        final Future<Object> future = Patterns.ask(clas, new Validate.RequestBuilder(clasId).build(), timeout);
        future.onComplete(new OnComplete<Object>() {
            @Override
            public void onComplete(final Throwable failure, final Object result) {
                if (failure != null) {
                    // We got a failure, handle it here
                    deferredResult.setErrorResult(failure);
                } else {
                    // We got a result, do something with it
                    deferredResult.setResult(result);
                }
            }
        }, system.dispatcher());
    } else {
        deferredResult.setResult(
                new Validate.ResponseBuilder(false).clasId(clasId).message("CLAS does not exist").build());
    }

    return deferredResult;
}

From source file:com.chessix.vas.web.ClasController.java

/**
 * Remove all accounts and transactions for the CLAS with the given id {@code clasId}.
 *///from  w ww  . j  a  v  a 2  s.  c  o  m
@RequestMapping(value = "/{clasId}/clean", method = RequestMethod.POST)
public DeferredResult<Object> clean(@PathVariable final String clasId) {
    log.debug("clean({})", clasId);

    batchStorage.tell(new JournalMessage.CleanBuilder(clasId).build(), ActorRef.noSender());

    final DeferredResult<Object> deferredResult = new DeferredResult<Object>();
    final ActorRef clas = clasService.getClas(clasId);
    if (clas != null) {
        // there is data
        final Future<Object> future = Patterns.ask(clas, new Clean.RequestBuilder(clasId).build(), timeout);
        future.onComplete(new OnComplete<Object>() {
            @Override
            public void onComplete(final Throwable failure, final Object result) {
                if (failure != null) {
                    // We got a failure, handle it here
                    deferredResult.setErrorResult(failure);
                } else {
                    // We got a result, do something with it
                    deferredResult.setResult(result);
                }
            }
        }, system.dispatcher());
    } else {
        deferredResult.setResult(
                new Clean.ResponseBuilder(true).clasId(clasId).message("Clas was already removed").build());
    }

    return deferredResult;
}

From source file:be.solidx.hot.data.rest.RestDataStore.java

private DeferredResult<ResponseEntity<byte[]>> blockingCall(final Callable<ResponseEntity<byte[]>> dbCall) {

    final DeferredResult<ResponseEntity<byte[]>> deferredResult = new DeferredResult<>();

    DeferredManager deferredManager = new DefaultDeferredManager(blockingTaskThreadPool);

    deferredManager.when(dbCall).done(new DoneCallback<ResponseEntity<byte[]>>() {
        @Override//from  ww  w.j  a v  a  2s. c  o m
        public void onDone(ResponseEntity<byte[]> result) {
            deferredResult.setResult(result);
        }
    }).fail(new FailCallback<Throwable>() {
        @Override
        public void onFail(Throwable e) {
            deferredResult.setErrorResult(new ResponseEntity<byte[]>(extractStackTrace(e).getBytes(),
                    HttpStatus.INTERNAL_SERVER_ERROR));

        }
    });
    return deferredResult;
}

From source file:com.sishuok.chapter3.web.listener.ListenerController.java

@RequestMapping("/listener2")
@ResponseBody/* www  . ja v  a  2  s .co m*/
public DeferredResult<String> listener2() {
    final DeferredResult<String> result = new DeferredResult<String>();
    result.onTimeout(new Runnable() {
        @Override
        public void run() {
            System.out.println("===");
            result.setErrorResult("error");
        }
    });

    result.onCompletion(new Runnable() {
        @Override
        public void run() {
            System.out.println("===?");
        }
    });

    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(31 * 1000L);
            } catch (InterruptedException e) {
            }
            System.out.println(
                    "DeferredResult????");
            result.setResult("success");
        }
    }).start();
    return result;
}