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

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

Introduction

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

Prototype

public DeferredResult(@Nullable Long timeoutValue, Supplier<?> timeoutResult) 

Source Link

Document

Variant of #DeferredResult(Long,Object) that accepts a dynamic fallback value based on a Supplier .

Usage

From source file:com.sishuok.chapter3.web.controller.chat.MsgPublisher.java

public DeferredResult<String> startAsync(final String username) {
    final DeferredResult<String> result = new DeferredResult<String>(30L * 1000, null);

    final Runnable removeDeferredResultRunnable = new Runnable() {
        @Override// w  ww  . j av  a2  s . co m
        public void run() {
            Queue<DeferredResult<String>> queue = usernameToDeferredResultMap.get(username);
            if (queue != null) {
                queue.remove(result);
            }
        }
    };
    result.onCompletion(removeDeferredResultRunnable);
    result.onTimeout(removeDeferredResultRunnable);

    //????
    Queue<DeferredResult<String>> queue = usernameToDeferredResultMap.get(username);
    if (queue == null) {
        queue = new ConcurrentLinkedDeque();
        usernameToDeferredResultMap.put(username, queue);
    }
    queue.add(result);

    return result;
}

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 . ja  v a  2s. c  om
    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;
}