Mercurial > hg > digilib-old
annotate servlet3/src/main/java/digilib/servlet/AsyncServletWorker.java @ 903:7779b37d1d05
refactored into maven modules per servlet type.
can build servlet-api 2.3 and 3.0 via profile now!
| author | robcast |
|---|---|
| date | Tue, 26 Apr 2011 20:24:31 +0200 |
| parents | servlet/src/main/java/digilib/servlet/AsyncServletWorker.java@ba1eb2d821a2 |
| children | 66f1ba72d07b |
| rev | line source |
|---|---|
|
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
1 /** |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
2 * |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
3 */ |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
4 package digilib.servlet; |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
5 |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
6 import java.io.IOException; |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
7 |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
8 import javax.servlet.AsyncContext; |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
9 import javax.servlet.ServletException; |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
10 import javax.servlet.http.HttpServletResponse; |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
11 |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
12 import org.apache.log4j.Logger; |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
13 |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
14 import digilib.image.DocuImage; |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
15 import digilib.image.ImageJobDescription; |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
16 import digilib.image.ImageOpException; |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
17 import digilib.image.ImageWorker; |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
18 import digilib.servlet.Scaler.ErrMsg; |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
19 import digilib.servlet.Scaler.Error; |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
20 |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
21 /** |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
22 * @author casties |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
23 * |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
24 */ |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
25 public class AsyncServletWorker implements Runnable { |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
26 |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
27 /** the AsyncServlet context */ |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
28 private AsyncContext asyncContext; |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
29 |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
30 /** the ImageWorker we use */ |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
31 private ImageWorker imageWorker; |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
32 |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
33 protected static Logger logger = Logger.getLogger(AsyncServletWorker.class); |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
34 private long startTime; |
| 829 | 35 private ErrMsg errMsgType = ErrMsg.IMAGE; |
| 36 private ImageJobDescription jobinfo; | |
|
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
37 |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
38 /** |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
39 * @param dlConfig |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
40 * @param jobinfo |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
41 */ |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
42 public AsyncServletWorker(DigilibConfiguration dlConfig, |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
43 ImageJobDescription jobinfo, AsyncContext asyncContext, |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
44 ErrMsg errMsgType, long startTime) { |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
45 // set up image worker |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
46 imageWorker = new ImageWorker(dlConfig, jobinfo); |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
47 // save AsyncContext |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
48 this.asyncContext = asyncContext; |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
49 this.startTime = startTime; |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
50 this.errMsgType = errMsgType; |
| 829 | 51 this.jobinfo = jobinfo; |
|
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
52 } |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
53 |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
54 /** |
|
819
a23c4c15a6a8
clean up possible resource leaks. better behaviour with unknown image types.
robcast
parents:
804
diff
changeset
|
55 * runs the ImageWorker and writes the image to the ServletResponse. |
|
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
56 */ |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
57 public void run() { |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
58 // get fresh response |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
59 HttpServletResponse response = (HttpServletResponse) asyncContext.getResponse(); |
|
831
30037e93ec2a
helper function to show request and response header.
robcast
parents:
830
diff
changeset
|
60 logger.debug("working on response: (" + ServletOps.headersToString(response) + ")"); |
|
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
61 try { |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
62 // render the image |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
63 DocuImage img = imageWorker.call(); |
| 830 | 64 // forced destination image type |
| 65 String mt = null; | |
| 66 if (jobinfo.hasOption("jpg")) { | |
| 67 mt = "image/jpeg"; | |
| 68 } else if (jobinfo.hasOption("png")) { | |
| 69 mt = "image/png"; | |
| 70 } | |
|
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
71 // send image |
| 830 | 72 ServletOps.sendImage(img, mt, response, logger); |
|
819
a23c4c15a6a8
clean up possible resource leaks. better behaviour with unknown image types.
robcast
parents:
804
diff
changeset
|
73 logger.debug("Job done in: " |
|
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
74 + (System.currentTimeMillis() - startTime) + "ms"); |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
75 } catch (ImageOpException e) { |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
76 logger.error(e.getClass() + ": " + e.getMessage()); |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
77 Scaler.digilibError(errMsgType, Error.IMAGE, null, response); |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
78 } catch (IOException e) { |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
79 logger.error(e.getClass() + ": " + e.getMessage()); |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
80 Scaler.digilibError(errMsgType, Error.FILE, null, response); |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
81 } catch (ServletException e) { |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
82 logger.error("Servlet error: ", e); |
|
819
a23c4c15a6a8
clean up possible resource leaks. better behaviour with unknown image types.
robcast
parents:
804
diff
changeset
|
83 } catch (Exception e) { |
|
a23c4c15a6a8
clean up possible resource leaks. better behaviour with unknown image types.
robcast
parents:
804
diff
changeset
|
84 logger.error("Other error: ", e); |
|
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
85 } finally { |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
86 // submit response |
|
819
a23c4c15a6a8
clean up possible resource leaks. better behaviour with unknown image types.
robcast
parents:
804
diff
changeset
|
87 logger.debug("context complete."); |
|
831
30037e93ec2a
helper function to show request and response header.
robcast
parents:
830
diff
changeset
|
88 logger.debug("response: (" + ServletOps.headersToString(response) + ")"); |
|
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
89 asyncContext.complete(); |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
90 } |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
91 |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
92 } |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
93 |
|
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff
changeset
|
94 } |
