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