/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package contiunation1;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.continuation.Continuation;
import org.eclipse.jetty.continuation.ContinuationSupport;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
/**
*
* @author vertexua
*/
class RequestHandler extends AbstractHandler {
List<Continuation> conts = Collections.synchronizedList(new ArrayList<Continuation>());
@Override
public void handle(String string, Request rqst, HttpServletRequest hsr, HttpServletResponse hsr1) throws IOException, ServletException {
rqst.setContentType("text/html");
hsr1.setStatus(HttpServletResponse.SC_OK);
PrintWriter writer = hsr1.getWriter();
if (string.endsWith("wakeup")) {
synchronized(conts){
System.out.println("begin");
for (Continuation cc: conts){
System.out.println("Resuming "+cc);
cc.resume();
}
conts.clear();
System.out.println("end");
}
writer.println("Woken up " + new Date());
rqst.setHandled(true);
} else {
Continuation cc = ContinuationSupport.getContinuation(rqst);
if (cc.isInitial()) {
System.out.println("initial");
writer.println("Hello world " + new Date());
cc.suspend(hsr1);
conts.add(cc);
} else {
System.out.println("resumed");
writer.println(" Hello world " + new Date());
}
rqst.setHandled(true);
}
}
}
public class Contiunation1 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Server server = new Server(9999);
server.setHandler(new RequestHandler());
try {
server.start();
} catch (Exception ex) {
Logger.getLogger(Contiunation1.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}
Этот код не совсем правильный, попрошу не придираться к мелочам, это такой экспериментальный Hello World. Если открыть три вкладки с разным URL, а потом зайти на /wakeup, то все три вкладки загружаются. Если зайти в трех вкладках на один URL, то работает совсем странно, /wakeup нужно вызвать 3 раза чтобы разбудить всех.
Вопросы: причем URL к Continuations? Как правильно такое написать?