<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
<!--
 ***************************************************************************************************************************
 * 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.                                              *
 ***************************************************************************************************************************
-->

<Configure id="ExampleServer" class="org.eclipse.jetty.server.Server">

	<Set name="connectors">
		<Array type="org.eclipse.jetty.server.Connector">
			<Item>
				<New class="org.eclipse.jetty.server.ServerConnector">
					<Arg>
						<Ref refid="ExampleServer" />
					</Arg>
					<Set name="port">$S{availablePort,8080}</Set>
				</New>
			</Item>
		</Array>
	</Set>

	<New id="context" class="org.eclipse.jetty.servlet.ServletContextHandler">
		<Set name="contextPath">/</Set>
		<Call name="addServlet">
			<Arg>org.apache.juneau.rest.test.Root</Arg>
			<Arg>/*</Arg>
		</Call>
		<Set name="sessionHandler">
			<New class="org.eclipse.jetty.server.session.SessionHandler" />
		</Set>
	</New>

	<Set name="handler">
		<New class="org.eclipse.jetty.server.handler.HandlerCollection">
			<Set name="handlers">
				<Array type="org.eclipse.jetty.server.Handler">
					<Item>
						<Ref refid="context" />
					</Item>
					<Item>
						<New class="org.eclipse.jetty.server.handler.DefaultHandler" />
					</Item>
				</Array>
			</Set>
		</New>
	</Set>

	<Set name="requestLog">
		<New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
			<Set name="filename"><Property name="jetty.logs" default="$C{Logging/logDir,logs}"/>/jetty-requests.log</Set>
			<Set name="filenameDateFormat">yyyy_MM_dd</Set>
			<Set name="LogTimeZone">GMT</Set>
			<Set name="retainDays">90</Set>
			<Set name="append">false</Set>
			<Set name="LogLatency">true</Set>
		</New>
	</Set>

    <Get name="ThreadPool">
        <Set name="minThreads" type="int">10</Set>
        <Set name="maxThreads" type="int">100</Set>
        <Set name="idleTimeout" type="int">60000</Set>
        <Set name="detailedDump">true</Set>
    </Get>
</Configure>
