KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > icesoft > faces > webapp > http > servlet > ThreadBlockingAdaptingServlet


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 JavaDoc;
8 import javax.servlet.http.HttpServletResponse JavaDoc;
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 JavaDoc request, HttpServletResponse JavaDoc response) throws Exception JavaDoc {
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 JavaDoc request, HttpServletResponse JavaDoc response) {
32             super(request, response);
33         }
34
35         public void respondWith(ResponseHandler handler) throws Exception JavaDoc {
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 JavaDoc {
45             if (blockResponse) {
46                 semaphore = new Semaphore(1);
47                 semaphore.acquire();
48                 semaphore.acquire();
49                 semaphore.release();
50             }
51         }
52     }
53 }
54
Popular Tags