<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<!-- 
     This xconf file is used in the deployed war file, it is identical to
     the forrest-core.xconf file with the exception the the location of the
     plugin files.
-->

<!-- NOTE: Would committers please keep these xconf files synchronised:
  forrest-core-webapp.xconf forrest-core.xconf
-->

<components>
  
<!--+
    |  This file defines the Cocoon core components.
    +-->

  <!-- Include the core roles definitions. This is for the sake of clarity,
       as they are implicitely loaded at startup, but we may want to remove
       this implicit behaviour in the future now that we have the include
       mechanism. -->
  <include src="resource://org/apache/cocoon/cocoon.roles"/>

<!--+
    |  This is the Apache Cocoon configuration file. This is the place
    |  where you configure the components that Cocoon uses internally (stuff
    |  like the cache) or handles to the pipeline components
    |  (stuff like XML parsers or XSLT processors).
    +-->

<!--+
    | cocoon-template and cocoon-template-expression block
    | config - start
    +-->
    <component role="org.apache.cocoon.template.script.ScriptManager" class="org.apache.cocoon.template.script.DefaultScriptManager"/>
    <component role="org.apache.cocoon.template.script.InstructionFactory" class="org.apache.cocoon.template.script.DefaultInstructionFactory"/>
    <component role="org.apache.cocoon.template.expression.StringTemplateParser" class="org.apache.cocoon.template.expression.JXTGStringTemplateParser"/>

     <!-- Include roles -->
  <include src="resource://org/apache/cocoon/components/expression/expression.roles"/>
  <include src="resource://org/apache/cocoon/components/accessor/accessor.roles"/>

  <expression-factory/>
  <expression-compilers>
    <component-instance class="org.apache.cocoon.components.expression.jxpath.JXPathCompiler" name="default"/>
    <component-instance class="org.apache.cocoon.components.expression.jexl.JexlCompiler" name="jexl"/>
    <component-instance class="org.apache.cocoon.components.expression.jxpath.JXPathCompiler" name="jxpath"/>
  </expression-compilers>
  <string-template-parsers>
    <component-instance class="org.apache.cocoon.template.expression.JXTGStringTemplateParser" name="jxtg"/>
    <component-instance class="org.apache.cocoon.template.expression.DefaultStringTemplateParser" name="default"/>
  </string-template-parsers>
<!--+
    | cocoon-template and cocoon-template-expression block
    | config - end
    +-->
<!-- =========================== Sitemap =============================== -->

  <!--+
      | New implementation of the sitemap. It is interpreted, so load times
      | are super-fast, and request processing is slightly faster than with
      | the compiled engine thanks to the HotSpot VM.
      |
      | Reloading of the sitemap:
      |   The check-reload attribute determines if the sitemap is to be
      |   reloaded on change.
      |   Set to "no", the sitemap is generated once at startup.
      |   Set to "yes", the sitemap is regenerated if it changes.
      |
      | For development environment, set the check-reload to yes.
      | For production environment, it is advisable to set check-reload to no.
      +-->
  <sitemap check-reload="yes" file="context://sitemap.xmap" logger="sitemap"/>
  <!-- config="resource://org/apache/cocoon/components/treeprocessor/treeprocessor-builtins.xml" -->
  <!-- ========================= Sitemap Flowscript ========================== -->

  <!--+
      |  The <flow-interpreters> element is used to describe the flowscript
      |  engines usedd by the current instance.
      |
      |  The attributes recognized by the <flow-interpreters> element are:
      |
      |    default (string value):
      |
      |       the default interpreted language assumed for <map:script>
      |       elements which do not specify a "language" attribute. If not
      |       present, the first language that's described within the
      |       <flow-interpreters> element is assumed to be the default
      |       language.
      |
      |  Within <flow-interpreters> only <component-instance> elements are
      |  recognized. The attributes recognized by this element are "name"
      |  and "class". "name" specifies the name of a scripting language,
      |  and "class" defines the Java class that implements it. See
      |  org.apache.cocoon.components.flow.Interpreter for the Cocoon
      |  interface with an scripting language interpreter.
      |
      |  A <component-instance> element contains as subelements the
      |  following elements:
      |
      |    reload-scripts (boolean value, default false):
      |       whether to check if the scripts source files are modified.
      |       Checking for modification is an expensive operation, so leave
      |       it disabled in a production environment. If not present it is
      |       assumed to be "false" (if no property is overriding this). When
      |       "true" *all* script files are
      |       checked for modification on each function invocation done using
      |       <map:call function="...">, but not more frequent than the value
      |       of "check-time" (see below).
      |       The default for this function is determined by the value of the
      |       reloading property 'org.apache.cocoon.reloading.flow'.
      |
      |    check-time (long value, default 1000):
      |       time in miliseconds between the checks for the last modification
      |       date of script files.
      |
      |    debugger (boolean value, default false):
      |       whether support for the JavaScript debugger should be enabled in
      |       the control flow.
      +-->
  <flow-interpreters default="javascript" logger="flow">
    <!-- FOM (Flow Object Model) -->
    <component-instance exported="false" name="javascript" class="org.apache.cocoon.components.flow.javascript.fom.FOM_JavaScriptInterpreter">
      <load-on-startup>resource://org/apache/cocoon/components/flow/javascript/fom/fom_system.js</load-on-startup>
      <!--
        <reload-scripts>true</reload-scripts>
        <check-time>4000</check-time>
        -->
      <!--  <debugger>enabled</debugger> -->  <!-- JavaScript Debugger support -->
    </component-instance>
  </flow-interpreters>

  <!--+
      | Configuration for the continuations manager.
      |
      | This section specifies the default time-to-live of continuations
      | in miliseconds using the "time-to-live" attribute of
      | the <continuations-manager> element.
      |
      | The <expirations-check> element specifies different policies for
      | expiring continuations. Currently only the "periodic" type is
      | supported.
      |
      | If you need higher security you can bind your continuations
      | to session. This way only the session that initially created
      | the continuation can later resume it. Also if session gets
      | invalidated all continuations are invalidated as well.
      | Enable this feature for web applications by setting
      | 'session-bound-continuations' to true.
      +-->
  <continuations-manager logger="flow.manager" time-to-live="3600000"
                         session-bound-continuations="false">
    <expirations-check type="periodic">
      <offset>180000</offset>
      <period>180000</period>
    </expirations-check>
  </continuations-manager>

<!-- =================== Sitemap Input/Output Modules ====================== -->

  <!--+
      | InputModules are a replacement to reading values directly
      | e.g. from request parameters. By using this abstraction and
      | indirection, other components can be more generic and changes
      | to the application logic are easier.
      |
      | A number of components already use InputModules: the sitemap processor, 
      | flow, some matchers, the linkrewriting transformer, database actions
      | and more.
      |
      | For example the sitemap processor allows to obtain a value
      | named "foo" from an the InputModule for request parameters by
      | writing {request-param:foo} wherever a sitemap variable is
      | allowed. 
      |
      | Some InputModules need the help of other InputModules to
      | obtain values and only apply a function to the obtained value
      | or change the name of the attribute. These modules usually
      | carry "Meta" in their name. An example is the ChainMetaModule
      | which tries several other modules in turn until a non-null
      | value is obtained or all modules are tied.
	  |
      | For details and optional configuration parameters refer to the
      | accompanying javadocs.
      +-->
  <input-modules>
    <component-instance class="org.apache.cocoon.components.modules.input.GlobalInputModule" logger="core.modules.input" name="global"/>
    <component-instance class="org.apache.cocoon.components.modules.input.RequestModule" logger="core.modules.input" name="request"/>
    <component-instance class="org.apache.cocoon.components.modules.input.BaseLinkModule" logger="core.modules.input" name="baselink"/>
    <component-instance class="org.apache.cocoon.components.modules.input.SessionModule" logger="core.modules.input" name="session"/>
    <component-instance class="org.apache.cocoon.components.modules.input.RequestParameterModule" logger="core.modules.input" name="request-param"/>
    <component-instance class="org.apache.cocoon.components.modules.input.RawRequestParameterModule" logger="core.modules.input" name="raw-request-param"/>
    <component-instance class="org.apache.cocoon.components.modules.input.RequestAttributeModule" logger="core.modules.input" name="request-attr"/>
    <component-instance class="org.apache.cocoon.components.modules.input.HeaderAttributeModule" logger="core.modules.input" name="request-header"/>
    <component-instance class="org.apache.cocoon.components.modules.input.SessionAttributeModule" logger="core.modules.input" name="session-attr"/>
    <component-instance class="org.apache.cocoon.components.modules.input.SystemPropertyModule" logger="core.modules.input" name="system-property"/>
    <component-instance class="org.apache.cocoon.components.modules.input.StringConstantModule" logger="core.modules.input" name="constant"/>
    <component-instance class="org.apache.cocoon.components.modules.input.RandomNumberModule" logger="core.modules.input" name="random"/>
    <component-instance class="org.apache.cocoon.components.modules.input.DigestMetaModule" logger="core.modules.input" name="digest"/>
    <component-instance class="org.apache.cocoon.components.modules.input.DateInputModule" logger="core.modules.input" name="date">
      <!-- <format>EEE, d MMM yyyy HH:mm:ss Z</format> -->
      <!--Eg: Mon, 28 Oct 2002 03:08:49 +1100 -->
    </component-instance>
    <component-instance class="org.apache.cocoon.components.modules.input.NullInputModule" logger="core.modules.input" name="nullinput"/>
    <component-instance class="org.apache.cocoon.components.modules.input.RealPathModule" logger="core.modules.input" name="realpath"/> 
    <component-instance class="org.apache.cocoon.components.modules.input.XMLMetaModule" logger="core.modules.input" name="xmlmeta"/>
    <component-instance class="org.apache.cocoon.components.modules.input.MapMetaModule" logger="core.modules.input" name="mapmeta"/>
    <component-instance class="org.apache.cocoon.components.modules.input.DateMetaInputModule" logger="core.modules.input" name="datemeta"/>
    <component-instance class="org.apache.cocoon.components.modules.input.JXPathMetaModule" logger="core.modules.input" name="jxpath"/>
    <component-instance class="org.apache.cocoon.components.modules.input.SimpleMappingMetaModule" logger="core.modules.input" name="simplemap"/>
    
    <component-instance logger="core.modules.input" name="forrest"    class="org.apache.cocoon.components.modules.input.ChainMetaModule">
      <input-module name="request-param"/>
      <input-module name="request-attr"/>
      <input-module name="session-attr"/>
      <input-module name="properties"/>
    </component-instance>

    
    <component-instance name="properties" class="org.apache.forrest.conf.ForrestConfModule">
      <values>
        <forrest.skin>@project.skin@</forrest.skin>
        <forrest.menu-scheme>@project.menu-scheme@</forrest.menu-scheme>
        <forrest.bugtracking-url>@project.bugtracking-url@</forrest.bugtracking-url>
        <forrest.issues-rss-url>@project.issues-rss-url@</forrest.issues-rss-url>
        <forrest.i18n>@project.i18n@</forrest.i18n>
        <forrest.home>@forrest.home@/</forrest.home>
        <forrest.context>@context.home@</forrest.context>        
        <forrest.skins-dir>@context.home@/skins/</forrest.skins-dir>
        <forrest.stylesheets>@context.home@/resources/stylesheets</forrest.stylesheets>
        <forrest.plugins-src>@forrest.home@/plugins</forrest.plugins-src>
        <forrest.whiteboard-plugins-src>@forrest.home@/whiteboard/plugins</forrest.whiteboard-plugins-src>
        <forrest.plugins>@context.home@/build/plugins</forrest.plugins>
        <forrest.locationmap>@context.home@/locationmap.xml</forrest.locationmap>
        <home>@project.home@</home>
        <staging-dir>@project.build-dir@/@project.site@</staging-dir>
        <skin>@project.skin@</skin>
        <sitemap>@project.home@/@project.sitemap@</sitemap>
        <status>@project.home@/@project.status@</status>
        <skinconf>@project.home@/@project.skinconf@</skinconf>        
        <doc>@project.home@/@project.content-dir@/</doc>
        <content>@project.home@/@project.raw-content-dir@/</content>
        <conf>@project.home@/@project.conf-dir@/</conf>
        <content.xdocs>@project.home@/@project.xdocs-dir@/</content.xdocs>
        <translations>@project.home@/@project.translations-dir@</translations>
        <resources>@project.home@/@project.resources-dir@/</resources>
        <resources.stylesheets>@project.home@/@project.stylesheets-dir@/</resources.stylesheets>
        <resources.images>@project.home@/@project.images-dir@/</resources.images>
        <skins-dir>@project.home@/@project.skins-dir@/</skins-dir>
        <temp-dir>@project.temp-dir@</temp-dir>
      </values>
    </component-instance>

    <component-instance
      class="org.apache.cocoon.components.modules.input.XMLFileModule"
      logger="core.modules.xml" name="skinconf"/>

    <component-instance
      class="org.apache.cocoon.components.modules.input.SimpleMappingMetaModule"
      logger="core.modules.mapper" name="conf">
      <input-module name="skinconf">
        <file src="cocoon://skinconf.xml" reloadable="true" />
      </input-module>
      <prefix>/skinconfig/</prefix>
    </component-instance>

    <!-- For the site: scheme -->
    <component-instance
      class="org.apache.cocoon.components.modules.input.XMLFileModule"
      logger="core.modules.mapper.link" name="linkmap">
    </component-instance>

    <!-- Links to URIs within the site -->
    <component-instance
      class="org.apache.cocoon.components.modules.input.SimpleMappingMetaModule"
      logger="core.modules.mapper.link" name="site"/>

    <!-- Links to external URIs, as distinct from 'site' URIs -->
    <component-instance
      class="org.apache.cocoon.components.modules.input.SimpleMappingMetaModule"
      logger="core.modules.mapper.link" name="ext"/>
      
    <!-- LocationMap is used to map one URL to another, allowing content to be stored anywhere -->
    <component-instance 
      class="org.apache.forrest.locationmap.LocationMapModule" 
      logger="core.modules.mapper.lm" name="lm">
      <file src="cocoon://locationmap.xml"/>
      <cacheable>true</cacheable>
      <cache-lifespan>100000</cache-lifespan>
    </component-instance>

</input-modules>



<!-- ================================= XML ================================ -->

  <!--+
      | Source Factories
      |
      | Each source factory adds a special uri schemes to the system.
      +-->
  <source-factories>
    <component-instance name="file" class="org.apache.excalibur.source.impl.FileSourceFactory"/>
    <component-instance class="org.apache.excalibur.source.impl.ResourceSourceFactory" name="resource"/>
    <component-instance class="org.apache.cocoon.components.source.impl.ContextSourceFactory" name="context"/>
    <component-instance class="org.apache.cocoon.components.source.impl.SitemapSourceFactory" name="cocoon"/>
    <component-instance class="org.apache.cocoon.components.source.impl.ZipSourceFactory" name="zip"/>
    <component-instance class="org.apache.forrest.locationmap.source.impl.LocationmapSourceFactory" name="lm"/>
    <!-- the "*" protocol handles all uri schemes that are not explicitely specified. This includes all
         JDK standard protocols, with special handling of the "file:" protocol which is modifiable
         (can be written to) and traversable (directory structures can be crawled). -->
    <component-instance class="org.apache.excalibur.source.impl.URLSourceFactory" name="*"/>
  </source-factories>
  <!--+
      | Entity resolution catalogs
      |
      | The following parameters are the system-wide configuration for Forrest.
      |
      | There are various ways to do local project-based configuration.
      | See the Apache Forrest documentation:
      | http://forrest.apache.org/docs/your-project.html
      | http://forrest.apache.org/docs/validation.html
      |
      | Parameters:
      |
      | catalog:
      |   The default catalog for DTDs etc. that are shipped with Forrest. 
      |
      |  <parameter name="catalog" value="resources/schema/catalog.xcat"/>
      |
      | However, it is desirable to leave this default catalog config
      | and declare your own local catalogs, which are loaded in addition to
      | the system catalog.
      |
      | local-catalog:
      |   The full filesystem pathname to a single local catalog file.
      |   This catalog could also include nextCatalog instructions.
      |
      |  <parameter name="local-catalog" value="/usr/local/sgml/mycatalog"/>
      |
      | verbosity:
      | The level of messages for status/debug (messages go to standard output)
      | The following messages are provided ...
      |  0 = none
      |  1 = ? (... not sure yet)
      |  2 = 1+, Loading catalog, Resolved public, Resolved system
      |  3 = 2+, Catalog does not exist, resolvePublic, resolveSystem
      |  10 = 3+, List all catalog entries when loading a catalog
      |    (Cocoon also logs the "Resolved public" messages.)
      +-->
  <entity-resolver logger="core.resolver">
    <parameter name="catalog" value="resources/schema/catalog.xcat"/>
<!-- See FOR-917 testing new Cocoon "running modes"
    <parameter name="verbosity" value="1"/>
-->
    <parameter name="verbosity" value="${org.apache.xml.resolver.verbosity}"/>
  </entity-resolver>

  <!--+
      | XML Parser
      |
      | The default parser used in Apache Cocoon is
      | org.apache.excalibur.xml.impl.JaxpParser. Apache Cocoon requires a
      | JAXP 1.1 parser.
      | If you have problems because your servlet environment uses its own
      | parser not conforming to JAXP 1.1 try using the alternative
      | XercesParser instead of the JaxpParser. To activate the XercesParser,
      | change the class attribute to
      |   class="org.apache.excalibur.xml.impl.XercesParser"
      | You will also need to add a system property to your JVM,
      | probably on the startup of your servlet engine like this:
      | -Dorg.apache.excalibur.xml.sax.SAXParser=org.apache.excalibur.xml.impl.XercesParser
      |
      | Configuration for the JaxpParser (not the XercesParser!):
      | - validate (boolean, default = false): This parameter causes the parser
      |     to be a validating parser.
      |     XML validation is only being used for the documentation build.
      |     (If you are going to use it elsewhere, then do so with caution.)
      |     You really should have validated all of your XML documents already,
      |     according to their proper DTD or schema. Do not expect Cocoon
      |     to do it.
      | - namespace-prefixes (boolean, default = false) : do we want
      |     namespaces declarations also as 'xmlns:' attributes ?
      |     Note : setting this to true confuses some XSL processors
      |     (e.g. Saxon).
      | - stop-on-warning (boolean, default = true) : should the parser
      |     stop parsing if a warning occurs ?
      | - stop-on-recoverable-error (boolean, default = true) : should the
      |     parser stop parsing if a recoverable error occurs ?
      | - reuse-parsers (boolean, default = true) : do we want to reuse
      |     parsers or create a new parser for each parse ?
      |     Note : even if this parameter is true, parsers are not recycled
      |     in case of parsing errors : some parsers (e.g. Xerces) do not like
      |     to be reused after failure.
      | - sax-parser-factory (string) : the name of the SAXParserFactory
      |     implementation class to be used instead of using the standard
      |     JAXP mechanism (SAXParserFactory.newInstance()). This allows to
      |     choose unambiguously the JAXP implementation to be used when
      |     several of them are available in the classpath.
      | - document-builder-factory (string) : the name of the
      |     DocumentBuilderFactory implementation to be used (similar to
      |     sax-parser-factory for DOM).
      +-->
  <xml-parser class="org.apache.excalibur.xml.impl.JaxpParser" logger="core.xml-parser" pool-grow="4" pool-max="32" pool-min="8">
    <parameter name="validate" value="false"/>
    <parameter name="namespace-prefixes" value="false"/>
    <parameter name="stop-on-warning" value="true"/>
    <parameter name="stop-on-recoverable-error" value="true"/>
    <parameter name="reuse-parsers" value="false"/>
    <!--parameter name="sax-parser-factory" value="???"/-->
    <!--parameter name="document-builder-factory" value="???"/-->
    <!-- drop-dtd-comments: causes all comment events originating from DTD
         comments to be dropped right after parsing -->
    <parameter name="drop-dtd-comments" value="true"/>
  </xml-parser>


  <!--+
      | XSLT Processor
      |
      | 'incremental-processing' (only works with Xalan) allows the XSLT
      | processor to start the output of the transformation as soon as possible.
      | if set to false, the transforer waits until the end of the
      | transformation to deliver the output.
      | WARNING: * if you enable incremental-processing, you should be aware of
      |            the following bug:
      |            http://issues.apache.org/bugzilla/show_bug.cgi?id=13186
      |          * incremental-processing creates an additional, non-pooled thread.
      |          * using incremental-processing does not save memory, the input
      |            tree will still be build completely.
      |          * incremental processing is a 'static' thing in Xalan: if you
      |            enable it on one xslt-processor, enable it on all.
      +-->
  <xslt-processor logger="core.xslt-processor">
     <parameter name="use-store" value="true"/>
     <parameter name="incremental-processing" value="false"/>
  </xslt-processor>

  <!--+
      | XSLT Processor using xsltc from Xalan
      | For Interpreted Xalan use:
      | <transformer-factory>org.apache.xalan.processor.TransformerFactoryImpl</transformer-factory>
      +-->
  <component class="org.apache.excalibur.xml.xslt.XSLTProcessorImpl" logger="core.xslt-processor" role="org.apache.excalibur.xml.xslt.XSLTProcessor/xsltc">
     <parameter name="use-store" value="false"/>
     <parameter name="transformer-factory" value="org.apache.xalan.xsltc.trax.TransformerFactoryImpl"/>
  </component>
  
  <!--+
      | Xalan XSLT Processor
      +-->
  <component class="org.apache.excalibur.xml.xslt.XSLTProcessorImpl" logger="core.xslt-processor" role="org.apache.excalibur.xml.xslt.XSLTProcessor/xalan">
     <parameter name="use-store" value="false"/>
     <parameter name="incremental-processing" value="false"/>
     <parameter name="transformer-factory" value="org.apache.xalan.processor.TransformerFactoryImpl"/>
  </component>

  <!--+
      | Saxon XSLT Processor
      | For old (6.5.2) Saxon use:
      |  <parameter name="transformer-factory" value="com.icl.saxon.TransformerFactoryImpl"/>
      | For new (7+) Saxon use:
      |  <parameter name="transformer-factory" value="net.sf.saxon.TransformerFactoryImpl"/>
  +-->
  <component logger="core.xslt-processor"
      role="org.apache.excalibur.xml.xslt.XSLTProcessor/saxon"
      class="org.apache.excalibur.xml.xslt.XSLTProcessorImpl">
    <parameter name="use-store" value="false"/>
    <parameter name="incremental-processing" value="false"/>
    <parameter name="transformer-factory" value="net.sf.saxon.TransformerFactoryImpl"/>
  </component>

  <!-- Xpath Processor: -->
  <xpath-processor class="org.apache.excalibur.xml.xpath.XPathProcessorImpl" logger="core.xpath-processor"/>

  <!-- The XMLizers converts different mime-types to XML -->
  <xmlizer>
      <parser mime-type="text/xml" role="org.apache.excalibur.xml.sax.SAXParser"/>
  <!--..... Start configuration from 'tidy' -->


      <parser mime-type="text/html" role="org.apache.excalibur.xml.sax.SAXParser/HTML"/>

<!--..... End configuration from 'tidy' -->
</xmlizer>

<!-- ============================ Object Stores =========================== -->

  <!--+
      | Transient Store: holds objects that don't have to survive shutdown
      +-->
  <transient-store logger="core.store.transient">

     <!--+
         | Indicates how many objects will be hold in the cache.
         | When the number of maxobjects has been reached. The last object
         | in the cache will be thrown out.
         +-->
     <parameter name="maxobjects" value="100"/>

     <!-- Turns swapping of the objects into persistent cache on and off. -->
     <parameter name="use-persistent-cache" value="false"/>
  </transient-store>

  <!--+
      | Transient Store: holds objects that don't have to survive shutdown
      |
      | Common configuration parameters:
      | maxobjects: Indicates how many objects will be held in the cache.
      |    When the number of maxobjects has been reached. The last object
      |    in the cache will be thrown out.
      +-->
   <store logger="core.store">
     <parameter name="maxobjects" value="1000"/>
     <parameter name="use-cache-directory" value="true"/>
   </store>
   
  <!--+
      | Store Janitor: the store garbage collector and memory usage controller.
      |
      | Be careful with the heapsize and freememory parameters. Wrong values
      | can cause high cpu usage. Example configuration:
      | Jvm settings:
      |    -Xmx200000000
      | store-janitor settings:
      |    <parameter name="freememory" value="5000000"/>
      |    <parameter name="heapsize" value="150000000"/>
      |
      | It is recommended to have heapsize equal to -Xmx, especially on Sun's
      | JVM which are unable to shrink its heap once it grows above minimum.
      | Freememory should be greater than amount of memory necessary for normal
      | application operation.
      +-->
  <store-janitor logger="core.store.janitor">
     <!-- How much free memory shall be available in the jvm -->
     <parameter name="freememory" value="1000000"/>
     <!-- Indicates the limit of the jvm memory consumption. The default max
          heapsize for Sun's JVM is 64Mb -->
     <parameter name="heapsize" value="67108864"/>
     <!-- How often shall the cleanup thread check memory -->
     <parameter name="cleanupthreadinterval" value="10"/>
     <!-- Indicates the thread priority of the cleanup thread -->
     <parameter name="threadpriority" value="5"/>
     <!-- How much percent of the elements of each registered Store
          shall be removed when low on memory. Default 10% -->
     <parameter name="percent_to_free" value="10"/>
  </store-janitor>

<!-- ========================= Protocol Handlers =========================== -->


<!-- ================ Internationalization Catalogs =================== -->

  <!--+
      | I18n Bundle Factory
      |
      | BundleFactory loads Bundles with i18n resources for the given locale.
      | Bundles are loaded from the 'catalogue_location'. Bundle base name is
      | 'catalogue_name' value.
      | If 'cache-at-startup' is true then BundleFactory preloads bundles.
      +-->
  <i18n-bundles logger="core.i18n-bundles">
    <catalogue-name>messages</catalogue-name>
    <catalogue-location>i18n/translations</catalogue-location>
    <cache-at-startup>true</cache-at-startup>
  </i18n-bundles>

<!-- ================ XSP (eXtensible Server Pages) ===================== -->

  <!--+
      | Program Generator
      |
      | The ProgamGenerator builds programs from a XML document written in a
      | MarkupLanguage.
      |
      |    auto-reload: whether the system should check if the source was
      |                 modified and reload of consequence.
      |    root-package: the java package to use for the generated classes
      |    preload: whether the system should preload the necessary components
      +-->
  <program-generator logger="core.program-generator">
    <parameter name="auto-reload" value="true"/>
    <parameter name="root-package" value="org.apache.cocoon.www"/>
    <parameter name="preload" value="true"/>
  </program-generator>

  <!--+
      | Programming Languages for the XSP pages
      +-->
  <programming-languages>
    <java-language logger="core.language.java" name="java">

      <!-- Specifies which formatter to use to format source code.
           This parameter is optional.
           It is commented out because of bug #5689: Java "code-formatter"
           incorrectly formats double values -->
      <!--parameter name="code-formatter" value="org.apache.cocoon.components.language.programming.java.JstyleFormatter"/-->

      <!-- A singleton-like implementation of a ClassLoader -->
      <parameter name="class-loader" value="org.apache.cocoon.components.classloader.ClassLoaderManagerImpl"/>

      <!--+
          | Specifies which Java compiler to use. Possible variants are:
          |
          |  - Javac: the java compiler that comes with JDK
          |  - Pizza: the Pizza java compiler
          |  - Jikes: the Jikes java compiler
          |  - EclipseJavaCompiler: the Eclipse JTD java compiler
          |
          | NOTE: the Eclipse JTD is the only java compiler that is capable
          |       of imports classes thru the context classloader. All other
          |       compilers import classes from the JVM classpath and might
          |       normally result in ClassNotFound problems at compilation
          |       time. It is *HIGHLY* suggested that you use this compiler
          |       or you might experience problems in some servlet containers.
          +-->
      <!--parameter name="compiler" value="org.apache.cocoon.components.language.programming.java.Javac"/-->
      <!--parameter name="compiler" value="org.apache.cocoon.components.language.programming.java.Pizza"/-->
      <!--parameter name="compiler" value="org.apache.cocoon.components.language.programming.java.Jikes"/-->
      <parameter name="compiler" value="org.apache.cocoon.components.language.programming.java.EclipseJavaCompiler"/>

    </java-language>

    <!-- Interpreted JavaScript language -->
    <js-language logger="core.language.js" name="js"/>
  </programming-languages>

  <!--+
      | Logisheets
      |
      | This section defines the XSP logicsheets. A logicsheet is a special
      | XSLT stylesheet used to translate user-defined dynamic markup into
      | equivalent XSP markup that embeds directives for a given markup
      | language.
      |
      | Logicsheets are the XSP equivalent of taglibs. For info about
      | the tags included in the default taglibs, please, refer to the
      | documentation.
      +-->
  <markup-languages>
    <xsp-language logger="core.markup.xsp" name="xsp">
      <parameter name="prefix" value="xsp"/>
      <parameter name="uri" value="http://apache.org/xsp"/>

      <!--+
          | Properties for the java language
          +-->
      <target-language name="java">
        <!-- Defines the XSP Core logicsheet for the Java language -->
        <parameter name="core-logicsheet" value="resource://org/apache/cocoon/components/language/markup/xsp/java/xsp.xsl"/>

        <!-- The Request logicsheet: access request parameters -->
        <builtin-logicsheet>
          <parameter name="prefix" value="xsp-request"/>
          <parameter name="uri" value="http://apache.org/xsp/request/2.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/java/request.xsl"/>
        </builtin-logicsheet>

        <!-- The Response logicsheet: access response parameters -->
        <builtin-logicsheet>
          <parameter name="prefix" value="xsp-response"/>
          <parameter name="uri" value="http://apache.org/xsp/response/2.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/java/response.xsl"/>
        </builtin-logicsheet>

        <!-- The Session logicsheet: manages and access the session -->
        <builtin-logicsheet>
          <parameter name="prefix" value="xsp-session"/>
          <parameter name="uri" value="http://apache.org/xsp/session/2.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/java/session.xsl"/>
        </builtin-logicsheet>

        <!-- The Cookie logicsheet: manages and access cookies  -->
        <builtin-logicsheet>
          <parameter name="prefix" value="xsp-cookie"/>
          <parameter name="uri" value="http://apache.org/xsp/cookie/2.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/java/cookie.xsl"/>
        </builtin-logicsheet>

        <!-- The Log logicsheet: access the cocoon logs from an xsp page  -->
        <builtin-logicsheet>
          <parameter name="prefix" value="log"/>
          <parameter name="uri" value="http://apache.org/xsp/log/2.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/java/log.xsl"/>
        </builtin-logicsheet>

        <!-- The Utility logicsheet -->
        <builtin-logicsheet>
          <parameter name="prefix" value="util"/>
          <parameter name="uri" value="http://apache.org/xsp/util/2.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/java/util.xsl"/>
        </builtin-logicsheet>

        <!-- The xsp-formval taglib serves as interface to retrieve
             validation results from a request attribute -->
        <builtin-logicsheet>
          <parameter name="prefix" value="xsp-formval"/>
          <parameter name="uri" value="http://apache.org/xsp/form-validator/2.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/java/form-validator.xsl"/>
        </builtin-logicsheet>

        <!-- The sel taglib allows to put multiple pages / view into
             one xsp. While in general it is good style to put
             different views into different xsp because they're more
             easily maintained, this is a useful feature with
             e.g. with long forms that are broken into parts -->
        <builtin-logicsheet>
          <parameter name="prefix" value="sel"/>
          <parameter name="uri" value="http://apache.org/xsp/sel/1.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/java/sel.xsl"/>
        </builtin-logicsheet>

        <!-- The Action logicsheet -->
        <builtin-logicsheet>
          <parameter name="prefix" value="action"/>
          <parameter name="uri" value="http://apache.org/cocoon/action/1.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/java/action.xsl"/>
        </builtin-logicsheet>

        <!-- The capture taglib is for capturing parts of the XSP-generated
             XML as XML fragments or DOM nodes -->
        <builtin-logicsheet>
          <parameter name="prefix" value="capture"/>
          <parameter name="uri" value="http://apache.org/cocoon/capture/1.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/java/capture.xsl"/>
        </builtin-logicsheet>

        <!-- The XScript logicsheet -->
        <builtin-logicsheet>
          <parameter name="prefix" value="xscript"/>
          <parameter name="uri" value="http://apache.org/xsp/xscript/1.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/java/xscript.xsl"/>
        </builtin-logicsheet>

        <!-- The SOAP logicsheet -->
        <builtin-logicsheet>
          <parameter name="prefix" value="soap"/>
          <parameter name="uri" value="http://apache.org/xsp/soap/3.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/java/soap.xsl"/>
        </builtin-logicsheet>

        <!-- The JPath logicsheet -->
        <builtin-logicsheet>
          <parameter name="prefix" value="jpath"/>
          <parameter name="uri" value="http://apache.org/xsp/jpath/1.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/java/jpath.xsl"/>
        </builtin-logicsheet>

        <!-- The input logicsheet allows easy access to InputModules -->
        <builtin-logicsheet>
          <parameter name="prefix" value="input"/>
          <parameter name="uri" value="http://apache.org/cocoon/xsp/input/1.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/java/input.xsl"/>
        </builtin-logicsheet>
      </target-language>

      <!--+
          | Properties for the javascript language
          +-->
      <target-language name="js">
        <parameter name="core-logicsheet" value="resource://org/apache/cocoon/components/language/markup/xsp/javascript/xsp.xsl"/>

        <builtin-logicsheet>
          <parameter name="prefix" value="xsp-request"/>
          <parameter name="uri" value="http://apache.org/xsp/request/2.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/javascript/request.xsl"/>
        </builtin-logicsheet>

        <builtin-logicsheet>
          <parameter name="prefix" value="xsp-response"/>
          <parameter name="uri" value="http://apache.org/xsp/response/2.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/javascript/response.xsl"/>
        </builtin-logicsheet>

        <builtin-logicsheet>
          <parameter name="prefix" value="xsp-session"/>
          <parameter name="uri" value="http://apache.org/xsp/session/2.0"/>
          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/javascript/session.xsl"/>
        </builtin-logicsheet>
      </target-language>
    </xsp-language>
  </markup-languages>

  <!-- Xscript -->
  <xscript logger="core.xscript">
    <parameter name="xscript:copy-of" value="resource://org/apache/cocoon/components/xscript/xslt/copy-of.xsl"/>
    <parameter name="xscript:value-of" value="resource://org/apache/cocoon/components/xscript/xslt/value-of.xsl"/>
  </xscript>

<!-- ====================== System Components =========================== -->

  <!--+
      | The core classloader implementation
      +-->
  <classloader class="org.apache.cocoon.components.classloader.ClassLoaderManagerImpl" logger="core.classloader"/>

  <!--+
      | XML compiler/decompiler
      |
      | these components are used to process SAX events and produce a binary
      | representation that is much more compact and efficient for
      | subsequent parsing. These are used by the cache system to save
      | the intermediate results of the pipeline stages reducing the overhead
      | of xml parsing/serialization.
      +-->
  <xml-serializer class="org.apache.cocoon.components.sax.XMLByteStreamCompiler" logger="core.xml-serializer" pool-grow="4" pool-max="32" pool-min="8"/>
  <xml-deserializer class="org.apache.cocoon.components.sax.XMLByteStreamInterpreter" logger="core.xml-deserializer" pool-grow="4" pool-max="32" pool-min="8"/>

  <!--+
      | The Cache Manager is a component that can be used to cache content.
      | It is currently used by the cinclude transformer
      +-->
  <component class="org.apache.cocoon.transformation.helpers.DefaultIncludeCacheManager" role="org.apache.cocoon.transformation.helpers.IncludeCacheManager">
    <!-- Set the preemptive-loader-url to a pipeline inside Cocoon that
         contains the preemptive loader action. The URL must be absolute! 
    <parameter name="preemptive-loader-url" 
               value="http://localhost:8080/cocoon/samples/cinclude/loader"/>
    -->
 </component>

<!-- ========== Components used for Lucene-based searching ========== -->

 <!-- Include roles -->
 <include src="resource://org/apache/cocoon/components/search/lucene.roles"/>

 <!-- Search:
   These are the components that handle the search. 
   
   Cocoon indexer writes into an index.
   Cocoon searcher reads from an index, returning matched hits.
   Cocoon crawler crawls all links starting from a given base URI.
   Lucene xml indexer builds a lucene document from XML content.
  -->
 <cocoon-indexer     logger="core.search.indexer"/>
 <cocoon-searcher    logger="core.search.searcher"/>  
 <cocoon-crawler     logger="core.search.crawler"/>
 <lucene-xml-indexer logger="core.search.lucene"/>

<!-- ========== Components used for profiling ========== -->
 <include src="resource://org/apache/cocoon/components/profiler/profiler.roles"/>
 <profiler results="20"/><!-- default is 10 -->

<!-- ========== Components used for debugging ========== -->
<!--+
    | Send sitemap execution messages to the debug log category.
    | Warning: It is very verbose. Off by default.
    +-->
<!--
<component role="org.apache.cocoon.sitemap.SitemapExecutor"
  class="org.apache.cocoon.profiler.debugging.SimpleSitemapExecutor"
  logger="debug"/>
-->

<!-- ========== Components used for xml validation ========== -->
 <include src="resource://org/apache/cocoon/components/validation/validation.roles"/>
  <!--+
      | The shared Validator instance in Cocoon.
      |
      | This defaults to an instance of a "CachedValidator". To disable schema
      | caching add the following attribute to the <validator ... /> element:
      |
      |   class="org.apache.cocoon.components.validation.impl.DefaultValidator"
      +-->
  <validator logger="core.validation">
    <schema-parser name="jing" class="org.apache.cocoon.components.validation.jing.JingSchemaParser"/>
    <schema-parser name="jaxp" class="org.apache.cocoon.components.validation.jaxp.JaxpSchemaParser">
      <factory-class>org.apache.xerces.jaxp.validation.XMLSchemaFactory</factory-class>
    </schema-parser>
  </validator>

  <!--+
      | Runnable manager
      |
      | This component manages commands (Runnables) executed in background using
      | preconfigured pools of worker threads
      +-->
  <runnable-manager logger="core.runnable">
    <!--+
        | This is the default configuration of the runnable-manager. More
        | indepth information can be found at
        | http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/PooledExecutor.html
        +-->
    <thread-factory>org.apache.cocoon.components.thread.DefaultThreadFactory</thread-factory>
    <thread-pools>
      <!--+
          | This thread pool should be used for daemons (permanently running
          | threads).
          +-->
      <thread-pool>
        <name>daemon</name>
        <priority>NORM</priority>
        <daemon>true</daemon>
        <queue-size>0</queue-size>
        <max-pool-size>-1</max-pool-size>
        <min-pool-size>1</min-pool-size>
        <keep-alive-time-ms>60000</keep-alive-time-ms>
        <block-policy>ABORT</block-policy>
        <shutdown-graceful>false</shutdown-graceful>
        <shutdown-wait-time-ms>-1</shutdown-wait-time-ms>
      </thread-pool>
    </thread-pools>
  </runnable-manager>


</components>
