errors.internally=true 
                - Indicates whether Imago should handle errors internally by sending the error and
                exception stack trace to the client or return the HTTP error code to the web server
                to be handled.
 
                errors.environment=true 
                - Dumps the XSLT environment to the log at startup and on error. If errors are
                handled internally the environment is also appended to the end of any error page.
 
                errors.404=  
                - Specify a file not found page
 
                
                errors.500=  
                - Specify a generic server error page
 
                
                container.2.2=org.xenei.imago.framework.containers.Container2_2 
                - The class that implements the servlet container version-specific methods.
                In this case it is specifically for a version 2.2 container.
 
                
                container.1.0=org.xenei.imago.framework.containers.Container1_0 
                - The class that implements the servlet container version-specific methods.
                In this case it is specifically for a version 1.0 container.
 
            
            If the specified container version can not be found the next lower version will be used.
            For example if a 2.3 container were used with the above configuration the class
            
org.xenei.imago.framework.containers.Container2_2 would be used.
 
            
            All initialization-time options begin with the
            
init prefix.
            
                init.query.0=http://www.imago.org/index.xml
                    init.query.1=http://www.imago.org/aBigDocument.xml 
                - The initial queries to execute. Initialization queries are sent to Imago after
                the init.delay timeout. The intention is to provide a method to "preload"
                some of the data structures. To preload the cache it is recommended that these
                queries request fairly complex documents. The queries are performed sequentially.
 
                
                init.delay=5000 
                - The delay in milliseconds between the time the servlet init routine ends and
                the first init.query is sent. On heavily loaded systems this may need to be in
                the 5-10 second range.
 
            
             
                  
            The launcher is used to speed-up processing for classes
            that are either all static method extension elements or are specifically designed to
            be thread safe. The launcher creates and registers an instance of each class listed then
            passes it control when needed.  This eliminates the overhead of creating an instance of
            the class during the request. All launcher options begin with the 
launcher
            prefix.
            
                init.Launcher.classes.0=Forms 
                - The first launcher class. In this case called 
Forms.
 
                init.Launcher.classes.1=Counter 
                - The second launcher class. In this case called 
Counter.
 
                init.Launcher.class.Forms=org.xenei.imagoX.forms.ImagoForm 
                - Defines the class for the Forms launcher. In this case a forms processor defined
                in the ImagoX packages.
 
                init.Launcher.init.Forms.number=org.xenei.imagoX.forms.NumberValidator
                    init.Launcher.init.Forms.date=org.xenei.imagoX.forms.DateValidator
                    init.Launcher.init.Forms.choice=org.xenei.imagoX.forms.ChoiceValidator
                    init.Launcher.init.Forms.image=org.xenei.imagoX.forms.ImageValidator
                    init.Launcher.init.Forms.email=org.xenei.imagoX.forms.EmailValidator 
                - Defines the initialization parameters for the Forms class. The
                init() method of class org.xenei.imagoX.forms.ImagoForm will be called with a Configurations
                object containing the lines above with the init.Launcher.init.Forms prefix removed.
 
                init.Launcher.class.Counter=org.xenei.imagoX.counter.ImagoCounter 
                - Defines the class for the Counter launcher. In this case a hit counter implemented
                in the ImagoX packages.
 
                init.Launcher.init.Counter.class=org.xenei.imagoX.counter.FileCounterData
                    init.Launcher.init.Counter.init.directory=/tmp 
                - Initialization information needed by the Counter class that implements a file-based
                hit counter.
 
                init.Launcher.init.Counter.class=org.xenei.imagoX.counter.DBCounterData
                    init.Launcher.init.Counter.init.db.driver=org.gjt.mm.mysql.Driver
                    init.Launcher.init.Counter.init.db.host=jdbc:mysql://xenei.org/imagoData
                    init.Launcher.init.Counter.init.db.user=imago
                    init.Launcher.init.Counter.init.db.password=imago 
                - Initialization for the Counter class that uses a MySQL database to store the hit counts.
                Any database supported by LDBC may be used.
 
            
             
            
            
            
                sax.parser.class=org.apache.xerces.parsers.SAXParser 
                - The SAX parser to use. If the parser is not defined the default system parser
                will be used.
 
            
            
            
 SAX Parser Features 
            This area is rather odd but necessary due to the way properties work.
            If http://url is used as part of the name, the properties strip off the "http" and
            make it the key.  Thus the following construct may be used:
            
sax.feature.n=arbitrary_name causes
            
sax.feature.arbitrary_name.url and
            
sax.feature.arbitrary_name.state to be read and processed.
            
            
            Example:
            
                sax.feature.0=namespaces
                    sax.feature.1=prefixes
                    sax.feature.2=java-encodings 
                - The list of features we are defining.
 
                sax.feature.namespaces.url=http://xml.org/sax/features/namespaces 
                - The URL for the namespaces feature.
 
                sax.feature.namespaces.state=true 
                - The state we are requesting, true or false.
 
                sax.feature.prefixes.url=http://xml.org/sax/features/namespace-prefixes
                    sax.feature.prefixes.state=true 
                - The prefixes configuration.
 
                sax.feature.java-encodings.url=http://apache.org/xml/features/allow-java-encodings
                    sax.feature.java-encodings.state=true 
                - The java-encodings configuration.
 
            
             
            
            
            
            
            Define the desired cache configuration. There are several cache
            options to choose from. The various types of caches are explained here:
            
            
            
            
            This configuration is not recommended. Without a cache Imago is required to
            generate complete transforms for each request.  A well-tuned cache can significantly
            increase performance.
            
                cache=org.xenei.util.cache.NoCache 
                - Defines a cache that does nothing. It always accepts entries and never has
                anything cached.
 
            
             
            
            
            
            Imago is shipped with the Memory Cache enabled.
            
                cache=org.xenei.util.cache.memcache.MemoryCache 
                - Specifies the MemoryCache as the cache.
 
                cache.cacheclass=java.util.HashMap 
                - Specifies that the cache should use the standard HashMap to store data internally.
                Any class that implements 
java.util.Map may be used.
 
                cache.reaper.maxage=30 
                - The maximum age in minutes of a cache entry before it is considered stale and removed.
 
                cache.reaper.period=45 
                - The period in minutes between sweeps of the cache for stale objects. This number
                should be larger than the 
maxage parameter.
 
                cache.reaper.priority=1 
                - The thread priority that the reaper will run with.  If this is not set then
                the priority of the scheduler will be used.
 
                cache.mem.min=1 
                - The minimum free heap in MBs.  This is the number of MBs required to be free when
                the cache is operating.  If the free memory drops below this number the cache attempts
                an emergency clean of stale objects until the minimum free memory is achieved or the
                cache is disabled.
 
                cache.mem.max=4 
                - This is the maximum memory used by the application.  It is not possible to
                differentiate between cache and non-cache items. If this limit is exceeded then
                an emergency clean of stale objects is attempted.
 
                cache.lock.maxage=10 
                - The maximum age of a cache lock in seconds.  If a lock exceeds this age it is
                assumed to be abandoned and may be broken.
 
                cache.lock.wait.count=5 
                - The maximum number of times a thread should wait for a cache lock before giving
                up and proceeding to rebuild the object.  If this is set too low the cache will build
                unnecessary objects, if too high the system will slow down waiting for locks when it
                could rebuild the object faster.
 
                cache.lock.wait.time=100 
                - The number of timer ticks in milliseconds the thread should wait
                between attempts to get a cache lock.
 
            
             
            
            
            
            The DBCache utilizes a database. This can make it easy for
            multiple Imago servers to synchronize their caches.  This can be particularly useful
            if Imago is being run in a clustered environment.
            
                cache=org.xenei.util.cache.dbcache.DBCache 
                - Use the DBCache.
 
                cache.driver=com.mysql.jdbc.Driver 
                - The JDBC driver to use.  This must be a driver and database supported by LDBC.
 
                cache.url=jdbc:mysql://db.xenei.org/imago 
                - The URL for the database.
 
                cache.user=imago 
                - The user ID for the database.
 
                cache.password=imago 
                - The password for the database.
 
                cache.reaper.period=15 
                - The period in hours between sweeps of the cache for expired objects. In the
                DB cache an object is expired if it has changed.  The reaper reads and validates
                every object in the table.
 
                cache.reaper.priority=1 
                - The thread priority the reaper will run with.  If this is not set
                the priority of the scheduler will be used.
 
                cache.lock.maxage=10 
                - The maximum age of a cache lock in seconds.  If a lock exceeds this age it is
                assumed to be abandoned and may be broken.
 
                cache.lock.wait.count=5 
                - The maximum number of times a thread should wait for a cache lock before giving
                up and proceeding to rebuild the object.  If this is set too low the cache will
                build unnecessary objects, if set too high the system will slow down waiting for
                locks when it could rebuild the object faster.
 
                cache.lock.wait.time=100 
                - The number of timer ticks in milliseconds the thread should wait between
                attempts to get a cache lock.
 
            
             
            
            
            
            The slow cache does not perform caching itself. It is used
            to wrap a slower caching implementation. For example a remote database cache may
            be too slow for regular operation but by wrapping it in a slow cache there is some
            speed improvement.
            
                cache=org.xenei.util.cache.slowcache.SlowCache 
                - Use the slow cache wrapper.
 
                cache.wraps=org.xenei.util.cache.dbcache.DBCache 
                - Define a wrapping of a database cache.
 
                cache.wraps.driver=com.mysql.jdbc.Driver
                    cache.wraps.url=jdbc:mysql://db.xenei.org/imago
                    cache.wraps.user=imago
                    cache.wraps.password=imago
                    cache.wraps.reaper.period=15
                    cache.wraps.reaper.priority=1
                    cache.wraps.lock.maxage=10
                    cache.wraps.lock.wait.count=5
                    cache.wraps.lock.wait.time=100 
                - The DB cache options.
 
            
             
            
            
            
            The Xenei Cache is a two-level cache mechanism. This is
            particularly useful if you want to have a shallow cache for frequently used objects
            and a deeper cache for less frequently used objects, such as an in-memory cache
            backed by a database cache.
            
                cache=org.xenei.util.cache.xeneicache.XeneiCache 
                - Use the Xenei Cache.
 
                cache.synchronizedlocks=false 
                - Synchronized locks requires that both level1 and level2 caches be locked
                before a lock is returned.  Otherwise the first level lock is tried and if it
                succeeds the second level is tried; regardless of the result of the second
                level lock the lock is returned.
 
                cache.level1=org.xenei.util.cache.memcache.MemoryCache 
                - Level 1 uses the memory cache.
 
                cache.level1.cacheclass=java.util.HashMap
                    cache.level1.reaper.maxage=30
                    cache.level1.reaper.period=45
                    cache.level1.reaper.priority=1
                    cache.level1.mem.min=1
                    cache.level1.mem.max=4
                    cache.level1.lock.maxage=10
                    cache.level1.lock.wait.count=5
                    cache.level1.lock.wait.time=100 
                - The memory cache definition.
 
                cache.level2=org.xenei.util.cache.slowcache.SlowCache 
                - Level 2 uses the slow cache wrapper.
 
                cache.level2.wraps=org.xenei.util.cache.dbcache.DBCache 
                - It is wrapping a database cache.
 
                cache.level2.wraps.driver=com.mysql.jdbc.Driver
                    cache.level2.wraps.url=jdbc:mysql://db.xenei.org/imago
                    cache.level2.wraps.user=imago
                    cache.level2.wraps.password=imago
                    cache.level2.wraps.reaper.period=15
                    cache.level2.wraps.reaper.priority=1
                    cache.level2.wraps.lock.maxage=10
                    cache.level2.wraps.lock.wait.count=5
                    cache.level2.wraps.lock.wait.time=100 
                - The DB cache options.
 
            
             
            
            
            
            
            The timed watchable container periodically scans TimedWatchable
            entries and updates their timestamps. If the entry is stale (untouched) it is removed
            from the cache. Changes to source files will only be detected during a scan.
            
            
            The cache is implemented with a SoftReference so any items may be removed by the
            garbage collector when trying to free up heap space. This only works if the time check
            value is fairly high with respect to the demands on the system.
            
                timedwatchable.timecheck=30 
                - The frequency in minutes at which the cache is scanned (default 30 minutes). Setting
                timecheck value to 0 (zero) forces a timecheck on every request. This is useful on a
                development system.
 
                timedwatchable.priority=1 
                - The priority at which the scanning thread runs (default Thread.NORM_PRIORITY).
 
                timedwatchable.maxage=15 
                - The maximum age in minutes of an untouched entry (default 15 minutes).
                If an entry has not been used within this time it is removed.
 
            
             
            
            
            
            
            
                clientmap=/WEB-INF/ClientMap.xml 
                - The URL location and name of the ClientMap.xml file,
                relative to the Imago servlet content directory.
 
            
             
            
            
            
            
            
                processmap=/WEB-INF/ProcessMap.xml 
                - The URL location and name of the ProcessMap.xml file,
                relative to the Imago servlet content directory.
 
            
             
            
            
            
            
            These are the extensions available in the ImagoX or imago.extensions package.
            
            
            
            The ImagoX Counter extension implements either a file-based or database-based "hit" counter.
            The Counter Extension configuration is discussed in
            
ImagoX Counter Extension. Further information
            is shown in the 
Launcher Configuration section.
            
 
            
            
             ImagoX Forms is an extensible HTTP GET/POST mechanism
            that provides field validation, validation error marking, and is resistant to hack attempts
            because Forms ignores valid input and extraneous input fields.
            The Forms Extension configuration is discussed in
            
ImagoX Forms Extension. Further information
            is shown in the 
Launcher Configuration section.
            
 
            
            
            ImagoX Mail can send email to one or more "to" or "bcc" addresses,
            and HTML markup may be included.
            The Mail Extension configuration is discussed in
            
ImagoX Mail Extension.