<!--

    Copyright 2004-2005 The Apache Software Foundation

    Licensed 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.
-->

<!-- $Rev$ $Date$ -->
<module xmlns="http://geronimo.apache.org/xml/ns/deployment-1.1">

    <gbean name="JettyWebBuilder" class="org.apache.geronimo.jetty.deployment.JettyModuleBuilder">
        <attribute name="defaultSessionTimeoutSeconds">1800</attribute>
        <attribute name="defaultWelcomeFiles">index.html,index.htm,index.jsp</attribute>
        <attribute name="jettyContainerObjectName">?name=JettyWebContainer</attribute>
        <references name="DefaultServlets">
            <pattern>
                <name>StaticContent</name>
            </pattern>
            <pattern>
                <name>JSPServlet</name>
            </pattern>
        </references>
        <reference name="PojoWebServiceTemplate">
            <name>POJOTemplate</name>
        </reference>
        <references name="WebServiceBuilder">
            <pattern>
                <name>WebServiceBuilder</name>
            </pattern>
            <pattern>
                <name>UnavailableWebServiceBuilder</name>
            </pattern>
        </references>
        <xml-attribute name="defaultEnvironment">
            <environment xmlns="http://geronimo.apache.org/xml/ns/deployment-1.1">
                <dependencies>
                    <dependency>
                        <groupId>${pom.groupId}</groupId>
                        <artifactId>j2ee-server</artifactId>
                        <!--<version>${pom.currentVersion}</version>-->
                        <type>car</type>
                    </dependency>
                    <dependency>
                        <groupId>${pom.groupId}</groupId>
                        <artifactId>jetty</artifactId>
                        <!--<version>${pom.currentVersion}</version>-->
                        <type>car</type>
                    </dependency>
                </dependencies>
                <hidden-classes>
                    <filter>antlr.</filter>
                    <filter>org.springframework.</filter>
                </hidden-classes>
                <non-overridable-classes>
                    <filter>java.</filter>
                    <filter>javax.</filter>
                    <filter>org.apache.geronimo.</filter>
                    <filter>org.mortbay.</filter>
                    <filter>org.xml.</filter>
                    <filter>org.w3c.</filter>
                </non-overridable-classes>
            </environment>
        </xml-attribute>
    </gbean>

    <gbean name="StaticContent" class="org.apache.geronimo.jetty.JettyDefaultServletHolder">
        <attribute name="servletName">default</attribute>
        <attribute name="servletClass">org.mortbay.jetty.servlet.Default</attribute>
        <attribute name="loadOnStartup">0</attribute>
        <attribute name="initParams">
 acceptRanges=true
 dirAllowed=true
 putAllowed=false
 delAllowed=false
 redirectWelcome=false
 minGzipLength=8192</attribute>
        <attribute name="servletMappings">/</attribute>
    </gbean>

    <gbean name="JSPServlet" class="org.apache.geronimo.jetty.JettyDefaultServletHolder">
        <attribute name="servletName">jsp</attribute>
        <attribute name="servletClass">org.apache.jasper.servlet.JspServlet</attribute>
        <attribute name="loadOnStartup">0</attribute>
        <attribute name="initParams">
 development=false
 fork=false
 logVerbosityLevel=DEBUG
 xpoweredBy=false</attribute>
        <attribute name="servletMappings">*.jsp,*.jspf,*.jspx,*.xsp</attribute>
    </gbean>

    <gbean name="POJOTemplate" class="org.apache.geronimo.jetty.JettyPOJOWebServiceHolder">
        <attribute name="servletName">dummy</attribute>
    </gbean>

</module>
