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

<!DOCTYPE Configure PUBLIC
	"-//Mort Bay Consulting//DTD Configure 1.2//EN"
	"http://jetty.mortbay.org/configure_1_2.dtd">

<Configure class="org.mortbay.jetty.Server">

  <Call name="addListener">
    <Arg>
      <New class="org.mortbay.http.SocketListener">
        <Set name="Port">8080</Set>
        <Set name="MinThreads">1</Set>
        <Set name="MaxThreads">10</Set>
        <Set name="MaxIdleTimeMs">50000</Set>
      </New>
    </Arg>
  </Call>

  
  <Call name="addWebApplication">
    <Arg>/wap</Arg>
    <Arg>context</Arg>
    <Set name="DefaultsDescriptor">../../config/webdefault.xml</Set>
  </Call>
  
  <Call name="addContext">
    <Arg>/</Arg>   
    <Set name="realmName">Jetty Demo Realm</Set>
   
    <Call name="addServlet">
      <Arg>Admin</Arg>
      <Arg>/</Arg>
      <Arg>org.mortbay.servlet.AdminServlet</Arg>
    </Call>
    
    <Call name="setAttribute">
      <Arg>org.mortbay.http.HttpServer</Arg>
      <Arg><Call name="getHttpServer"/></Arg>
    </Call>
  </Call>    
</Configure>
