Mercurial > hg > digilib-old
annotate servlet/src/digilib/servlet/Scaler.java @ 833:8ee72433bb8f stream
logs more request and response headers.
unsure about last-modified response.
author | robcast |
---|---|
date | Tue, 01 Mar 2011 10:14:29 +0100 |
parents | 30037e93ec2a |
children | c07c21ac78f9 |
rev | line source |
---|---|
1 | 1 package digilib.servlet; |
2 | |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
3 import java.io.File; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
4 import java.io.IOException; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
5 import java.util.List; |
1 | 6 |
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
7 import javax.servlet.AsyncContext; |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
8 import javax.servlet.ServletConfig; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
9 import javax.servlet.ServletContext; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
10 import javax.servlet.ServletException; |
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
11 import javax.servlet.annotation.WebServlet; |
557 | 12 import javax.servlet.http.HttpServlet; |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
13 import javax.servlet.http.HttpServletRequest; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
14 import javax.servlet.http.HttpServletResponse; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
15 |
557 | 16 import org.apache.log4j.Logger; |
17 | |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
18 import digilib.auth.AuthOpException; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
19 import digilib.auth.AuthOps; |
543
919e008ab1fb
more steps towards more standard java.util.concurrent design
robcast
parents:
542
diff
changeset
|
20 import digilib.image.DocuImage; |
557 | 21 import digilib.image.ImageJobDescription; |
570 | 22 import digilib.image.ImageOpException; |
86 | 23 import digilib.io.DocuDirCache; |
335 | 24 import digilib.io.DocuDirectory; |
588 | 25 import digilib.io.ImageInput; |
557 | 26 import digilib.util.DigilibJobCenter; |
1 | 27 |
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
28 @WebServlet(name="Scaler", urlPatterns={"/Scaler", "/servlet/Scaler/*"}, asyncSupported=true) |
557 | 29 public class Scaler extends HttpServlet { |
263 | 30 |
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
31 private static final long serialVersionUID = 5289386646192471549L; |
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
32 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
33 /** digilib servlet version (for all components) */ |
831
30037e93ec2a
helper function to show request and response header.
robcast
parents:
830
diff
changeset
|
34 public static final String version = "1.9.1a13"; |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
35 |
558 | 36 /** servlet error codes */ |
37 public static enum Error {UNKNOWN, AUTH, FILE, IMAGE}; | |
38 | |
39 /** type of error message */ | |
40 public static enum ErrMsg {IMAGE, TEXT, CODE}; | |
41 | |
557 | 42 /** logger for accounting requests */ |
43 protected static Logger accountlog = Logger.getLogger("account.request"); | |
44 | |
45 /** gengeral logger for this class */ | |
572 | 46 protected static Logger logger = Logger.getLogger("digilib.scaler"); |
557 | 47 |
48 /** logger for authentication related */ | |
49 protected static Logger authlog = Logger.getLogger("digilib.auth"); | |
50 | |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
51 /** DocuDirCache instance */ |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
52 DocuDirCache dirCache; |
161 | 53 |
543
919e008ab1fb
more steps towards more standard java.util.concurrent design
robcast
parents:
542
diff
changeset
|
54 /** Image executor */ |
547 | 55 DigilibJobCenter<DocuImage> imageJobCenter; |
543
919e008ab1fb
more steps towards more standard java.util.concurrent design
robcast
parents:
542
diff
changeset
|
56 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
57 /** authentication error image file */ |
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
58 static File denyImgFile; |
298
1ecaf9c1fd8a
Servlet version 1.5.0b -- the beginning of the next generation :-)
robcast
parents:
288
diff
changeset
|
59 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
60 /** image error image file */ |
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
61 static File errorImgFile; |
298
1ecaf9c1fd8a
Servlet version 1.5.0b -- the beginning of the next generation :-)
robcast
parents:
288
diff
changeset
|
62 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
63 /** not found error image file */ |
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
64 static File notfoundImgFile; |
298
1ecaf9c1fd8a
Servlet version 1.5.0b -- the beginning of the next generation :-)
robcast
parents:
288
diff
changeset
|
65 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
66 /** send files as is? */ |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
67 boolean sendFileAllowed = true; |
298
1ecaf9c1fd8a
Servlet version 1.5.0b -- the beginning of the next generation :-)
robcast
parents:
288
diff
changeset
|
68 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
69 /** DigilibConfiguration instance */ |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
70 DigilibConfiguration dlConfig; |
1 | 71 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
72 /** use authorization database */ |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
73 boolean useAuthorization = true; |
298
1ecaf9c1fd8a
Servlet version 1.5.0b -- the beginning of the next generation :-)
robcast
parents:
288
diff
changeset
|
74 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
75 /** AuthOps instance */ |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
76 AuthOps authOp; |
1 | 77 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
78 /** |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
79 * Initialisation on first run. |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
80 * |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
81 * @throws ServletException |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
82 * |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
83 * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig) |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
84 */ |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
85 public void init(ServletConfig config) throws ServletException { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
86 super.init(config); |
181 | 87 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
88 System.out |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
89 .println("***** Digital Image Library Image Scaler Servlet (version " |
563 | 90 + version + ") *****"); |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
91 // say hello in the log file |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
92 logger.info("***** Digital Image Library Image Scaler Servlet (version " |
563 | 93 + version + ") *****"); |
1 | 94 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
95 // get our ServletContext |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
96 ServletContext context = config.getServletContext(); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
97 // see if there is a Configuration instance |
806
d811204ce5a4
Initialiser is now a ServletContextListener (doesn't need web.xml).
robcast
parents:
804
diff
changeset
|
98 dlConfig = (DigilibConfiguration) context.getAttribute("digilib.servlet.configuration"); |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
99 if (dlConfig == null) { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
100 // no Configuration |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
101 throw new ServletException("No Configuration!"); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
102 } |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
103 // set our AuthOps |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
104 useAuthorization = dlConfig.getAsBoolean("use-authorization"); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
105 authOp = (AuthOps) dlConfig.getValue("servlet.auth.op"); |
1 | 106 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
107 // DocuDirCache instance |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
108 dirCache = (DocuDirCache) dlConfig.getValue("servlet.dir.cache"); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
109 |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
110 // Executor |
547 | 111 imageJobCenter = (DigilibJobCenter<DocuImage>) dlConfig |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
112 .getValue("servlet.worker.imageexecutor"); |
1 | 113 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
114 denyImgFile = ServletOps.getFile( |
806
d811204ce5a4
Initialiser is now a ServletContextListener (doesn't need web.xml).
robcast
parents:
804
diff
changeset
|
115 (File) dlConfig.getValue("denied-image"), context); |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
116 errorImgFile = ServletOps.getFile( |
806
d811204ce5a4
Initialiser is now a ServletContextListener (doesn't need web.xml).
robcast
parents:
804
diff
changeset
|
117 (File) dlConfig.getValue("error-image"), context); |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
118 notfoundImgFile = ServletOps.getFile( |
806
d811204ce5a4
Initialiser is now a ServletContextListener (doesn't need web.xml).
robcast
parents:
804
diff
changeset
|
119 (File) dlConfig.getValue("notfound-image"), context); |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
120 sendFileAllowed = dlConfig.getAsBoolean("sendfile-allowed"); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
121 } |
1 | 122 |
821 | 123 /** |
124 * Returns modification time relevant to the request for caching. | |
547 | 125 * |
126 * @see javax.servlet.http.HttpServlet#getLastModified(javax.servlet.http.HttpServletRequest) | |
127 */ | |
750 | 128 public long getLastModified(HttpServletRequest request) { |
547 | 129 accountlog.debug("GetLastModified from " + request.getRemoteAddr() |
130 + " for " + request.getQueryString()); | |
131 long mtime = -1; | |
821 | 132 try { |
833 | 133 // create new digilib request |
821 | 134 DigilibRequest dlReq = new DigilibRequest(request); |
135 DocuDirectory dd = dirCache.getDirectory(dlReq.getFilePath()); | |
136 if (dd != null) { | |
137 mtime = dd.getDirMTime() / 1000 * 1000; | |
138 } | |
139 } catch (Exception e) { | |
140 logger.error("error in getLastModified: " + e.getMessage()); | |
547 | 141 } |
821 | 142 logger.debug(" returns " + mtime); |
547 | 143 return mtime; |
144 } | |
145 | |
557 | 146 /* (non-Javadoc) |
147 * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) | |
148 */ | |
149 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException { | |
150 accountlog.info("GET from " + request.getRemoteAddr()); | |
151 this.processRequest(request, response); | |
152 } | |
547 | 153 |
557 | 154 |
155 /* (non-Javadoc) | |
156 * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) | |
157 */ | |
158 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException { | |
159 accountlog.info("POST from " + request.getRemoteAddr()); | |
160 this.processRequest(request, response); | |
161 } | |
162 | |
163 | |
750 | 164 protected void doHead(HttpServletRequest req, HttpServletResponse resp) |
165 throws ServletException, IOException { | |
166 logger.debug("HEAD from "+req.getRemoteAddr()); | |
167 super.doHead(req, resp); | |
168 } | |
169 | |
170 protected void doOptions(HttpServletRequest req, HttpServletResponse resp) | |
171 throws ServletException, IOException { | |
172 logger.debug("OPTIONS from "+req.getRemoteAddr()); | |
173 super.doOptions(req, resp); | |
174 } | |
175 | |
176 /** Service this request using the response. | |
557 | 177 * @param request |
178 * @param response | |
179 * @throws ServletException | |
180 */ | |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
181 public void processRequest(HttpServletRequest request, |
557 | 182 HttpServletResponse response) throws ServletException { |
487 | 183 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
184 if (dlConfig == null) { |
557 | 185 logger.error("ERROR: No Configuration!"); |
186 throw new ServletException("NO VALID digilib CONFIGURATION!"); | |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
187 } |
502 | 188 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
189 accountlog.debug("request: " + request.getQueryString()); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
190 logger.debug("request: " + request.getQueryString()); |
833 | 191 logger.debug("headers: " + ServletOps.headersToString(request)); |
192 //logger.debug("response:"+ response + " committed=" + response.isCommitted()); | |
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
193 final long startTime = System.currentTimeMillis(); |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
194 |
547 | 195 // parse request |
196 DigilibRequest dlRequest = new DigilibRequest(request); | |
197 // extract the job information | |
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
198 final ImageJobDescription jobTicket = ImageJobDescription.getInstance(dlRequest, dlConfig); |
502 | 199 |
558 | 200 // type of error reporting |
201 ErrMsg errMsgType = ErrMsg.IMAGE; | |
202 if (dlRequest.hasOption("errtxt")) { | |
203 errMsgType = ErrMsg.TEXT; | |
204 } else if (dlRequest.hasOption("errcode")) { | |
205 errMsgType = ErrMsg.CODE; | |
206 } | |
207 | |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
208 try { |
547 | 209 /* |
210 * check if we can fast-track without scaling | |
211 */ | |
593
7768ea8f59cf
more work on stream input -- cleaning up references to files
robcast
parents:
588
diff
changeset
|
212 ImageInput fileToLoad = (ImageInput) jobTicket.getInput(); |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
213 |
547 | 214 // check permissions |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
215 if (useAuthorization) { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
216 // get a list of required roles (empty if no restrictions) |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
217 List<String> rolesRequired = authOp.rolesForPath( |
547 | 218 jobTicket.getFilePath(), request); |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
219 if (rolesRequired != null) { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
220 authlog.debug("Role required: " + rolesRequired); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
221 authlog.debug("User: " + request.getRemoteUser()); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
222 // is the current request/user authorized? |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
223 if (!authOp.isRoleAuthorized(rolesRequired, request)) { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
224 // send deny answer and abort |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
225 throw new AuthOpException(); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
226 } |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
227 } |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
228 } |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
229 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
230 // if requested, send image as a file |
547 | 231 if (sendFileAllowed && jobTicket.getSendAsFile()) { |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
232 String mt = null; |
547 | 233 if (jobTicket.hasOption("rawfile")) { |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
234 mt = "application/octet-stream"; |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
235 } |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
236 logger.debug("Sending RAW File as is."); |
572 | 237 ServletOps.sendFile(fileToLoad.getFile(), mt, null, response, logger); |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
238 logger.info("Done in " + (System.currentTimeMillis() - startTime) + "ms"); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
239 return; |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
240 } |
487 | 241 |
547 | 242 // if possible, send the image without actually having to transform it |
243 if (! jobTicket.isTransformRequired()) { | |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
244 logger.debug("Sending File as is."); |
572 | 245 ServletOps.sendFile(fileToLoad.getFile(), null, null, response, logger); |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
246 logger.info("Done in " + (System.currentTimeMillis() - startTime) + "ms"); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
247 return; |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
248 } |
181 | 249 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
250 // check load of workers |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
251 if (imageJobCenter.isBusy()) { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
252 logger.error("Servlet overloaded!"); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
253 response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
254 return; |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
255 } |
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
256 |
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
257 // worker job is done asynchronously |
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
258 AsyncContext asyncCtx = request.startAsync(request, response); |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
259 // create job |
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
260 AsyncServletWorker job = new AsyncServletWorker(dlConfig, jobTicket, asyncCtx, errMsgType, startTime); |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
261 // submit job |
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
262 imageJobCenter.submit(job); |
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
263 // we're done for now |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
264 |
570 | 265 } catch (ImageOpException e) { |
266 logger.error(e.getClass() + ": " + e.getMessage()); | |
267 digilibError(errMsgType, Error.IMAGE, null, response); | |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
268 } catch (IOException e) { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
269 logger.error(e.getClass() + ": " + e.getMessage()); |
558 | 270 digilibError(errMsgType, Error.FILE, null, response); |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
271 } catch (AuthOpException e) { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
272 logger.error(e.getClass() + ": " + e.getMessage()); |
558 | 273 digilibError(errMsgType, Error.AUTH, null, response); |
821 | 274 } catch (Exception e) { |
275 logger.error("Other Exception: ", e); | |
276 // TODO: should we rethrow or swallow? | |
277 //throw new ServletException(e); | |
543
919e008ab1fb
more steps towards more standard java.util.concurrent design
robcast
parents:
542
diff
changeset
|
278 } |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
279 } |
298
1ecaf9c1fd8a
Servlet version 1.5.0b -- the beginning of the next generation :-)
robcast
parents:
288
diff
changeset
|
280 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
281 /** |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
282 * Sends an error to the client as text or image. |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
283 * |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
284 * @param type |
558 | 285 * @param error |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
286 * @param msg |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
287 * @param response |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
288 */ |
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
289 public static void digilibError(ErrMsg type, Error error, String msg, |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
290 HttpServletResponse response) { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
291 try { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
292 File img = null; |
557 | 293 int status = 0; |
558 | 294 if (error == Error.AUTH) { |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
295 if (msg == null) { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
296 msg = "ERROR: Unauthorized access!"; |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
297 } |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
298 img = denyImgFile; |
557 | 299 status = HttpServletResponse.SC_FORBIDDEN; |
558 | 300 } else if (error == Error.FILE) { |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
301 if (msg == null) { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
302 msg = "ERROR: Image file not found!"; |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
303 } |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
304 img = notfoundImgFile; |
557 | 305 status = HttpServletResponse.SC_NOT_FOUND; |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
306 } else { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
307 if (msg == null) { |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
308 msg = "ERROR: Other image error!"; |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
309 } |
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
310 img = errorImgFile; |
557 | 311 status = HttpServletResponse.SC_BAD_REQUEST; |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
312 } |
803
225054177f67
remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents:
752
diff
changeset
|
313 if (response.isCommitted()) { |
225054177f67
remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents:
752
diff
changeset
|
314 // response already committed |
804
587c90bc5976
first version using officially approved Servlet 3.0 async support.
robcast
parents:
802
diff
changeset
|
315 logger.warn("Response committed for error "+msg); |
803
225054177f67
remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents:
752
diff
changeset
|
316 } |
558 | 317 if (type == ErrMsg.TEXT) { |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
318 ServletOps.htmlMessage(msg, response); |
558 | 319 } else if (type == ErrMsg.CODE) { |
557 | 320 response.sendError(status, msg); |
321 } else if (img != null) { | |
322 // default: image | |
572 | 323 ServletOps.sendFile(img, null, null, response, logger); |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
324 } |
570 | 325 } catch (Exception e) { |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
326 logger.error("Error sending error!", e); |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
327 } |
298
1ecaf9c1fd8a
Servlet version 1.5.0b -- the beginning of the next generation :-)
robcast
parents:
288
diff
changeset
|
328 |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
329 } |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
330 |
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
331 public static String getVersion() { |
563 | 332 return version; |
544
5ff500d6812a
more steps towards more standard java.util.concurrent design
robcast
parents:
543
diff
changeset
|
333 } |
489
882ee6a055bd
try to fix small problem with version number display
robcast
parents:
487
diff
changeset
|
334 |
500 | 335 } |