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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
a630d0303cce new servlet operation colop=grayscale.
robcast
parents: 819
diff changeset
35 private ErrMsg errMsgType = ErrMsg.IMAGE;
a630d0303cce new servlet operation colop=grayscale.
robcast
parents: 819
diff changeset
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
a630d0303cce new servlet operation colop=grayscale.
robcast
parents: 819
diff changeset
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
f4d3543b6a62 fixed mo=jpeg or png being ignored.
robcast
parents: 829
diff changeset
64 // forced destination image type
f4d3543b6a62 fixed mo=jpeg or png being ignored.
robcast
parents: 829
diff changeset
65 String mt = null;
f4d3543b6a62 fixed mo=jpeg or png being ignored.
robcast
parents: 829
diff changeset
66 if (jobinfo.hasOption("jpg")) {
f4d3543b6a62 fixed mo=jpeg or png being ignored.
robcast
parents: 829
diff changeset
67 mt = "image/jpeg";
f4d3543b6a62 fixed mo=jpeg or png being ignored.
robcast
parents: 829
diff changeset
68 } else if (jobinfo.hasOption("png")) {
f4d3543b6a62 fixed mo=jpeg or png being ignored.
robcast
parents: 829
diff changeset
69 mt = "image/png";
f4d3543b6a62 fixed mo=jpeg or png being ignored.
robcast
parents: 829
diff changeset
70 }
804
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents:
diff changeset
71 // send image
830
f4d3543b6a62 fixed mo=jpeg or png being ignored.
robcast
parents: 829
diff changeset
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 }