Mercurial > hg > digilib-old
annotate servlet3/src/main/java/digilib/servlet/AsyncServletWorker.java @ 910:91e5f20a7c56
make text servlet work
author | robcast |
---|---|
date | Tue, 24 May 2011 08:17:02 -0400 |
parents | 7779b37d1d05 |
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 } |