Mercurial > hg > digilib-old
view servlet/src/digilib/servlet/DigilibConfiguration.java @ 290:5d0c0da080ec gen2 scaleable_1
digilib servlet version 2 ("scaleable digilib")
- first stab at using thread pools to limit resource use
- using Dug Leas util.concurrent
- doesn't mix with tomcat :-(
author | robcast |
---|---|
date | Thu, 21 Oct 2004 20:53:37 +0200 |
parents | |
children | 1cec876f2788 |
line wrap: on
line source
/* * DigilibConfiguration -- Holding all parameters for digilib servlet. * * Digital Image Library servlet components * * Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. * * Please read license.txt for the full details. A copy of the GPL may be found * at http://www.gnu.org/copyleft/lgpl.html * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA * */ package digilib.servlet; import java.io.File; import java.util.Iterator; import java.util.Map; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Logger; import digilib.image.DocuImage; import digilib.image.DocuImageImpl; import digilib.io.FileOps; import digilib.io.XMLListLoader; /** * 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> * * @author casties * */ public class DigilibConfiguration extends ParameterMap { private static final long serialVersionUID = -6630487070791637120L; /** DocuImage class instance */ private Class docuImageClass = null; /** Log4J logger */ private Logger logger = Logger.getLogger("digilib.config"); /** * Default constructor defines all parameters and their default values. * */ public DigilibConfiguration() { // create HashMap(20) super(20); // we start with a default logger config BasicConfigurator.configure(); /* * 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.dlVersion, 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.JAIDocuImage.class, null, 's'); // AuthOps instance for authentication newParameter("servlet.auth.op", null, null, 's'); // worker queues newParameter("servlet.fast.queue", null, null, 's'); newParameter("servlet.slow.queue", null, null, 's'); /* * 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("/docuserver/images/icons/scalerror.gif"), null, 'f'); // image file to send if access is denied newParameter( "denied-image", new File("/docuserver/images/icons/denied.gif"), 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'); // Debug level newParameter("debug-level", new Integer(5), null, 'f'); // Type of DocuImage instance newParameter( "docuimage-class", "digilib.image.JAIDocuImage", 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'); // use safe (but slower) directory indexing newParameter("safe-dir-index", Boolean.FALSE, null, 'f'); // number of fast worker threads newParameter("worker-fast-lanes", new Integer(2), null, 'f'); // length of fast worker queue newParameter("worker-fast-queue", new Integer(100), null, 'f'); // number of slow worker threads newParameter("worker-slow-lanes", new Integer(2), null, 'f'); // length of slow worker queue newParameter("worker-slow-queue", new Integer(100), 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 DigilibConfiguration(ServletConfig c) throws Exception { this(); readConfig(c); } /** * read parameter list from the XML file in init parameter "config-file" */ public void readConfig(ServletConfig c) throws Exception { /* * Get config file name. The file name is first looked for as an init * parameter, then in a fixed location in the webapp. */ if (c == null) { // no config no file... return; } String fn = c.getInitParameter("config-file"); if (fn == null) { 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 confTable = lilo.loadURL(f.toURL().toString()); // set config file path parameter setValue("servlet.config.file", f.getCanonicalPath()); /* * read parameters */ for (Iterator i = confTable.keySet().iterator(); i.hasNext();) { String key = (String) i.next(); String val = (String) confTable.get(key); Parameter p = get(key); if (p != null) { if (p.getType() == 's') { // type 's' Parameters are not overwritten. continue; } if (!p.setValueFromString(val)) { /* * automatic conversion failed -- try special cases */ // basedir-list if (key.equals("basedir-list")) { // split list into directories String[] sa = FileOps.pathToArray(val); if (sa != null) { p.setValue(sa); } } } } else { // parameter unknown -- just add newParameter(key, null, val, 'f'); } } } /** * Creates a new DocuImage instance. * * The type of DocuImage is specified by docuImageType. * * @return DocuImage */ public DocuImage getDocuImageInstance() { DocuImageImpl di = null; try { if (docuImageClass == null) { docuImageClass = Class.forName(getAsString("docuimage-class")); } di = (DocuImageImpl) docuImageClass.newInstance(); } catch (Exception e) { } return di; } /** * @return Returns the docuImageClass. */ public Class getDocuImageClass() { return docuImageClass; } /** * @param docuImageClass The docuImageClass to set. */ public void setDocuImageClass(Class docuImageClass) { this.docuImageClass = docuImageClass; } }