com.sishuok.chapter3.web.listener.ListenerController.java Source code

Java tutorial

Introduction

Here is the source code for com.sishuok.chapter3.web.listener.ListenerController.java

Source

/**
 * Copyright (c) 2005-2012 https://github.com/zhangkaitao
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 */
package com.sishuok.chapter3.web.listener;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.async.DeferredResult;
import org.springframework.web.context.request.async.WebAsyncTask;

import java.util.concurrent.Callable;

/**
 *
 * ?springmvc-config.xmlmvc:deferred-result-interceptors
 *
 * <p>User: Zhang Kaitao
 * <p>Date: 13-7-18 ?9:16
 * <p>Version: 1.0
 */
@Controller
public class ListenerController {

    @RequestMapping("/listener1")
    @ResponseBody
    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;
    }

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

    @RequestMapping("/listener3")
    @ResponseBody
    public WebAsyncTask<String> listener3() {
        long timeout = 10L * 1000; // 10
        final WebAsyncTask webAsyncTask = new WebAsyncTask(timeout, new Callable() {
            @Override
            public String call() throws Exception {
                Thread.sleep(2L * 1000);
                return "success";
            }
        });

        webAsyncTask.onTimeout(new Callable() {
            @Override
            public Object call() throws Exception {
                System.out.println("====");
                return "error";
            }
        });

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

        return webAsyncTask;
    }

    @RequestMapping("/listener4")
    @ResponseBody
    public WebAsyncTask<String> listener4() {
        long timeout = 10L * 1000; // 10
        final WebAsyncTask webAsyncTask = new WebAsyncTask(timeout, new Callable() {
            @Override
            public String call() throws Exception {
                Thread.sleep(20L * 1000);
                return "success";
            }
        });

        webAsyncTask.onTimeout(new Callable() {
            @Override
            public Object call() throws Exception {
                System.out.println("====");
                return "error";
            }
        });

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

        return webAsyncTask;
    }
}