1 package com.icesoft.faces.webapp.http.servlet; 2 3 import com.icesoft.faces.webapp.http.common.ResponseHandler; 4 import com.icesoft.faces.webapp.http.common.Server; 5 import edu.emory.mathcs.backport.java.util.concurrent.Semaphore; 6 7 import javax.servlet.http.HttpServletRequest ; 8 import javax.servlet.http.HttpServletResponse ; 9 10 public class ThreadBlockingAdaptingServlet implements PseudoServlet { 11 private Server server; 12 13 public ThreadBlockingAdaptingServlet(Server server) { 14 this.server = server; 15 } 16 17 public void service(HttpServletRequest request, HttpServletResponse response) throws Exception { 18 ThreadBlockingRequestResponse requestResponse = new ThreadBlockingRequestResponse(request, response); 19 server.service(requestResponse); 20 requestResponse.blockUntilRespond(); 21 } 22 23 public void shutdown() { 24 server.shutdown(); 25 } 26 27 private class ThreadBlockingRequestResponse extends ServletRequestResponse { 28 private boolean blockResponse = true; 29 private Semaphore semaphore; 30 31 public ThreadBlockingRequestResponse(HttpServletRequest request, HttpServletResponse response) { 32 super(request, response); 33 } 34 35 public void respondWith(ResponseHandler handler) throws Exception { 36 super.respondWith(handler); 37 if (semaphore == null) { 38 blockResponse = false; 39 } else { 40 semaphore.release(); 41 } 42 } 43 44 public void blockUntilRespond() throws InterruptedException { 45 if (blockResponse) { 46 semaphore = new Semaphore(1); 47 semaphore.acquire(); 48 semaphore.acquire(); 49 semaphore.release(); 50 } 51 } 52 } 53 } 54 | Popular Tags |