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

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

Introduction

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

Prototype

public void onCompletion(Runnable callback) 

Source Link

Document

Register code to invoke when the async request completes.

Usage

From source file:com.sishuok.chapter3.web.controller.DeferredResultController.java

@RequestMapping("/message")
@ResponseBody//w w w  .j  a va  2 s .c o m
public DeferredResult<String> newMessage() throws IOException {

    //1?DeferredResult
    long timeout = 30L * 1000;
    final DeferredResult<String> result = new DeferredResult<String>(timeout);

    result.onCompletion(new Runnable() {
        @Override
        public void run() {
            queue.remove(result);
        }
    });

    result.onTimeout(new Runnable() {
        @Override
        public void run() {
            queue.remove(result);
        }
    });

    //2????
    queue.add(result);
    return result;
}

From source file:org.hydroponics.web.controller.CalibreAsyncController.java

@RequestMapping("/update")
@ResponseBody//ww  w . j a va 2 s.c o m
public DeferredResult<Map<String, Object>> update() {

    final DeferredResult<Map<String, Object>> result = new DeferredResult<Map<String, Object>>();
    this.calibreRequests.add(result);

    logger.fine("add deferred result");

    result.onCompletion(new Runnable() {
        public void run() {
            logger.fine("remove deferred result:" + calibreRequests.size());
            calibreRequests.remove(result);
        }
    });
    return result;
}

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

@RequestMapping("/listener1")
@ResponseBody/*from  w ww  .j a v  a  2s . c om*/
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.sishuok.chapter3.web.listener.ListenerController.java

@RequestMapping("/listener2")
@ResponseBody// w w  w. j  av 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;
}

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  w  w .j a  va2  s . c  om
        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) {//from   ww w  .jav  a2s  .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;
}