<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
 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.
-->

<Server>
    <!-- Debug low-level events in XmlMapper startup
    <xmlmapper:debug level="0" />
    -->

    <!--

    Logging:

         Logging in Tomcat is quite flexible; we can either have a log
         file per module (example: ContextManager) or we can have one
         for Servlets and one for Jasper, or we can just have one
         tomcat.log for both Servlet and Jasper.  Right now there are
         three standard log streams, "tc_log", "servlet_log", and
         "JASPER_LOG".

	 Path:

	 The file to which to output this log, relative to
	 TOMCAT_HOME.  If you omit a "path" value, then stderr or
	 stdout will be used.

	 Verbosity:

	 Threshold for which types of messages are displayed in the
	 log.  Levels are inclusive; that is, "WARNING" level displays
	 any log message marked as warning, error, or fatal.  Default
	 level is WARNING.

	 verbosityLevel values can be:
	    FATAL
	    ERROR
	    WARNING
            INFORMATION
            DEBUG

	 Timestamps:

	 By default, logs print a timestamp in the form "yyyy-MM-dd
	 hh:mm:ss" in front of each message.  To disable timestamps
	 completely, set 'timestamp="no"'. To use the raw
	 msec-since-epoch, which is more efficient, set
	 'timestampFormat="msec"'.  If you want a custom format, you
	 can use 'timestampFormat="hh:mm:ss"' following the syntax of
	 java.text.SimpleDateFormat (see Javadoc API).  For a
	 production environment, we recommend turning timestamps off,
	 or setting the format to "msec".

	 Custom Output:

	 "Custom" means "normal looking".  "Non-custom" means
	 "surrounded with funny xml tags".  In preparation for
	 possibly disposing of "custom" altogether, now the default is
	 'custom="yes"' (i.e. no tags)

	 Per-component Debugging:

	 Some components accept a "debug" attribute.  This further
	 enhances log output.  If you set the "debug" level for a
	 component, it may output extra debugging information.
    -->

    <!-- if you don't want messages on screen, add the attribute
            path="logs/tomcat.log"
	 to the Logger element below
    -->
    <Logger name="tc_log"
            verbosityLevel = "INFORMATION"
    />

    <Logger name="servlet_log"
            path="logs/servlet.log"
    />

    <Logger name="JASPER_LOG"
	    path="logs/jasper.log"
            verbosityLevel = "INFORMATION" />

    <!-- You can add a "home" attribute to represent the "base" for
         all relative paths. If none is set, the TOMCAT_HOME property
         will be used, and if not set "." will be used.
         webapps/, work/ and logs/ will be relative to this ( unless
         set explicitely to absolute paths ).

         You can also specify a "randomClass" attribute, which determines
         a subclass of java.util.Random will be used for generating session IDs.
         By default this is "java.security.SecureRandom".
         Specifying "java.util.Random" will speed up Tomcat startup,
         but it will cause sessions to be less secure.

         You can specify the "showDebugInfo" attribute to control whether
         debugging information is displayed in Tomcat's default responses.
         This debugging information includes:
             1. Stack traces for exceptions
             2. Request URI's that cause status codes >= 400
         The default is "true", so you must specify "false" to prevent
         the debug information from appearing.  Since the debugging
         information reveals internal details about what Tomcat is serving,
         set showDebugInfo="false" if you wish increased security.
      -->
    <ContextManager debug="0" workDir="work" showDebugInfo="true" >

      <!-- ==================== Interceptors ==================== -->

        <!--
         ContextInterceptor className="org.apache.tomcat.context.LogEvents"
        -->

        <ContextInterceptor className="org.apache.tomcat.context.AutoSetup" />

        <ContextInterceptor
            className="org.apache.tomcat.context.WebXmlReader" />

        <!-- Uncomment out if you have JDK1.2 and want to use policy
        <ContextInterceptor
            className="org.apache.tomcat.context.PolicyInterceptor" />
        -->

        <ContextInterceptor
            className="org.apache.tomcat.context.LoaderInterceptor" />
        <ContextInterceptor
            className="org.apache.tomcat.context.DefaultCMSetter" />
        <ContextInterceptor
            className="org.apache.tomcat.context.WorkDirInterceptor" />

	<!--  Uncomment if you are using JDK1.2 or higher.
              Insures proper thread context class loader is in effect for servlet execution
	<ContextInterceptor
            className="org.apache.tomcat.request.Jdk12Interceptor" />
	-->

	<!-- Request processing -->
        <!-- Session interceptor will extract the session id from cookies and
             deal with URL rewriting ( by fixing the URL ).  If you wish to
             suppress the use of cookies for session identifiers, change the
             "noCookies" attribute to "true"
          -->
        <RequestInterceptor
            className="org.apache.tomcat.request.SessionInterceptor"
            noCookies="false" />

        <!-- Find the container ( context and prefix/extension map )
             for a request.
          -->
        <RequestInterceptor
            className="org.apache.tomcat.request.SimpleMapper1"
            debug="0" />

        <!-- Non-standard invoker, for backward compat. ( /servlet/* )
             You can modify the prefix that is matched by adjusting the
             "prefix" parameter below.  Be sure your modified pattern
             starts and ends with a slash.

             NOTE:  This prefix applies to *all* web applications that
             are running in this instance of Tomcat.
          -->
        <RequestInterceptor
            className="org.apache.tomcat.request.InvokerInterceptor"
            debug="0" prefix="/servlet/" />

        <!-- "default" handler - static files and dirs.  Set the
             "suppress" property to "true" to suppress directory listings
             when no welcome file is present.

             NOTE:  This setting applies to *all* web applications that
             are running in this instance of Tomcat.
          -->
        <RequestInterceptor
            className="org.apache.tomcat.request.StaticInterceptor"
            debug="0" suppress="false" />

        <!-- Plug a session manager. You can plug in more advanced session
             modules.
          -->
        <RequestInterceptor
            className="org.apache.tomcat.session.StandardSessionInterceptor" />

        <!-- Check if the request requires an authenticated role.
          -->
        <RequestInterceptor
            className="org.apache.tomcat.request.AccessInterceptor"
            debug="0" />

        <!-- Check permissions using the simple xml file. You can
             plug more advanced authentication modules.
          -->
        <RequestInterceptor
            className="org.apache.tomcat.request.SimpleRealm"
            debug="0" />

       <!-- UnComment the following and comment out the
            above to get a JDBC realm.
            Other options for driverName:
              driverName="oracle.jdbc.driver.OracleDriver"
              connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL"
              connectionName="scott"
              connectionPassword="tiger"

              driverName="com.mysql.jdbc.Driver"
              connectionURL="jdbc:mysql://localhost/authority"
              connectionName="test"
              connectionPassword="test"

            "connectionName" and "connectionPassword" are optional.
        -->
        <!--
        <RequestInterceptor
            className="org.apache.tomcat.request.JDBCRealm"
            debug="99"
	    driverName="sun.jdbc.odbc.JdbcOdbcDriver"
	    connectionURL="jdbc:odbc:TOMCAT"
	    userTable="users"
            userNameCol="user_name"
            userCredCol="user_pass"
	    userRoleTable="user_roles"
            roleNameCol="role_name" />
        -->

        <!-- Loaded last since JSP's that load-on-startup use request handling -->
        <ContextInterceptor
            className="org.apache.tomcat.context.LoadOnStartupInterceptor" />

      <!-- ==================== Connectors ==================== -->

        <!-- Normal HTTP -->
        <Connector className="org.apache.tomcat.service.PoolTcpConnector">
            <Parameter name="handler"
                value="org.apache.tomcat.service.http.HttpConnectionHandler"/>
            <Parameter name="port"
                value="9090"/>
        </Connector>

        <!--
            Uncomment this for SSL support.
            You _need_ to set up a server certificate if you want this
            to work, and you need JSSE.
            1. Add JSSE jars to CLASSPATH
            2. Edit java.home/jre/lib/security/java.security
               Add:
               security.provider.2=com.sun.net.ssl.internal.ssl.Provider
            3. Do: keytool -genkey -alias tomcat -keyalg RSA
               RSA is essential to work with Netscape and IIS.
               Use "changeit" as password. ( or add keypass attribute )
               You don't need to sign the certificate.

            You can set parameter keystore and keypass if you want
            to change the default ( user.home/.keystore with changeit )
        -->
        <!--
        <Connector className="org.apache.tomcat.service.PoolTcpConnector">
            <Parameter name="handler"
                value="org.apache.tomcat.service.http.HttpConnectionHandler"/>
            <Parameter name="port"
                value="8443"/>
            <Parameter name="socketFactory"
                value="org.apache.tomcat.net.SSLSocketFactory" />
        </Connector>
        -->

        <!-- Apache AJP12 support. This is also used to shut down tomcat.
          -->
        <Connector className="org.apache.tomcat.service.PoolTcpConnector">
            <Parameter name="handler"
       value="org.apache.tomcat.service.connector.Ajp12ConnectionHandler"/>
            <Parameter name="port" value="8007"/>
        </Connector>

        <!-- ==================== Special webapps ==================== -->
        <!-- You don't need this if you place your app in webapps/
             and use defaults.
             For security you'll also need to edit tomcat.policy

             Defaults are: debug=0, reloadable=true, trusted=false
             (trusted allows you to access tomcat internal objects
             with FacadeManager ), crossContext=true (allows you to
             access other contexts via ServletContext.getContext())

             If security manager is enabled, you'll have read perms.
             in the webapps dir and read/write in the workdir.
         -->

        <!--
        <Context path="/examples"
                 docBase="webapps/examples"
                 crossContext="false"
                 debug="0"
                 reloadable="true" >
        </Context>
        -->

        <Context path="../../"
                 docBase="webapps/jcs"
                 crossContext="false"
                 debug="0"
                 reloadable="true" >
        </Context>


        <!-- Admin context will use tomcat.core to add/remove/get info about
             the webapplications and tomcat internals.
             By default it is not trusted - i.e. it is not allowed access to
             tomcat internals, only informations that are available to all
             servlets are visible.

             If you change this to true, make sure you set a password.
          -->
      <!--
        <Context path="/admin"
                 docBase="webapps/admin"
                 crossContext="true"
                 debug="0"
                 reloadable="true"
                 trusted="false" >
        </Context>
      -->

        <!-- Virtual host example -
             In "127.0.0.1" virtual host we'll reverse "/" and
             "/examples"
             (XXX need a better example )
             (use  "http://127.0.0.1/examples" )
        <Host name="127.0.0.1" >
           <Context path=""
                    docBase="webapps/examples" />
           <Context path="/examples"
                    docBase="webapps/ROOT" />
        </Host>
         -->

    </ContextManager>
</Server>
