Impulsión del servidor Java Servlet 3.0: envío de datos varias veces utilizando el mismo AsyncContext

Dirigido por varios ejemplos y preguntas respondidas aquí (principalmentehttp://www.javaworld.com/javaworld/jw-02-2009/jw-02-servlet3.html?page=3 ), Quiero que el servidor envíe la respuesta varias veces a un cliente sin completar la solicitud. Cuando la solicitud se agota, creo otra y así sucesivamente.

Quiero evitar el sondeo largo, ya que tengo que volver a crear la solicitud cada vez que recibo la respuesta. (y eso no es lo que apuntan las capacidades asíncronas del servlet 3.0).

Tengo esto en el lado del servidor:

@WebServlet(urlPatterns = {"/home"}, name = "async", asyncSupported = true) 

public class CometServlet extends HttpServlet {

    public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException {

        AsyncContext ac = request.startAsync(request, response);

        HashMap<String, AsyncContext> store = AppContext.getInstance().getStore();

        store.put(request.getParameter("id"), ac);

    }
}

Y un hilo para escribir en contexto asíncrono.

class MyThread extends Thread {
    String id, message;

    public MyThread(String id, String message) {
        this.id = id;
        this.message = message;
    }

    public void run() {
        HashMap<String, AsyncContext> store = AppContext.getInstance().getStore();
        AsyncContext ac = store.get(id);
        try {
            ac.getResponse().getWriter().print(message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Pero cuando hago la solicitud, los datos se envían solo si llamoac.complete(). Sin ella la solicitud siempre se agotará. Básicamente, quiero que los datos sean "transmitidos" antes de que se complete la solicitud.

Sólo para hacer una nota, he intentado esto conJetty 8 ContinuaciónAPI, También he intentado con la impresión aOutputStream en lugar dePrintWriter. Yo tambien lo intentéflushBuffer() en respuesta La misma cosa.

¿Qué estoy haciendo mal?

El lado del cliente se hace así:

    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://localhost:8080/home', true);
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 3 || xhr.readyState == 4) {
            document.getElementById("dynamicContent").innerHTML = xhr.responseText;
        }
    }
    xhr.send(null);

¿Alguien puede al menos confirmar que el lado del servidor está bien? :)

Respuestas a la pregunta(2)

Su respuesta a la pregunta