<?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.microservice.sample.RootResources</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>
