Mercurial > hg > digilib-old
diff servlet2/src/main/java/digilib/servlet/DigilibServletConfiguration.java @ 1158:2ee261676828 default tip
better out-of-the box experience:
* digilib works without config files using sensible defaults
* new sample images folder used by default
* config files moved to templates
author | robcast |
---|---|
date | Tue, 19 Feb 2013 17:32:25 +0100 |
parents | 4e368c85cce4 |
children |
line wrap: on
line diff
--- a/servlet2/src/main/java/digilib/servlet/DigilibServletConfiguration.java Tue Feb 19 17:27:53 2013 +0100 +++ b/servlet2/src/main/java/digilib/servlet/DigilibServletConfiguration.java Tue Feb 19 17:32:25 2013 +0100 @@ -24,6 +24,7 @@ import java.io.File; import java.util.Map; import java.util.Map.Entry; +import java.util.concurrent.atomic.AtomicInteger; import javax.servlet.ServletContext; import javax.servlet.ServletException; @@ -36,47 +37,50 @@ /** * Class to hold the digilib servlet configuration parameters. The parameters * can be read from the digilib-config file and be passed to other servlets or - * beans. <br>errorImgFileName: image file to send in case of error. <br> - * denyImgFileName: image file to send if access is denied. <br>baseDirs: - * array of base directories in order of preference (prescaled versions first). - * <br>useAuth: use authentication information. <br>authConfPath: - * authentication configuration file. <br>... <br> + * beans. <br> + * errorImgFileName: image file to send in case of error. <br> + * denyImgFileName: image file to send if access is denied. <br> + * baseDirs: array of base directories in order of preference (prescaled + * versions first). <br> + * useAuth: use authentication information. <br> + * authConfPath: authentication configuration file. <br> + * ... <br> * * @author casties - * + * */ public class DigilibServletConfiguration extends DigilibConfiguration { - /** - * Definition of parameters and default values. - */ - protected void initParams() { - /* - * Definition of parameters and default values. System parameters that - * are not read from config file have a type 's'. - */ + /** time the webapp (i.e. this class) was loaded */ + public final Long webappStartTime = System.currentTimeMillis(); + + /** counter for HttpRequests (mostly for debugging) */ + public AtomicInteger webappRequestCnt = new AtomicInteger(0); + + /** counter for open HttpRequests (mostly for debugging) */ + public AtomicInteger openRequestCnt = new AtomicInteger(0); - // digilib servlet version - newParameter( - "servlet.version", - digilib.servlet.Scaler.getVersion(), - null, - 's'); - // configuration file location - newParameter("servlet.config.file", null, null, 's'); - // DocuDirCache instance - newParameter("servlet.dir.cache", null, null, 's'); - // DocuImage class instance - newParameter( - "servlet.docuimage.class", - digilib.image.ImageLoaderDocuImage.class, - null, - 's'); - // DocuImage version - newParameter("servlet.docuimage.version", - "?", null, 's'); - // AuthOps instance for authentication - newParameter("servlet.auth.op", null, null, 's'); + /** + * Definition of parameters and default values. + */ + protected void initParams() { + /* + * Definition of parameters and default values. System parameters that + * are not read from config file have a type 's'. + */ + + // digilib servlet version + newParameter("servlet.version", digilib.servlet.Scaler.getVersion(), null, 's'); + // configuration file location + newParameter("servlet.config.file", null, null, 's'); + // DocuDirCache instance + newParameter("servlet.dir.cache", null, null, 's'); + // DocuImage class instance + newParameter("servlet.docuimage.class", digilib.image.ImageLoaderDocuImage.class, null, 's'); + // DocuImage version + newParameter("servlet.docuimage.version", "?", null, 's'); + // AuthOps instance for authentication + newParameter("servlet.auth.op", null, null, 's'); // Executor for image operations newParameter("servlet.worker.imageexecutor", null, null, 's'); // Executor for PDF operations @@ -84,69 +88,55 @@ // Executor for PDF-image operations newParameter("servlet.worker.pdfimageexecutor", null, null, 's'); - /* - * parameters that can be read from config file have a type 'f' - */ + /* + * parameters that can be read from config file have a type 'f' + */ - // image file to send in case of error - newParameter( - "error-image", - new File("img/digilib-error.png"), - null, - 'f'); - // image file to send if access is denied - newParameter( - "denied-image", - new File("img/digilib-denied.png"), - null, - 'f'); - // image file to send if image file not found - newParameter( - "notfound-image", - new File("img/digilib-notfound.png"), - null, - 'f'); - // base directories in order of preference (prescaled versions last) - String[] bd = { "/docuserver/images", "/docuserver/scaled/small" }; - newParameter("basedir-list", bd, null, 'f'); - // use authentication information - newParameter("use-authorization", Boolean.FALSE, null, 'f'); - // authentication configuration file - newParameter("auth-file", new File("digilib-auth.xml"), null, 'f'); - // sending image files as-is allowed - newParameter("sendfile-allowed", Boolean.TRUE, null, 'f'); - // Type of DocuImage instance - newParameter( - "docuimage-class", - "digilib.image.ImageLoaderDocuImage", - null, - 'f'); - // part of URL used to indicate authorized access - newParameter("auth-url-path", "authenticated/", null, 'f'); - // degree of subsampling on image load - newParameter("subsample-minimum", new Float(2f), null, 'f'); - // default scaling quality - newParameter("default-quality", new Integer(1), null, 'f'); - // use mapping file to translate paths - newParameter("use-mapping", Boolean.FALSE, null, 'f'); - // mapping file location - newParameter("mapping-file", new File("digilib-map.xml"), null, 'f'); - // log4j config file location - newParameter("log-config-file", new File("log4j-config.xml"), null, 'f'); - // maximum destination image size (0 means no limit) - newParameter("max-image-size", new Integer(0), null, 'f'); - // number of working threads - newParameter("worker-threads", new Integer(1), null, 'f'); - // max number of waiting threads - newParameter("max-waiting-threads", new Integer(20), null, 'f'); - // number of pdf-generation threads - newParameter("pdf-worker-threads", new Integer(1), null, 'f'); - // max number of waiting pdf-generation threads - newParameter("pdf-max-waiting-threads", new Integer(20), null, 'f'); - // number of pdf-image generation threads - newParameter("pdf-image-worker-threads", new Integer(1), null, 'f'); - // max number of waiting pdf-image generation threads - newParameter("pdf-image-max-waiting-threads", new Integer(10), null, 'f'); + // image file to send in case of error + newParameter("error-image", new File("img/digilib-error.png"), null, 'f'); + // image file to send if access is denied + newParameter("denied-image", new File("img/digilib-denied.png"), null, 'f'); + // image file to send if image file not found + newParameter("notfound-image", new File("img/digilib-notfound.png"), null, 'f'); + // base directories in order of preference (prescaled versions last) + String[] bd = { "sample-images" }; + newParameter("basedir-list", bd, null, 'f'); + // use authentication information + newParameter("use-authorization", Boolean.FALSE, null, 'f'); + // authentication configuration file + newParameter("auth-file", new File("digilib-auth.xml"), null, 'f'); + // sending image files as-is allowed + newParameter("sendfile-allowed", Boolean.TRUE, null, 'f'); + // Type of DocuImage instance + newParameter("docuimage-class", "digilib.image.ImageLoaderDocuImage", null, 'f'); + // part of URL used to indicate authorized access + newParameter("auth-url-path", "authenticated/", null, 'f'); + // degree of subsampling on image load + newParameter("subsample-minimum", new Float(2f), null, 'f'); + // default scaling quality + newParameter("default-quality", new Integer(2), null, 'f'); + // use mapping file to translate paths + newParameter("use-mapping", Boolean.FALSE, null, 'f'); + // mapping file location + newParameter("mapping-file", new File("digilib-map.xml"), null, 'f'); + // log4j config file location + newParameter("log-config-file", new File("log4j-config.xml"), null, 'f'); + // maximum destination image size (0 means no limit) + newParameter("max-image-size", new Integer(0), null, 'f'); + // number of working threads + newParameter("worker-threads", new Integer(1), null, 'f'); + // max number of waiting threads + newParameter("max-waiting-threads", new Integer(20), null, 'f'); + // timeout for worker threads (ms) + newParameter("worker-timeout", new Integer(60000), null, 'f'); + // number of pdf-generation threads + newParameter("pdf-worker-threads", new Integer(1), null, 'f'); + // max number of waiting pdf-generation threads + newParameter("pdf-max-waiting-threads", new Integer(20), null, 'f'); + // number of pdf-image generation threads + newParameter("pdf-image-worker-threads", new Integer(1), null, 'f'); + // max number of waiting pdf-image generation threads + newParameter("pdf-image-max-waiting-threads", new Integer(10), null, 'f'); // PDF generation temp directory newParameter("pdf-temp-dir", "pdf_temp", null, 'f'); // PDF generation cache directory @@ -155,17 +145,18 @@ newParameter("img-diskcache-allowed", Boolean.TRUE, null, 'f'); // default type of error message (image, text, code) newParameter("default-errmsg-type", "image", null, 'f'); - } + } - /** - * Constructor taking a ServletConfig. Reads the config file location from - * an init parameter and loads the config file. Calls <code>readConfig()</code>. - * - * @see readConfig() - */ - public DigilibServletConfiguration(ServletContext c) throws Exception { - readConfig(c); - } + /** + * Constructor taking a ServletConfig. Reads the config file location from + * an init parameter and loads the config file. Calls + * <code>readConfig()</code>. + * + * @see readConfig() + */ + public DigilibServletConfiguration(ServletContext c) throws Exception { + readConfig(c); + } /** * read parameter list from the XML file in init parameter "config-file" or @@ -184,60 +175,66 @@ } String fn = c.getInitParameter("config-file"); if (fn == null) { + logger.debug("readConfig: no param config-file"); fn = ServletOps.getConfigFile("digilib-config.xml", c); - if (fn == null) { - logger.fatal("readConfig: no param config-file"); - throw new ServletException("ERROR: no digilib config file!"); - } } File f = new File(fn); - // setup config file list reader - XMLListLoader lilo = new XMLListLoader("digilib-config", "parameter", - "name", "value"); - // read config file into HashMap - Map<String, String> confTable = lilo.loadURL(f.toURL().toString()); + if (f.canRead()) { + // setup config file list reader + XMLListLoader lilo = new XMLListLoader("digilib-config", "parameter", "name", "value"); + // read config file into HashMap + Map<String, String> confTable = lilo.loadURL(f.toURL().toString()); - // set config file path parameter - setValue("servlet.config.file", f.getCanonicalPath()); + // set config file path parameter + setValue("servlet.config.file", f.getCanonicalPath()); - /* - * read parameters - */ + /* + * read parameters + */ - for (Entry<String, String> confEntry : confTable.entrySet()) { - Parameter p = get(confEntry.getKey()); - if (p != null) { - if (p.getType() == 's') { - // type 's' Parameters are not overwritten. - continue; - } - if (!p.setValueFromString(confEntry.getValue())) { - /* - * automatic conversion failed -- try special cases - */ + for (Entry<String, String> confEntry : confTable.entrySet()) { + Parameter p = get(confEntry.getKey()); + if (p != null) { + if (p.getType() == 's') { + // type 's' Parameters are not overwritten. + continue; + } + if (!p.setValueFromString(confEntry.getValue())) { + /* + * automatic conversion failed -- try special cases + */ - // basedir-list - if (confEntry.getKey().equals("basedir-list")) { - // split list into directories - String[] dirs = FileOps.pathToArray(confEntry.getValue()); - for (int j = 0; j < dirs.length; j++) { - // make relative directory paths be inside the webapp - dirs[j] = ServletOps.getFile(dirs[j], c); - } - if (dirs != null) { - p.setValue(dirs); + // basedir-list + if (confEntry.getKey().equals("basedir-list")) { + // split list into directories + String[] dirs = FileOps.pathToArray(confEntry.getValue()); + for (int j = 0; j < dirs.length; j++) { + // make relative directory paths be inside the + // webapp + dirs[j] = ServletOps.getFile(dirs[j], c); + } + if (dirs != null) { + p.setValue(dirs); + } } } + } else { + // parameter unknown -- just add + newParameter(confEntry.getKey(), null, confEntry.getValue(), 'f'); } - } else { - // parameter unknown -- just add - newParameter(confEntry.getKey(), null, confEntry.getValue(), - 'f'); + } + } else { + logger.warn("No digilib config file! Using defaults!"); + // update basedir-list + String[] dirs = (String[]) this.getValue("basedir-list"); + for (int j = 0; j < dirs.length; j++) { + // make relative directory paths be inside the + // webapp + dirs[j] = ServletOps.getFile(dirs[j], c); } } // initialise static DocuImage class instance - DigilibServletConfiguration.docuImageClass = (Class<DocuImageImpl>) Class - .forName(getAsString("docuimage-class")); + DigilibServletConfiguration.docuImageClass = (Class<DocuImageImpl>) Class.forName(getAsString("docuimage-class")); setValue("servlet.docuimage.version", getDocuImageInstance().getVersion()); }