Mercurial > hg > digilib-old
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 } |