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

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

Introduction

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

Prototype

public void onTimeout(Runnable callback) 

Source Link

Document

Register code to invoke when the async request times out.

Usage

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

@RequestMapping("/listener1")
@ResponseBody//  w  w w  . j  a  va2 s.com
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. c  om
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.DeferredResultController.java

@RequestMapping("/message")
@ResponseBody/* w  ww.ja va2s  .  co  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: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  . ja  va  2  s  .c o  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;
}