comparison 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
comparison
equal deleted inserted replaced
902:89ba3ffcf552 903:7779b37d1d05
1 /**
2 *
3 */
4 package digilib.servlet;
5
6 import java.io.IOException;
7
8 import javax.servlet.AsyncContext;
9 import javax.servlet.ServletException;
10 import javax.servlet.http.HttpServletResponse;
11
12 import org.apache.log4j.Logger;
13
14 import digilib.image.DocuImage;
15 import digilib.image.ImageJobDescription;
16 import digilib.image.ImageOpException;
17 import digilib.image.ImageWorker;
18 import digilib.servlet.Scaler.ErrMsg;
19 import digilib.servlet.Scaler.Error;
20
21 /**
22 * @author casties
23 *
24 */
25 public class AsyncServletWorker implements Runnable {
26
27 /** the AsyncServlet context */
28 private AsyncContext asyncContext;
29
30 /** the ImageWorker we use */
31 private ImageWorker imageWorker;
32
33 protected static Logger logger = Logger.getLogger(AsyncServletWorker.class);
34 private long startTime;
35 private ErrMsg errMsgType = ErrMsg.IMAGE;
36 private ImageJobDescription jobinfo;
37
38 /**
39 * @param dlConfig
40 * @param jobinfo
41 */
42 public AsyncServletWorker(DigilibConfiguration dlConfig,
43 ImageJobDescription jobinfo, AsyncContext asyncContext,
44 ErrMsg errMsgType, long startTime) {
45 // set up image worker
46 imageWorker = new ImageWorker(dlConfig, jobinfo);
47 // save AsyncContext
48 this.asyncContext = asyncContext;
49 this.startTime = startTime;
50 this.errMsgType = errMsgType;
51 this.jobinfo = jobinfo;
52 }
53
54 /**
55 * runs the ImageWorker and writes the image to the ServletResponse.
56 */
57 public void run() {
58 // get fresh response
59 HttpServletResponse response = (HttpServletResponse) asyncContext.getResponse();
60 logger.debug("working on response: (" + ServletOps.headersToString(response) + ")");
61 try {
62 // render the image
63 DocuImage img = imageWorker.call();
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 }
71 // send image
72 ServletOps.sendImage(img, mt, response, logger);
73 logger.debug("Job done in: "
74 + (System.currentTimeMillis() - startTime) + "ms");
75 } catch (ImageOpException e) {
76 logger.error(e.getClass() + ": " + e.getMessage());
77 Scaler.digilibError(errMsgType, Error.IMAGE, null, response);
78 } catch (IOException e) {
79 logger.error(e.getClass() + ": " + e.getMessage());
80 Scaler.digilibError(errMsgType, Error.FILE, null, response);
81 } catch (ServletException e) {
82 logger.error("Servlet error: ", e);
83 } catch (Exception e) {
84 logger.error("Other error: ", e);
85 } finally {
86 // submit response
87 logger.debug("context complete.");
88 logger.debug("response: (" + ServletOps.headersToString(response) + ")");
89 asyncContext.complete();
90 }
91
92 }
93
94 }