diff --git a/solr/authority/conf/schema.xml b/solr/authority/conf/schema.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1964a8d4834d37390bcb004b8d659ecb11d67781
--- /dev/null
+++ b/solr/authority/conf/schema.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" ?>
+<schema name="VuFind Authority Index" version="1.2">
+  <types>
+    <fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
+    <fieldtype name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>
+    <fieldtype name="date" class="solr.DateField" sortMissingLast="true" omitNorms="true"/>
+    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
+      <analyzer type="index">
+        <tokenizer class="solr.ICUTokenizerFactory"/>
+        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
+        <filter class="solr.ICUFoldingFilterFactory"/>
+        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+      </analyzer>
+      <analyzer type="query">
+        <tokenizer class="solr.ICUTokenizerFactory"/>
+        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
+        <filter class="solr.ICUFoldingFilterFactory"/>
+        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+      </analyzer>
+    </fieldType>
+  </types>
+  <fields>
+    <!-- Core Fields  -->
+    <field name="id" type="string" indexed="true" stored="true"/>
+    <field name="fullrecord" type="string" indexed="false" stored="true"/>
+    <field name="marc_error" type="string" indexed="false" stored="true" multiValued="true"/>
+    <field name="allfields" type="text" indexed="true" stored="false"/>
+
+    <!-- Extra identifiers - where did authority record originate? -->
+    <field name="source" type="string" indexed="true" stored="true"/>
+    <field name="record_type" type="string" indexed="true" stored="true"/>
+    <field name="lccn" type="string" indexed="true" stored="true" multiValued="true"/>
+
+    <!-- String Fields for Exact Match / Faceting -->
+    <field name="heading" type="string" indexed="true" stored="true"/>
+    <field name="use_for" type="string" indexed="true" stored="true" multiValued="true"/>
+    <field name="see_also" type="string" indexed="true" stored="true" multiValued="true"/>
+    <field name="scope_note" type="string" indexed="false" stored="true" multiValued="true"/>
+
+    <!-- Keyword Fields for Searching -->
+    <field name="heading_keywords" type="text" indexed="true" stored="false"/>
+    <field name="use_for_keywords" type="text" indexed="true" stored="false" multiValued="true"/>
+    <field name="see_also_keywords" type="text" indexed="true" stored="false" multiValued="true"/>
+    
+    <!-- Tracking fields to keep track of oldest and most recent index times -->
+    <field name="first_indexed" type="date" indexed="true" stored="true"/>
+    <field name="last_indexed" type="date" indexed="true" stored="true"/>
+  </fields>
+
+  <uniqueKey>id</uniqueKey>
+  <defaultSearchField>allfields</defaultSearchField>
+
+  <!-- CopyFields for Keyword Searching -->
+  <copyField source="heading" dest="heading_keywords" />
+  <copyField source="use_for" dest="use_for_keywords" />
+  <copyField source="see_also" dest="see_also_keywords" />
+
+  <!-- Default Boolean Operator -->
+  <solrQueryParser defaultOperator="AND"/>
+</schema>
diff --git a/solr/authority/conf/solrconfig.xml b/solr/authority/conf/solrconfig.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7a83a0aecc63894bcc128b1063b4e505f9507e46
--- /dev/null
+++ b/solr/authority/conf/solrconfig.xml
@@ -0,0 +1,639 @@
+<?xml version="1.0" ?>
+<!--
+ 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.
+-->
+
+<config>
+
+  <!-- Set this to 'false' if you want solr to continue working after it has
+    encountered an severe configuration error.  In a production environment,
+    you may want solr to keep working even if one handler is mis-configured.
+
+    You may also set this to false using by setting the system property:
+    -Dsolr.abortOnConfigurationError=false
+  -->
+  <abortOnConfigurationError>${solr.abortOnConfigurationError:true}</abortOnConfigurationError>
+
+  <!-- Controls what version of Lucene various components of Solr
+       adhere to.  Generally, you want to use the latest version to
+       get all bug fixes and improvements. It is highly recommended
+       that you fully re-index after changing this setting as it can
+       affect both how text is indexed and queried.
+    -->
+  <luceneMatchVersion>LUCENE_35</luceneMatchVersion>
+
+  <!-- Used to specify an alternate directory to hold all index data
+       other than the default ./data under the Solr home.
+       If replication is in use, this should match the replication configuration. -->
+  <dataDir>${solr.solr.home:./solr}/authority</dataDir>
+
+  <indexDefaults>
+   <!-- Values here affect all index writers and act as a default unless overridden. -->
+    <useCompoundFile>false</useCompoundFile>
+    <mergeFactor>10</mergeFactor>
+    <!--
+      If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene will flush based on whichever limit is hit first.
+
+    -->
+    <!--<maxBufferedDocs>1000</maxBufferedDocs>-->
+    <!-- Tell Lucene when to flush documents to disk.
+      Giving Lucene more memory for indexing means faster indexing at the cost of more RAM
+
+      If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene will flush based on whichever limit is hit first.
+
+    -->
+    <ramBufferSizeMB>32</ramBufferSizeMB>
+    <maxMergeDocs>2147483647</maxMergeDocs>
+    <writeLockTimeout>1000</writeLockTimeout>
+    <commitLockTimeout>10000</commitLockTimeout>
+
+    <!--
+      Expert: Turn on Lucene's auto commit capability.
+
+      TODO: Add recommendations on why you would want to do this.
+
+      NOTE: Despite the name, this value does not have any relation to Solr's autoCommit functionality
+
+    -->
+    <!--<luceneAutoCommit>false</luceneAutoCommit>-->
+    <!--
+      Expert:
+      The Merge Policy in Lucene controls how merging is handled by Lucene.  The default in 2.3 is the LogByteSizeMergePolicy, previous
+      versions used LogDocMergePolicy.
+
+      LogByteSizeMergePolicy chooses segments to merge based on their size.  The Lucene 2.2 default, LogDocMergePolicy chose when
+      to merge based on number of documents
+
+      Other implementations of MergePolicy must have a no-argument constructor
+    -->
+    <!--<mergePolicy>org.apache.lucene.index.LogByteSizeMergePolicy</mergePolicy>-->
+
+    <!--
+      Expert:
+      The Merge Scheduler in Lucene controls how merges are performed.  The ConcurrentMergeScheduler (Lucene 2.3 default)
+      can perform merges in the background using separate threads.  The SerialMergeScheduler (Lucene 2.2 default) does not.
+    -->
+    <!--<mergeScheduler>org.apache.lucene.index.ConcurrentMergeScheduler</mergeScheduler>-->
+
+    <!--
+      As long as Solr is the only process modifying your index, it is
+      safe to use Lucene's in process locking mechanism.  But you may
+      specify one of the other Lucene LockFactory implementations in
+      the event that you have a custom situation.
+
+      none = NoLockFactory (typically only used with read only indexes)
+      single = SingleInstanceLockFactory (suggested)
+      native = NativeFSLockFactory
+      simple = SimpleFSLockFactory
+
+      ('simple' is the default for backwards compatibility with Solr 1.2)
+    -->
+    <lockType>single</lockType>
+
+    <!-- TODO: check if this are needed -->
+    <maxFieldLength>10000</maxFieldLength>
+
+  </indexDefaults>
+
+  <mainIndex>
+    <!-- options specific to the main on-disk lucene index -->
+    <useCompoundFile>false</useCompoundFile>
+    <ramBufferSizeMB>32</ramBufferSizeMB>
+    <mergeFactor>10</mergeFactor>
+    <maxMergeDocs>2147483647</maxMergeDocs>
+    <maxFieldLength>10000</maxFieldLength>
+
+    <!-- If true, unlock any held write or commit locks on startup.
+         This defeats the locking mechanism that allows multiple
+         processes to safely access a lucene index, and should be
+         used with care. -->
+    <unlockOnStartup>false</unlockOnStartup>
+  </mainIndex>
+
+  <!-- the default high-performance update handler -->
+  <updateHandler class="solr.DirectUpdateHandler2">
+
+    <!-- autocommit pending docs if certain criteria are met -->
+    <autoCommit>
+      <maxDocs>10000</maxDocs>
+      <maxTime>20000</maxTime>
+    </autoCommit>
+
+    <!-- The RunExecutableListener executes an external command.
+         exe - the name of the executable to run
+         dir - dir to use as the current working directory. default="."
+         wait - the calling thread waits until the executable returns. default="true"
+         args - the arguments to pass to the program.  default=nothing
+         env - environment variables to set.  default=nothing
+      -->
+    <!-- A postCommit event is fired after every commit or optimize command
+    <listener event="postCommit" class="solr.RunExecutableListener">
+      <str name="exe">snapshooter</str>
+      <str name="dir">solr/bin</str>
+      <bool name="wait">true</bool>
+      <arr name="args"> <str>arg1</str> <str>arg2</str> </arr>
+      <arr name="env"> <str>MYVAR=val1</str> </arr>
+    </listener>
+    -->
+    <!-- A postOptimize event is fired only after every optimize command, useful
+         in conjunction with index distribution to only distribute optimized indicies
+    <listener event="postOptimize" class="solr.RunExecutableListener">
+      <str name="exe">snapshooter</str>
+      <str name="dir">solr/bin</str>
+      <bool name="wait">true</bool>
+    </listener>
+    -->
+
+  </updateHandler>
+
+
+  <query>
+    <!-- Maximum number of clauses in a boolean query... can affect
+        range or prefix queries that expand to big boolean
+        queries.  An exception is thrown if exceeded.  -->
+    <maxBooleanClauses>1024</maxBooleanClauses>
+
+
+    <!-- Cache used by SolrIndexSearcher for filters (DocSets),
+         unordered sets of *all* documents that match a query.
+         When a new searcher is opened, its caches may be prepopulated
+         or "autowarmed" using data from caches in the old searcher.
+         autowarmCount is the number of items to prepopulate.  For LRUCache,
+         the autowarmed items will be the most recently accessed items.
+       Parameters:
+         class - the SolrCache implementation (currently only LRUCache)
+         size - the maximum number of entries in the cache
+         initialSize - the initial capacity (number of entries) of
+           the cache.  (seel java.util.HashMap)
+         autowarmCount - the number of entries to prepopulate from
+           and old cache.
+    <filterCache
+      class="solr.LRUCache"
+      size="512"
+      initialSize="512"
+      autowarmCount="256"/>
+         -->
+    <filterCache
+      class="solr.LRUCache"
+      size="300000"
+      initialSize="300000"
+      autowarmCount="50000"/>
+
+   <!-- queryResultCache caches results of searches - ordered lists of
+         document ids (DocList) based on a query, a sort, and the range
+         of documents requested.
+    <queryResultCache
+      class="solr.LRUCache"
+      size="512"
+      initialSize="512"
+      autowarmCount="256"/>
+  -->
+    <queryResultCache
+      class="solr.LRUCache"
+      size="100000"
+      initialSize="5000"
+      autowarmCount="5000"/>
+
+  <!-- documentCache caches Lucene Document objects (the stored fields for each document).
+       Since Lucene internal document ids are transient, this cache will not be autowarmed.  -->
+    <documentCache
+      class="solr.LRUCache"
+      size="50000"
+      initialSize="50000"
+      autowarmCount="10000"/>
+
+    <!-- If true, stored fields that are not requested will be loaded lazily.
+    -->
+    <enableLazyFieldLoading>false</enableLazyFieldLoading>
+
+    <!-- Example of a generic cache.  These caches may be accessed by name
+         through SolrIndexSearcher.getCache(),cacheLookup(), and cacheInsert().
+         The purpose is to enable easy caching of user/application level data.
+         The regenerator argument should be specified as an implementation
+         of solr.search.CacheRegenerator if autowarming is desired.  -->
+    <!--
+    <cache name="myUserCache"
+      class="solr.LRUCache"
+      size="4096"
+      initialSize="1024"
+      autowarmCount="1024"
+      regenerator="org.mycompany.mypackage.MyRegenerator"
+      />
+    -->
+
+   <!-- An optimization that attempts to use a filter to satisfy a search.
+         If the requested sort does not include score, then the filterCache
+         will be checked for a filter matching the query. If found, the filter
+         will be used as the source of document ids, and then the sort will be
+         applied to that.  -->
+    <useFilterForSortedQuery>true</useFilterForSortedQuery>
+
+   <!-- An optimization for use with the queryResultCache.  When a search
+         is requested, a superset of the requested number of document ids
+         are collected.  For example, if a search for a particular query
+         requests matching documents 10 through 19, and queryWindowSize is 50,
+         then documents 0 through 50 will be collected and cached.  Any further
+         requests in that range can be satisfied via the cache.  -->
+    <queryResultWindowSize>50</queryResultWindowSize>
+
+    <!-- Maximum number of documents to cache for any entry in the
+      queryResultCache. -->
+    <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
+
+    <!-- This entry enables an int hash representation for filters (DocSets)
+         when the number of items in the set is less than maxSize.  For smaller
+         sets, this representation is more memory efficient, more efficient to
+         iterate over, and faster to take intersections.  -->
+    <HashDocSet maxSize="3000" loadFactor="0.75"/>
+
+    <!-- a newSearcher event is fired whenever a new searcher is being prepared
+         and there is a current searcher handling requests (aka registered). -->
+    <!-- QuerySenderListener takes an array of NamedList and executes a
+         local query request for each NamedList in sequence. -->
+    <!--
+    <listener event="newSearcher" class="solr.QuerySenderListener">
+      <arr name="queries">
+        <lst> <str name="q">solr</str> <str name="start">0</str> <str name="rows">10</str> </lst>
+        <lst> <str name="q">rocks</str> <str name="start">0</str> <str name="rows">10</str> </lst>
+      </arr>
+    </listener>
+    -->
+
+    <!-- a firstSearcher event is fired whenever a new searcher is being
+         prepared but there is no current registered searcher to handle
+         requests or to gain autowarming data from. -->
+    <!--
+    <listener event="firstSearcher" class="solr.QuerySenderListener">
+      <arr name="queries">
+        <lst> <str name="q">fast_warm</str> <str name="start">0</str> <str name="rows">10</str> </lst>
+      </arr>
+    </listener>
+    -->
+
+    <!-- If a search request comes in and there is no current registered searcher,
+      then immediately register the still warming searcher and use it.  If
+      "false" then all requests will block until the first searcher is done
+      warming. -->
+    <useColdSearcher>false</useColdSearcher>
+
+    <!-- Maximum number of searchers that may be warming in the background
+      concurrently.  An error is returned if this limit is exceeded. Recommend
+      1-2 for read-only slaves, higher for masters w/o cache warming. -->
+    <maxWarmingSearchers>4</maxWarmingSearchers>
+
+  </query>
+
+  <!--
+    Let the dispatch filter handler /select?qt=XXX
+    handleSelect=true will use consistent error handling for /select and /update
+    handleSelect=false will use solr1.1 style error formatting
+  -->
+  <requestDispatcher handleSelect="true" >
+    <!--Make sure your system has some authentication before enabling remote streaming!  -->
+    <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" />
+
+    <!-- Set HTTP caching related parameters (for proxy caches and clients).
+
+      To get the behaviour of Solr 1.2 (ie: no caching related headers)
+      use the never304="true" option and do not specify a value for
+      <cacheControl>
+    -->
+    <!-- <httpCaching never304="true"> -->
+    <httpCaching lastModifiedFrom="openTime"
+      etagSeed="Solr">
+      <!-- lastModFrom="openTime" is the default, the Last-Modified value
+        (and validation against If-Modified-Since requests) will all be
+        relative to when the current Searcher was opened.
+        You can change it to lastModFrom="dirLastMod" if you want the
+        value to exactly corrispond to when the physical index was last
+        modified.
+
+        etagSeed="..." is an option you can change to force the ETag
+        header (and validation against If-None-Match requests) to be
+        differnet even if the index has not changed (ie: when making
+        significant changes to your config file)
+
+        lastModifiedFrom and etagSeed are both ignored if you use the
+        never304="true" option.
+      -->
+      <!-- If you include a <cacheControl> directive, it will be used to
+        generate a Cache-Control header, as well as an Expires header
+        if the value contains "max-age="
+
+        By default, no Cache-Control header is generated.
+
+        You can use the <cacheControl> option even if you have set
+        never304="true"
+      -->
+      <!-- <cacheControl>max-age=30, public</cacheControl> -->
+    </httpCaching>
+  </requestDispatcher>
+
+  <!-- requestHandler plugins... incoming queries will be dispatched to the
+     correct handler based on the qt (query type) param matching the
+     name of registered handlers.
+     The "standard" request handler is the default and will be used if qt
+     is not specified in the request.
+  -->
+  <requestHandler name="standard" class="solr.StandardRequestHandler" default="true">
+    <!-- default values for query parameters may optionally be defined here
+     <lst name="defaults">
+       <int name="rows">10</int>
+       <str name="fl">*</str>
+       <str name="version">2.1</str>
+     <lst>
+    -->
+    <lst name="defaults">
+      <str name="echoParam">explicit</str>
+    </lst>
+  </requestHandler>
+
+  <!-- DisMaxRequestHandler is an example of a request handler that
+       supports optional parameters which are passed to
+       its init() method.
+   -->
+  <requestHandler name="dismax" class="solr.DisMaxRequestHandler" >
+    <lst name="defaults">
+     <float name="tie">0.01</float>
+     <str name="qf">
+        text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
+     </str>
+     <str name="pf">
+        text^0.2 features^1.1 name^1.5 manu^1.4 manu_exact^1.9
+     </str>
+     <str name="bf">
+        ord(poplarity)^0.5 recip(rord(price),1,1000,1000)^0.3
+     </str>
+     <str name="fl">
+        id,name,price,score
+     </str>
+     <str name="mm">
+        2&lt;-1 5&lt;-2 6&lt;90%
+     </str>
+     <int name="ps">100</int>
+    </lst>
+  </requestHandler>
+  <!-- Note how you can register the same handler multiple times with
+       different names (and different init parameters)
+    -->
+  <requestHandler name="partitioned" class="solr.DisMaxRequestHandler" >
+    <lst name="defaults">
+     <str name="qf">text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0</str>
+     <str name="mm">2&lt;-1 5&lt;-2 6&lt;90%</str>
+     <!-- This is an example of using Date Math to specify a constantly
+          moving date range in a config...
+       -->
+     <str name="bq">incubationdate_dt:[* TO NOW/DAY-1MONTH]^2.2</str>
+    </lst>
+    <!-- In addition to defaults, "appends" params can be specified
+         to identify values which should be appended to the list of
+         multi-val params from the query (or the existing "defaults").
+
+         In this example, the param "fq=instock:true" will be appended to
+         any query time fq params the user may specify, as a mechanism for
+         partitioning the index, independent of any user selected filtering
+         that may also be desired (perhaps as a result of faceted searching).
+
+         NOTE: there is *absolutely* nothing a client can do to prevent these
+         "appends" values from being used, so don't use this mechanism
+         unless you are sure you always want it.
+      -->
+    <lst name="appends">
+      <str name="fq">inStock:true</str>
+    </lst>
+    <!-- "invariants" are a way of letting the Solr maintainer lock down
+         the options available to Solr clients.  Any params values
+         specified here are used regardless of what values may be specified
+         in either the query, the "defaults", or the "appends" params.
+
+         In this example, the facet.field and facet.query params are fixed,
+         limiting the facets clients can use.  Faceting is not turned on by
+         default - but if the client does specify facet=true in the request,
+         these are the only facets they will be able to see counts for;
+         regardless of what other facet.field or facet.query params they
+         may specify.
+
+         NOTE: there is *absolutely* nothing a client can do to prevent these
+         "invariants" values from being used, so don't use this mechanism
+         unless you are sure you always want it.
+      -->
+    <lst name="invariants">
+      <str name="facet.field">cat</str>
+      <str name="facet.field">manu_exact</str>
+      <str name="facet.query">price:[* TO 500]</str>
+      <str name="facet.query">price:[500 TO *]</str>
+    </lst>
+  </requestHandler>
+
+    <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
+      <lst name="defaults">
+        <str name="mlt.fl">manu,cat</str>
+        <int name="mlt.mindf">1</int>
+      </lst>
+    </requestHandler>
+
+    <!-- Search component for extracting terms -->
+    <searchComponent name="term" class="org.apache.solr.handler.component.TermsComponent">
+    </searchComponent>
+
+    <!--
+
+      Search components are registered to SolrCore and used by Search Handlers
+
+      By default, the following components are avaliable:
+
+      <searchComponent name="query"     class="org.apache.solr.handler.component.QueryComponent" />
+      <searchComponent name="facet"     class="org.apache.solr.handler.component.FacetComponent" />
+      <searchComponent name="mlt"       class="org.apache.solr.handler.component.MoreLikeThisComponent" />
+      <searchComponent name="highlight" class="org.apache.solr.handler.component.HighlightComponent" />
+      <searchComponent name="debug"     class="org.apache.solr.handler.component.DebugComponent" />
+
+      If you register a searchComponent to one of the standard names, that will be used instead.
+
+    -->
+
+    <requestHandler name="/search" class="org.apache.solr.handler.component.SearchHandler">
+      <lst name="defaults">
+        <str name="echoParams">explicit</str>
+      </lst>
+      <!--
+        By default, this will register the following components:
+
+        <arr name="components">
+        <str>query</str>
+        <str>facet</str>
+        <str>mlt</str>
+        <str>highlight</str>
+        <str>debug</str>
+        </arr>
+
+        To insert handlers before or after the 'standard' components, use:
+
+        <arr name="first-components">
+        <str>first</str>
+        </arr>
+
+        <arr name="last-components">
+        <str>last</str>
+        </arr>
+
+      -->
+    </requestHandler>
+
+    <!-- Request handler to extract terms -->
+    <requestHandler name="/term" class="org.apache.solr.handler.component.SearchHandler">
+      <arr name="components">
+        <str>term</str>
+      </arr>
+    </requestHandler>
+
+    <!-- Update request handler.
+
+      Note: Since solr1.1 requestHandlers requires a valid content type header if posted in
+      the body. For example, curl now requires: -H 'Content-type:text/xml; charset=utf-8'
+      The response format differs from solr1.1 formatting and returns a standard error code.
+
+      To enable solr1.1 behavior, remove the /update handler or change its path
+
+      "update.processor.class" is the class name for the UpdateRequestProcessor.  It is initalized
+      only once.  This can not be changed for each request.
+    -->
+    <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" >
+      <!--
+        <str name="update.processor.class">org.apache.solr.handler.UpdateRequestProcessor</str>
+      -->
+    </requestHandler>
+
+    <!--
+      Analysis request handler.  Since Solr 1.3.  Use to returnhow a document is analyzed.  Useful
+      for debugging and as a token server for other types of applications
+    -->
+    <requestHandler name="/analysis" class="solr.AnalysisRequestHandler" >
+      <!--
+        <str name="update.processor.class">org.apache.solr.handler.UpdateRequestProcessor</str>
+      -->
+    </requestHandler>
+
+    <!-- CSV update handler, loaded on demand -->
+    <requestHandler name="/update/csv" class="solr.CSVRequestHandler" startup="lazy" />
+
+
+    <!--
+      Admin Handlers - This will register all the standard admin RequestHandlers.  Adding
+      this single handler is equivolent to registering:
+
+      <requestHandler name="/admin/luke"       class="org.apache.solr.handler.admin.LukeRequestHandler" />
+      <requestHandler name="/admin/system"     class="org.apache.solr.handler.admin.SystemInfoHandler" />
+      <requestHandler name="/admin/plugins"    class="org.apache.solr.handler.admin.PluginInfoHandler" />
+      <requestHandler name="/admin/threads"    class="org.apache.solr.handler.admin.ThreadDumpHandler" />
+      <requestHandler name="/admin/properties" class="org.apache.solr.handler.admin.PropertiesRequestHandler" />
+      <requestHandler name="/admin/file"       class="org.apache.solr.handler.admin.ShowFileRequestHandler" >
+
+      If you wish to hide files under ${solr.home}/conf, explicitly register the ShowFileRequestHandler using:
+      <requestHandler name="/admin/file" class="org.apache.solr.handler.admin.ShowFileRequestHandler" >
+      <lst name="invariants">
+      <str name="hidden">synonyms.txt</str>
+      <str name="hidden">anotherfile.txt</str>
+      </lst>
+      </requestHandler>
+    -->
+    <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
+
+    <!-- ping/healthcheck -->
+    <requestHandler name="/admin/ping" class="PingRequestHandler">
+      <lst name="defaults">
+        <str name="qt">standard</str>
+        <str name="q">solrpingquery</str>
+        <str name="echoParams">all</str>
+      </lst>
+    </requestHandler>
+
+    <!-- Echo the request contents back to the client -->
+    <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
+      <lst name="defaults">
+        <str name="echoParams">explicit</str> <!-- for all params (including the default etc) use: 'all' -->
+        <str name="echoHandler">true</str>
+      </lst>
+    </requestHandler>
+
+    <searchComponent class="solr.HighlightComponent" name="highlight">
+      <highlighting>
+        <!-- Configure the standard fragmenter -->
+        <!-- This could most likely be commented out in the "default" case -->
+        <fragmenter name="gap" class="org.apache.solr.highlight.GapFragmenter" default="true">
+          <lst name="defaults">
+            <int name="hl.fragsize">100</int>
+          </lst>
+        </fragmenter>
+
+        <!-- A regular-expression-based fragmenter (f.i., for sentence extraction) -->
+        <fragmenter name="regex" class="org.apache.solr.highlight.RegexFragmenter">
+          <lst name="defaults">
+            <!-- slightly smaller fragsizes work better because of slop -->
+            <int name="hl.fragsize">70</int>
+            <!-- allow 50% slop on fragment sizes -->
+            <float name="hl.regex.slop">0.5</float>
+            <!-- a basic sentence pattern -->
+            <str name="hl.regex.pattern">[-\w ,/\n\"']{20,200}</str>
+          </lst>
+        </fragmenter>
+
+        <!-- Configure the standard formatter -->
+        <formatter name="html" class="org.apache.solr.highlight.HtmlFormatter" default="true">
+          <lst name="defaults">
+            <str name="hl.simple.pre"><![CDATA[<em>]]></str>
+            <str name="hl.simple.post"><![CDATA[</em>]]></str>
+          </lst>
+        </formatter>
+      </highlighting>
+    </searchComponent>
+
+  <!-- queryResponseWriter plugins... query responses will be written using the
+    writer specified by the 'wt' request parameter matching the name of a registered
+    writer.
+    The "standard" writer is the default and will be used if 'wt' is not specified
+    in the request. XMLResponseWriter will be used if nothing is specified here.
+    The json, python, and ruby writers are also available by default.
+
+    <queryResponseWriter name="standard" class="org.apache.solr.request.XMLResponseWriter"/>
+    <queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
+    <queryResponseWriter name="python" class="org.apache.solr.request.PythonResponseWriter"/>
+    <queryResponseWriter name="ruby" class="org.apache.solr.request.RubyResponseWriter"/>
+
+    <queryResponseWriter name="custom" class="com.example.MyResponseWriter"/>
+  -->
+<!--
+    XSLT response writer (SOLR-49)
+    Changes to XSLT transforms are taken into account every xsltCacheLifetimeSeconds at most.
+   -->
+  <queryResponseWriter
+    name="xslt"
+    class="org.apache.solr.response.XSLTResponseWriter"
+   >
+     <int name="xsltCacheLifetimeSeconds">5</int>
+   </queryResponseWriter>
+
+  <!-- config for the admin interface -->
+  <admin>
+    <defaultQuery>shakespeare</defaultQuery>
+
+    <!-- configure a healthcheck file for servers behind a loadbalancer
+    <healthcheck type="file">server-enabled</healthcheck>
+    -->
+  </admin>
+
+</config>
+
diff --git a/solr/biblio/conf/admin-extra.html b/solr/biblio/conf/admin-extra.html
new file mode 100644
index 0000000000000000000000000000000000000000..aa739da862cf99b76b75b6f3ccee23efdfd2321b
--- /dev/null
+++ b/solr/biblio/conf/admin-extra.html
@@ -0,0 +1,31 @@
+<!--
+ 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.
+-->
+
+<!-- The content of this page will be statically included into the top
+of the admin page.  Uncomment this as an example to see there the content
+will show up.
+
+<hr>
+<i>This line will appear before the first table</i>
+<tr>
+<td colspan="2">
+This row will be appended to the end of the first table
+</td>
+</tr>
+<hr>
+
+-->
diff --git a/solr/biblio/conf/elevate.xml b/solr/biblio/conf/elevate.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7630ebe20fb91d4a6564785d01884d577a2fdc20
--- /dev/null
+++ b/solr/biblio/conf/elevate.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ 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.
+-->
+
+<!-- If this file is found in the config directory, it will only be
+     loaded once at startup.  If it is found in Solr's data
+     directory, it will be re-loaded every commit.
+-->
+
+<elevate>
+ <query text="foo bar">
+  <doc id="1" />
+  <doc id="2" />
+  <doc id="3" />
+ </query>
+ 
+ <query text="ipod">
+   <doc id="MA147LL/A" />  <!-- put the actual ipod at the top -->
+   <doc id="IW-02" exclude="true" /> <!-- exclude this cable -->
+ </query>
+ 
+</elevate>
diff --git a/solr/biblio/conf/protwords.txt b/solr/biblio/conf/protwords.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/solr/biblio/conf/schema.xml b/solr/biblio/conf/schema.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5b786c38462c552b8837a8924f4fbd7983781148
--- /dev/null
+++ b/solr/biblio/conf/schema.xml
@@ -0,0 +1,225 @@
+<?xml version="1.0" ?>
+<schema name="VuFind Bibliographic Index" version="1.2">
+  <types>
+    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
+    <fieldType name="textFacet" class="solr.TextField" sortMissingLast="true" omitNorms="true">
+      <analyzer>
+        <tokenizer class="solr.KeywordTokenizerFactory"/>
+        <!-- strip trailing punctuation from facets: -->
+        <filter class="solr.PatternReplaceFilterFactory" pattern="(?&lt;!\b[A-Z])[.\s]*$" replacement="" replace="first"/>
+      </analyzer>
+    </fieldType>
+    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
+      <analyzer type="index">
+        <tokenizer class="solr.ICUTokenizerFactory"/>
+        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
+        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
+        <filter class="solr.ICUFoldingFilterFactory"/>
+        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+        <filter class="solr.SnowballPorterFilterFactory" language="English"/>
+        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+      </analyzer>
+      <analyzer type="query">
+        <tokenizer class="solr.ICUTokenizerFactory"/>
+        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
+        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
+        <filter class="solr.ICUFoldingFilterFactory"/>
+        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+        <filter class="solr.SnowballPorterFilterFactory" language="English"/>
+        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+      </analyzer>
+    </fieldType>
+    <!-- Text Field without Stemming and Synonyms -->
+    <fieldType name="textProper" class="solr.TextField" positionIncrementGap="100">
+      <analyzer type="index">
+        <tokenizer class="solr.ICUTokenizerFactory"/>
+        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
+        <filter class="solr.ICUFoldingFilterFactory"/>
+        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
+        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+      </analyzer>
+      <analyzer type="query">
+        <tokenizer class="solr.ICUTokenizerFactory"/>
+        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
+        <filter class="solr.ICUFoldingFilterFactory"/>
+        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
+        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+      </analyzer>
+    </fieldType>
+    <!-- Basic Text Field for use with Spell Correction -->
+    <fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100">
+      <analyzer>
+        <tokenizer class="solr.ICUTokenizerFactory"/>
+        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
+        <filter class="solr.ICUFoldingFilterFactory"/>
+        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
+        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+      </analyzer>
+    </fieldType>
+    <!-- More advanced spell checking field. -->
+    <fieldType name="textSpellShingle" class="solr.TextField" positionIncrementGap="100">
+      <analyzer type="index">
+        <tokenizer class="solr.ICUTokenizerFactory"/>
+        <filter class="solr.ICUFoldingFilterFactory"/>
+        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
+        <filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="false"/>
+        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+      </analyzer>
+      <analyzer type="query">
+        <tokenizer class="solr.ICUTokenizerFactory"/>
+        <filter class="solr.ICUFoldingFilterFactory"/>
+        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
+        <filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="false"/>
+        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+      </analyzer>
+    </fieldType>
+    <!-- Text Field for Normalized ISBN/ISSN Numbers - take first chunk of text
+         prior to whitespace, force to lowercase, strip non-ISBN/ISSN characters,
+         omit results that are empty after stripping. -->
+    <fieldType name="isn" class="solr.TextField" positionIncrementGap="100">
+      <analyzer>
+        <tokenizer class="solr.PatternTokenizerFactory" pattern="^(\S*)\s*.*$" group="1"/>
+        <filter class="solr.LowerCaseFilterFactory"/>
+        <filter class="solr.PatternReplaceFilterFactory" pattern="[^0-9x]" replacement="" replace="all"/>
+        <filter class="solr.LengthFilterFactory" min="1" max="100" />
+      </analyzer>
+    </fieldType>
+    <fieldType name="date" class="solr.DateField" sortMissingLast="true" omitNorms="true"/>
+  </types>
+ <fields>
+   <!-- Core Fields  -->
+   <field name="id" type="string" indexed="true" stored="true"/>
+   <field name="fullrecord" type="string" indexed="false" stored="true"/>
+   <field name="marc_error" type="string" indexed="false" stored="true" multiValued="true"/>
+   <field name="allfields" type="text" indexed="true" stored="false"/>
+   <field name="allfields_unstemmed" type="textProper" indexed="true" stored="false"/>
+   <field name="fulltext" type="text" indexed="true" stored="false"/>
+   <field name="fulltext_unstemmed" type="textProper" indexed="true" stored="false"/>
+   <field name="spelling" type="textSpell" indexed="true" stored="true"/>
+   <field name="spellingShingle" type="textSpellShingle" indexed="true" stored="true" multiValued="true"/>
+   <!-- Institutional Fields -->
+   <field name="institution" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="collection" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="building" type="string" indexed="true" stored="true" multiValued="true"/>
+   <!-- Generic Fields -->
+   <field name="language" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="format" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="author" type="textProper" indexed="true" stored="true" termVectors="true"/>
+   <field name="author-letter" type="string" indexed="true" stored="true"/>
+   <field name="authorStr" type="textFacet" indexed="true" stored="false"/>
+   <field name="title" type="text" indexed="true" stored="true"/>
+   <field name="title_sort" type="string" indexed="true" stored="true"/>
+   <field name="title_sub" type="text" indexed="true" stored="true"/>
+   <field name="title_short" type="text" indexed="true" stored="true"/>
+   <field name="title_full" type="text" indexed="true" stored="true"/>
+   <field name="title_full_unstemmed" type="textProper" indexed="true" stored="true"/>
+   <field name="title_fullStr" type="string" indexed="true" stored="true"/>
+   <field name="title_auth" type="text" indexed="true" stored="true"/>
+   <field name="physical" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="publisher" type="textProper" indexed="true" stored="true" multiValued="true"/>
+   <field name="publisherStr" type="string" indexed="true" stored="false" multiValued="true"/>
+   <field name="publishDate" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="publishDateSort" type="string" indexed="true" stored="false"/>
+   <field name="edition" type="string" indexed="true" stored="true"/>
+   <field name="description" type="text" indexed="true" stored="true"/>
+   <field name="contents" type="text" indexed="true" stored="true" multiValued="true"/>
+   <field name="url" type="string" indexed="false" stored="true" multiValued="true"/>
+   <field name="thumbnail" type="string" indexed="false" stored="true"/>
+   <!-- Catalog Specific Fields -->
+   <field name="lccn" type="string" indexed="true" stored="true"/>
+   <field name="ctrlnum" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="isbn" type="isn" indexed="true" stored="true" multiValued="true"/>
+   <field name="issn" type="isn" indexed="true" stored="true" multiValued="true"/>
+   <field name="oclc_num" type="string" indexed="true" stored="true" multiValued="true" />
+   <field name="callnumber" type="string" indexed="true" stored="true"/>
+   <field name="callnumber-a" type="string" indexed="true" stored="true"/>
+   <field name="callnumber-first" type="string" indexed="true" stored="true"/>
+   <field name="callnumber-first-code" type="string" indexed="true" stored="true"/>
+   <field name="callnumber-subject" type="string" indexed="true" stored="true"/>
+   <field name="callnumber-subject-code" type="string" indexed="true" stored="true"/>
+   <field name="callnumber-label" type="string" indexed="true" stored="true"/>
+   <field name="dewey-hundreds" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="dewey-tens" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="dewey-ones" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="dewey-full" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="dewey-sort" type="string" indexed="true" stored="true" />
+   <field name="dewey-raw" type="string" indexed="true" stored="true" />
+   <field name="author2" type="textProper" indexed="true" stored="true" multiValued="true"/>
+   <field name="author2Str" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="author2-role" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="author_fuller" type="textProper" indexed="true" stored="true" />
+   <field name="author_additional" type="textProper" indexed="true" stored="true" multiValued="true"/>
+   <field name="author_additionalStr" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="title_alt" type="text" indexed="true" stored="true" multiValued="true"/>
+   <field name="title_old" type="text" indexed="true" stored="true" multiValued="true"/>
+   <field name="title_new" type="text" indexed="true" stored="true" multiValued="true"/>
+   <field name="dateSpan" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="series" type="text" indexed="true" stored="true" multiValued="true"/>
+   <field name="series2" type="text" indexed="true" stored="true" multiValued="true"/>
+   <field name="topic" type="text" indexed="true" stored="true" multiValued="true"/>
+   <field name="topic_unstemmed" type="textProper" indexed="true" stored="false" multiValued="true"/>
+   <field name="topic_facet" type="textFacet" indexed="true" stored="true" multiValued="true"/>
+   <field name="topic_browse" type="string" indexed="true" stored="false" multiValued="true"/>
+   <field name="author_browse" type="string" indexed="true" stored="false" multiValued="true"/>
+   <field name="genre" type="text" indexed="true" stored="true" multiValued="true"/>
+   <field name="genre_facet" type="textFacet" indexed="true" stored="true" multiValued="true"/>
+   <field name="geographic" type="text" indexed="true" stored="true" multiValued="true"/>
+   <field name="geographic_facet" type="textFacet" indexed="true" stored="true" multiValued="true"/>
+   <field name="era" type="text" indexed="true" stored="true" multiValued="true"/>
+   <field name="era_facet" type="textFacet" indexed="true" stored="true" multiValued="true"/>
+   <field name="illustrated" type="string" indexed="true" stored="true" multiValued="false"/>
+   <field name="long_lat" type="textFacet" indexed="true" stored="true" multiValued="false"/>
+   <!-- Container fields (i.e. for describing journal containing an article) -->
+   <field name="container_title" type="text" indexed="true" stored="true"/>
+   <field name="container_volume" type="text" indexed="true" stored="true"/>
+   <field name="container_issue" type="text" indexed="true" stored="true"/>
+   <field name="container_start_page" type="text" indexed="true" stored="true"/>
+   <field name="container_reference" type="text" indexed="true" stored="true"/>
+   <!-- Used for loading correct record driver -->
+   <field name="recordtype" type="string" indexed="false" stored="true"/>
+   <!-- Tracking fields to keep track of oldest and most recent index times -->
+   <field name="first_indexed" type="date" indexed="true" stored="true"/>
+   <field name="last_indexed" type="date" indexed="true" stored="true"/>
+   <!-- Dynamic fields for customization without schema modification -->
+   <dynamicField name="*_date" type="date" indexed="true" stored="true"/>
+   <dynamicField name="*_date_mv" type="date" indexed="true" stored="true" multiValued="true"/>
+   <dynamicField name="*_isn" type="isn" indexed="true" stored="true"/>
+   <dynamicField name="*_isn_mv" type="isn" indexed="true" stored="true" multiValued="true"/>
+   <dynamicField name="*_str" type="string" indexed="true" stored="true"/>
+   <dynamicField name="*_str_mv" type="string" indexed="true" stored="true" multiValued="true"/>
+   <dynamicField name="*_txt" type="text" indexed="true" stored="true"/>
+   <dynamicField name="*_txt_mv" type="text" indexed="true" stored="true" multiValued="true"/>
+   <dynamicField name="*_txtF" type="textFacet" indexed="true" stored="true"/>
+   <dynamicField name="*_txtF_mv" type="textFacet" indexed="true" stored="true" multiValued="true"/>
+   <dynamicField name="*_txtP" type="textProper" indexed="true" stored="true"/>
+   <dynamicField name="*_txtP_mv" type="textProper" indexed="true" stored="true" multiValued="true"/>
+ </fields>
+ <uniqueKey>id</uniqueKey>
+ <defaultSearchField>allfields</defaultSearchField>
+ <!-- CopyFields for Spelling -->
+ <!-- ** Basic, single word spelling -->
+ <copyField source="allfields" dest="spelling"/>
+ <!-- ** Complex, Shingle spelling -->
+ <copyField source="author"   dest="spellingShingle"/>
+ <copyField source="title"    dest="spellingShingle"/>
+ <copyField source="contents" dest="spellingShingle"/>
+ <copyField source="series"   dest="spellingShingle"/>
+ <copyField source="topic"    dest="spellingShingle"/>
+ <!-- CopyFields for Faceting on Text -->
+ <copyField source="title_full" dest="title_fullStr"/>
+ <copyField source="title_full" dest="title_full_unstemmed"/>
+ <copyField source="author" dest="authorStr"/>
+ <copyField source="author2" dest="author2Str"/>
+ <copyField source="author_additional" dest="author_additionalStr"/>
+ <copyField source="publisher" dest="publisherStr"/>
+ <copyField source="topic" dest="topic_unstemmed"/>
+ <copyField source="allfields" dest="allfields_unstemmed"/>
+ <copyField source="fulltext" dest="fulltext_unstemmed"/>
+ <!-- CopyFields for Alphabetic Browse -->
+ <copyField source="topic"    dest="topic_browse"/>
+ <copyField source="author"    dest="author_browse"/>
+ <copyField source="author2"    dest="author_browse"/>
+ <!-- Default Boolean Operator -->
+ <solrQueryParser defaultOperator="AND"/>
+</schema>
diff --git a/solr/biblio/conf/scripts.conf b/solr/biblio/conf/scripts.conf
new file mode 100644
index 0000000000000000000000000000000000000000..f58b262ae0c87b6bcf163a8462e57737f90dbdcc
--- /dev/null
+++ b/solr/biblio/conf/scripts.conf
@@ -0,0 +1,24 @@
+# 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.
+
+user=
+solr_hostname=localhost
+solr_port=8983
+rsyncd_port=18983
+data_dir=
+webapp_name=solr
+master_host=
+master_data_dir=
+master_status_dir=
diff --git a/solr/biblio/conf/solrconfig.xml b/solr/biblio/conf/solrconfig.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ef1d5df2ee1e4fa93898e89c51868f33aba1a1df
--- /dev/null
+++ b/solr/biblio/conf/solrconfig.xml
@@ -0,0 +1,724 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ 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.
+-->
+
+<config>
+  <!-- Set this to 'false' if you want solr to continue working after it has 
+       encountered an severe configuration error.  In a production environment, 
+       you may want solr to keep working even if one handler is mis-configured.
+
+       You may also set this to false using by setting the system property:
+         -Dsolr.abortOnConfigurationError=false
+     -->
+  <abortOnConfigurationError>${solr.abortOnConfigurationError:false}</abortOnConfigurationError>
+
+  <!-- Controls what version of Lucene various components of Solr
+       adhere to.  Generally, you want to use the latest version to
+       get all bug fixes and improvements. It is highly recommended
+       that you fully re-index after changing this setting as it can
+       affect both how text is indexed and queried.
+    -->
+  <luceneMatchVersion>LUCENE_35</luceneMatchVersion>
+
+  <!-- Used to specify an alternate directory to hold all index data
+       other than the default ./data under the Solr home.
+       If replication is in use, this should match the replication configuration. -->
+  <dataDir>${solr.solr.home:./solr}/biblio</dataDir>
+
+
+  <indexDefaults>
+   <!-- Values here affect all index writers and act as a default unless overridden. -->
+    <useCompoundFile>false</useCompoundFile>
+
+    <mergeFactor>10</mergeFactor>
+    <!--
+     If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene will flush based on whichever limit is hit first.
+
+     -->
+    <!--<maxBufferedDocs>1000</maxBufferedDocs>-->
+    <!-- Tell Lucene when to flush documents to disk.
+    Giving Lucene more memory for indexing means faster indexing at the cost of more RAM
+
+    If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene will flush based on whichever limit is hit first.
+
+    -->
+    <ramBufferSizeMB>32</ramBufferSizeMB>
+    <maxMergeDocs>2147483647</maxMergeDocs>
+    <maxFieldLength>10000</maxFieldLength>
+    <writeLockTimeout>1000</writeLockTimeout>
+    <commitLockTimeout>10000</commitLockTimeout>
+
+    <!--
+     Expert: Turn on Lucene's auto commit capability.
+
+     TODO: Add recommendations on why you would want to do this.
+
+     NOTE: Despite the name, this value does not have any relation to Solr's autoCommit functionality
+
+     -->
+    <!--<luceneAutoCommit>false</luceneAutoCommit>-->
+    <!--
+     Expert:
+     The Merge Policy in Lucene controls how merging is handled by Lucene.  The default in 2.3 is the LogByteSizeMergePolicy, previous
+     versions used LogDocMergePolicy.
+
+     LogByteSizeMergePolicy chooses segments to merge based on their size.  The Lucene 2.2 default, LogDocMergePolicy chose when
+     to merge based on number of documents
+
+     Other implementations of MergePolicy must have a no-argument constructor
+     -->
+    <!--<mergePolicy>org.apache.lucene.index.LogByteSizeMergePolicy</mergePolicy>-->
+
+    <!--
+     Expert:
+     The Merge Scheduler in Lucene controls how merges are performed.  The ConcurrentMergeScheduler (Lucene 2.3 default)
+      can perform merges in the background using separate threads.  The SerialMergeScheduler (Lucene 2.2 default) does not.
+     -->
+    <!--<mergeScheduler>org.apache.lucene.index.ConcurrentMergeScheduler</mergeScheduler>-->
+
+    <!--
+      This option specifies which Lucene LockFactory implementation to use.
+      
+      single = SingleInstanceLockFactory - suggested for a read-only index
+               or when there is no possibility of another process trying
+               to modify the index.
+      native = NativeFSLockFactory
+      simple = SimpleFSLockFactory
+
+      (For backwards compatibility with Solr 1.2, 'simple' is the default
+       if not specified.)
+    -->
+    <lockType>single</lockType>
+  </indexDefaults>
+
+  <mainIndex>
+    <!-- options specific to the main on-disk lucene index -->
+    <useCompoundFile>false</useCompoundFile>
+    <ramBufferSizeMB>32</ramBufferSizeMB>
+    <mergeFactor>10</mergeFactor>
+    <!-- Deprecated -->
+    <!--<maxBufferedDocs>1000</maxBufferedDocs>-->
+    <maxMergeDocs>2147483647</maxMergeDocs>
+    <maxFieldLength>10000</maxFieldLength>
+
+    <!-- If true, unlock any held write or commit locks on startup. 
+         This defeats the locking mechanism that allows multiple
+         processes to safely access a lucene index, and should be
+         used with care.
+         This is not needed if lock type is 'none' or 'single'
+     -->
+    <unlockOnStartup>false</unlockOnStartup>
+
+    <!--
+        Custom deletion policies can specified here. The class must
+        implement org.apache.lucene.index.IndexDeletionPolicy.
+
+        http://lucene.apache.org/java/2_3_2/api/org/apache/lucene/index/IndexDeletionPolicy.html
+
+        The standard Solr IndexDeletionPolicy implementation supports deleting
+        index commit points on number of commits, age of commit point and
+        optimized status.
+
+        The latest commit point should always be preserved regardless
+        of the criteria.
+    -->
+    <deletionPolicy class="solr.SolrDeletionPolicy">
+      <!-- Keep only optimized commit points -->
+      <str name="keepOptimizedOnly">false</str>
+      <!-- The maximum number of commit points to be kept -->
+      <str name="maxCommitsToKeep">1</str>
+      <!--
+          Delete all commit points once they have reached the given age.
+          Supports DateMathParser syntax e.g.
+
+          <str name="maxCommitAge">30MINUTES</str>
+          <str name="maxCommitAge">1DAY</str>
+      -->
+    </deletionPolicy>
+        
+  </mainIndex>
+  
+  <!--	Enables JMX if and only if an existing MBeanServer is found, use 
+  		this if you want to configure JMX through JVM parameters. Remove
+  		this to disable exposing Solr configuration and statistics to JMX.
+  		
+		If you want to connect to a particular server, specify the agentId
+		e.g. <jmx agentId="myAgent" />
+		
+		If you want to start a new MBeanServer, specify the serviceUrl
+		e.g <jmx serviceurl="service:jmx:rmi:///jndi/rmi://localhost:9999/solr" />
+		
+		For more details see http://wiki.apache.org/solr/SolrJmx
+  -->
+  <jmx />
+
+  <!-- the default high-performance update handler -->
+  <updateHandler class="solr.DirectUpdateHandler2">
+
+    <!-- A prefix of "solr." for class names is an alias that
+         causes solr to search appropriate packages, including
+         org.apache.solr.(search|update|request|core|analysis)
+     -->
+
+    <!-- Perform a <commit/> automatically under certain conditions:
+         maxDocs - number of updates since last commit is greater than this
+         maxTime - oldest uncommited update (in ms) is this long ago
+    -->
+    <autoCommit> 
+      <maxDocs>10000</maxDocs>
+      <maxTime>20000</maxTime>
+    </autoCommit>
+
+    <!-- The RunExecutableListener executes an external command.
+         exe - the name of the executable to run
+         dir - dir to use as the current working directory. default="."
+         wait - the calling thread waits until the executable returns. default="true"
+         args - the arguments to pass to the program.  default=nothing
+         env - environment variables to set.  default=nothing
+      -->
+    <!-- A postCommit event is fired after every commit or optimize command
+    <listener event="postCommit" class="solr.RunExecutableListener">
+      <str name="exe">solr/bin/snapshooter</str>
+      <str name="dir">.</str>
+      <bool name="wait">true</bool>
+      <arr name="args"> <str>arg1</str> <str>arg2</str> </arr>
+      <arr name="env"> <str>MYVAR=val1</str> </arr>
+    </listener>
+    -->
+    <!-- A postOptimize event is fired only after every optimize command, useful
+         in conjunction with index distribution to only distribute optimized indicies 
+    <listener event="postOptimize" class="solr.RunExecutableListener">
+      <str name="exe">snapshooter</str>
+      <str name="dir">solr/bin</str>
+      <bool name="wait">true</bool>
+    </listener>
+    -->
+
+  </updateHandler>
+
+
+  <query>
+    <!-- Maximum number of clauses in a boolean query... can affect
+        range or prefix queries that expand to big boolean
+        queries.  An exception is thrown if exceeded.  -->
+    <maxBooleanClauses>1024</maxBooleanClauses>
+
+    
+    <!-- Cache used by SolrIndexSearcher for filters (DocSets),
+         unordered sets of *all* documents that match a query.
+         When a new searcher is opened, its caches may be prepopulated
+         or "autowarmed" using data from caches in the old searcher.
+         autowarmCount is the number of items to prepopulate.  For LRUCache,
+         the autowarmed items will be the most recently accessed items.
+       Parameters:
+         class - the SolrCache implementation (currently only LRUCache)
+         size - the maximum number of entries in the cache
+         initialSize - the initial capacity (number of entries) of
+           the cache.  (seel java.util.HashMap)
+         autowarmCount - the number of entries to prepopulate from
+           and old cache.
+         -->
+    <filterCache
+      class="solr.FastLRUCache"
+      size="300000"
+      initialSize="300000"
+      autowarmCount="50000"/>
+
+   <!-- queryResultCache caches results of searches - ordered lists of
+         document ids (DocList) based on a query, a sort, and the range
+         of documents requested.  -->
+    <queryResultCache
+      class="solr.LRUCache"
+      size="100000"
+      initialSize="100000"
+      autowarmCount="50000"/>
+
+  <!-- documentCache caches Lucene Document objects (the stored fields for each document).
+       Since Lucene internal document ids are transient, this cache will not be autowarmed.  -->
+    <documentCache
+      class="solr.LRUCache"
+      size="50000"
+      initialSize="50000"
+      autowarmCount="10000"/>
+
+    <!-- If true, stored fields that are not requested will be loaded lazily.
+
+    This can result in a significant speed improvement if the usual case is to
+    not load all stored fields, especially if the skipped fields are large compressed
+    text fields.
+    -->
+    <enableLazyFieldLoading>true</enableLazyFieldLoading>
+
+    <!-- Example of a generic cache.  These caches may be accessed by name
+         through SolrIndexSearcher.getCache(),cacheLookup(), and cacheInsert().
+         The purpose is to enable easy caching of user/application level data.
+         The regenerator argument should be specified as an implementation
+         of solr.search.CacheRegenerator if autowarming is desired.  -->
+    <!--
+    <cache name="myUserCache"
+      class="solr.LRUCache"
+      size="4096"
+      initialSize="1024"
+      autowarmCount="1024"
+      regenerator="org.mycompany.mypackage.MyRegenerator"
+      />
+    -->
+
+   <!-- An optimization that attempts to use a filter to satisfy a search.
+         If the requested sort does not include score, then the filterCache
+         will be checked for a filter matching the query. If found, the filter
+         will be used as the source of document ids, and then the sort will be
+         applied to that.
+    <useFilterForSortedQuery>true</useFilterForSortedQuery>
+   -->
+
+   <!-- An optimization for use with the queryResultCache.  When a search
+         is requested, a superset of the requested number of document ids
+         are collected.  For example, if a search for a particular query
+         requests matching documents 10 through 19, and queryWindowSize is 50,
+         then documents 0 through 49 will be collected and cached.  Any further
+         requests in that range can be satisfied via the cache.  -->
+    <queryResultWindowSize>50</queryResultWindowSize>
+    
+    <!-- Maximum number of documents to cache for any entry in the
+         queryResultCache. -->
+    <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
+
+    <!-- This entry enables an int hash representation for filters (DocSets)
+         when the number of items in the set is less than maxSize.  For smaller
+         sets, this representation is more memory efficient, more efficient to
+         iterate over, and faster to take intersections.  -->
+    <HashDocSet maxSize="3000" loadFactor="0.75"/>
+
+    <!-- a newSearcher event is fired whenever a new searcher is being prepared
+         and there is a current searcher handling requests (aka registered). -->
+    <!-- QuerySenderListener takes an array of NamedList and executes a
+         local query request for each NamedList in sequence. -->
+    <listener event="newSearcher" class="solr.QuerySenderListener">
+      <arr name="queries">
+        <lst>
+          <str name="q">science art business engineering history</str>
+          <str name="start">0</str>
+          <str name="rows">10</str>
+        </lst>
+      </arr>
+    </listener>
+
+    <!-- a firstSearcher event is fired whenever a new searcher is being
+         prepared but there is no current registered searcher to handle
+         requests or to gain autowarming data from. -->
+    <listener event="firstSearcher" class="solr.QuerySenderListener">
+      <arr name="queries">
+        <lst>
+          <str name="q">science art business engineering history</str>
+          <str name="facet.field">format</str>
+          <str name="fq">format:book</str>
+        </lst>
+      </arr>
+    </listener>
+    
+    <!-- If a search request comes in and there is no current registered searcher,
+         then immediately register the still warming searcher and use it.  If
+         "false" then all requests will block until the first searcher is done
+         warming. -->
+    <useColdSearcher>false</useColdSearcher>
+
+    <!-- Maximum number of searchers that may be warming in the background
+      concurrently.  An error is returned if this limit is exceeded. Recommend
+      1-2 for read-only slaves, higher for masters w/o cache warming. -->
+    <maxWarmingSearchers>2</maxWarmingSearchers>
+
+  </query>
+
+  <!-- 
+    Let the dispatch filter handler /select?qt=XXX
+    handleSelect=true will use consistent error handling for /select and /update
+    handleSelect=false will use solr1.1 style error formatting
+    -->
+  <requestDispatcher handleSelect="true" >
+    <!--Make sure your system has some authentication before enabling remote streaming!  -->
+    <requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048000" />
+        
+    <!-- Set HTTP caching related parameters (for proxy caches and clients).
+          
+         To get the behaviour of Solr 1.2 (ie: no caching related headers)
+         use the never304="true" option and do not specify a value for
+         <cacheControl>
+    -->
+    <!-- <httpCaching never304="true"> -->
+    <httpCaching lastModifiedFrom="openTime"
+                 etagSeed="Solr">
+       <!-- lastModFrom="openTime" is the default, the Last-Modified value
+            (and validation against If-Modified-Since requests) will all be
+            relative to when the current Searcher was opened.
+            You can change it to lastModFrom="dirLastMod" if you want the
+            value to exactly corrispond to when the physical index was last
+            modified.
+               
+            etagSeed="..." is an option you can change to force the ETag
+            header (and validation against If-None-Match requests) to be
+            differnet even if the index has not changed (ie: when making
+            significant changes to your config file)
+
+            lastModifiedFrom and etagSeed are both ignored if you use the
+            never304="true" option.
+       -->
+       <!-- If you include a <cacheControl> directive, it will be used to
+            generate a Cache-Control header, as well as an Expires header
+            if the value contains "max-age="
+               
+            By default, no Cache-Control header is generated.
+
+            You can use the <cacheControl> option even if you have set
+            never304="true"
+       -->
+       <!-- <cacheControl>max-age=30, public</cacheControl> -->
+    </httpCaching>
+  </requestDispatcher>
+  
+      
+  <!-- requestHandler plugins... incoming queries will be dispatched to the
+     correct handler based on the path or the qt (query type) param.
+     Names starting with a '/' are accessed with the a path equal to the 
+     registered name.  Names without a leading '/' are accessed with:
+      http://host/app/select?qt=name
+     If no qt is defined, the requestHandler that declares default="true"
+     will be used.
+  -->
+  <requestHandler name="standard" class="solr.StandardRequestHandler" default="true">
+    <!-- default values for query parameters -->
+     <lst name="defaults">
+       <str name="echoParams">explicit</str>
+       <!-- 
+       <int name="rows">10</int>
+       <str name="fl">*</str>
+       <str name="version">2.1</str>
+        -->
+     <str name="spellcheck.extendedResults">true</str>
+     <str name="spellcheck.onlyMorePopular">true</str>
+     <str name="spellcheck.count">20</str>
+    </lst>
+    <arr name="last-components">
+      <str>spellcheck</str>
+    </arr>     
+  </requestHandler>
+  
+  <!-- the following handler will be used for eligible dismax searches defined
+     in web/conf/searchspecs.yaml.  Searches relying on advanced features
+     incompatible with dismax will be sent to the standard handler instead.
+     You can use this handler definition to set global Dismax settings
+     (i.e. mm / bf).  If you need different settings for different types of
+     searches (i.e. Title vs. Author), you can also configure individual
+     settings in the searchspecs.yaml file.
+  -->
+  <requestHandler name="dismax" class="solr.SearchHandler">
+    <lst name="defaults">
+     <str name="defType">dismax</str>
+     <str name="echoParams">explicit</str>
+     <str name="spellcheck.extendedResults">true</str>
+     <str name="spellcheck.onlyMorePopular">true</str>
+     <str name="spellcheck.count">20</str>
+    </lst>
+    <arr name="last-components">
+      <str>spellcheck</str>
+    </arr>     
+  </requestHandler>
+  
+  <requestHandler name="morelikethis" class="solr.MoreLikeThisHandler">
+    <lst name="defaults">
+      <str name="mlt.fl">title,title_short,callnumber-label,topic,language,author,publishDate</str>
+      <str name="mlt.qf">
+        title^75
+        title_short^100
+        callnumber-label^400
+        topic^300
+        language^30
+        author^75
+        publishDate
+      </str>
+      <int name="mlt.mintf">1</int>
+      <int name="mlt.mindf">1</int>
+      <str name="mlt.boost">true</str>
+      <int name="mlt.count">5</int>
+      <int name="rows">5</int>
+    </lst>
+  </requestHandler>
+
+  <requestHandler name="/browse" class="au.gov.nla.solr.handler.BrowseRequestHandler">
+    <str name="authIndexPath">${solr.solr.home:./solr}/authority/index</str>
+    <str name="bibIndexPath">${solr.solr.home:./solr}/biblio/index</str>
+
+    <!-- These definitions should match the field names used in the authority index. -->
+    <str name="preferredHeadingField">heading</str>
+    <str name="useInsteadHeadingField">use_for</str>
+    <str name="seeAlsoHeadingField">see_also</str>
+    <str name="scopeNoteField">scope_note</str>
+
+
+    <str name="sources">topic,author,title,lcc,dewey</str>
+
+    <lst name="topic">
+      <str name="DBpath">${solr.solr.home:./solr}/alphabetical_browse/topic_browse.db</str>
+      <str name="field">topic_browse</str>
+    </lst>
+
+    <lst name="author">
+      <str name="DBpath">${solr.solr.home:./solr}/alphabetical_browse/author_browse.db</str>
+      <str name="field">author_browse</str>
+    </lst>
+
+    <lst name="title">
+      <str name="DBpath">${solr.solr.home:./solr}/alphabetical_browse/title_browse.db</str>
+      <str name="field">title_fullStr</str>
+    </lst>
+
+    <lst name="lcc">
+      <str name="DBpath">${solr.solr.home:./solr}/alphabetical_browse/lcc_browse.db</str>
+      <str name="field">callnumber-a</str>
+    </lst>
+
+    <lst name="dewey">
+      <str name="DBpath">${solr.solr.home:./solr}/alphabetical_browse/dewey_browse.db</str>
+      <str name="field">dewey-raw</str>
+      <str name="ignoreDiacritics">yes</str>
+    </lst>
+
+  </requestHandler>
+
+  <searchComponent name="spellcheck" class="org.apache.solr.handler.component.SpellCheckComponent">
+    <lst name="spellchecker">
+      <str name="name">default</str>
+      <str name="field">spellingShingle</str>
+      <str name="accuracy">0.75</str>
+      <str name="spellcheckIndexDir">./spellShingle</str>
+      <str name="queryAnalyzerFieldType">textSpellShingle</str>
+      <str name="buildOnOptimize">true</str>
+    </lst>
+    <lst name="spellchecker">
+      <str name="name">basicSpell</str>
+      <str name="field">spelling</str>
+      <str name="accuracy">0.75</str>
+      <str name="spellcheckIndexDir">./spellchecker</str>
+      <str name="queryAnalyzerFieldType">textSpell</str>
+      <str name="buildOnOptimize">true</str>
+    </lst>
+  </searchComponent>
+  <queryConverter name="queryConverter" class="org.apache.solr.spelling.SpellingQueryConverter"/>
+
+  <!-- Search component for extracting terms (useful for sitemap generation) -->
+  <searchComponent name="term" class="org.apache.solr.handler.component.TermsComponent">
+  </searchComponent>
+
+  <!--
+   
+   Search components are registered to SolrCore and used by Search Handlers
+   
+   By default, the following components are avaliable:
+    
+   <searchComponent name="query"     class="org.apache.solr.handler.component.QueryComponent" />
+   <searchComponent name="facet"     class="org.apache.solr.handler.component.FacetComponent" />
+   <searchComponent name="mlt"       class="org.apache.solr.handler.component.MoreLikeThisComponent" />
+   <searchComponent name="highlight" class="org.apache.solr.handler.component.HighlightComponent" />
+   <searchComponent name="stats"     class="org.apache.solr.handler.component.StatsComponent" />
+   <searchComponent name="debug"     class="org.apache.solr.handler.component.DebugComponent" />
+  
+   If you register a searchComponent to one of the standard names, that will be used instead.
+  
+   -->
+ 
+  <requestHandler name="/search" class="org.apache.solr.handler.component.SearchHandler">
+    <lst name="defaults">
+      <str name="echoParams">explicit</str>
+    </lst>
+    <!--
+    By default, this will register the following components:
+    
+    <arr name="components">
+      <str>query</str>
+      <str>facet</str>
+      <str>mlt</str>
+      <str>highlight</str>
+      <str>debug</str>
+    </arr>
+    
+    To insert handlers before or after the 'standard' components, use:
+    
+    <arr name="first-components">
+      <str>first</str>
+    </arr>
+    
+    <arr name="last-components">
+      <str>last</str>
+    </arr>
+    
+    -->
+    <arr name="last-components">
+      <str>spellcheck</str>
+      <str>elevator</str>
+    </arr>
+  </requestHandler>
+  
+  <!-- Request handler to extract terms (useful for sitemap generation) -->
+  <requestHandler name="/term" class="org.apache.solr.handler.component.SearchHandler">
+    <arr name="components">
+      <str>term</str>
+    </arr>
+  </requestHandler>
+
+  <searchComponent name="elevator" class="org.apache.solr.handler.component.QueryElevationComponent" >
+    <!-- pick a fieldType to analyze queries -->
+    <str name="queryFieldType">string</str>
+    <str name="config-file">elevate.xml</str>
+  </searchComponent>
+ 
+  <requestHandler name="/elevate" class="org.apache.solr.handler.component.SearchHandler" startup="lazy">
+    <lst name="defaults">
+      <str name="echoParams">explicit</str>
+    </lst>
+    <arr name="last-components">
+      <str>elevator</str>
+    </arr>
+  </requestHandler>
+  
+
+  
+  <!-- Update request handler.  
+  
+       Note: Since solr1.1 requestHandlers requires a valid content type header if posted in 
+       the body. For example, curl now requires: -H 'Content-type:text/xml; charset=utf-8'
+       The response format differs from solr1.1 formatting and returns a standard error code.
+       
+       To enable solr1.1 behavior, remove the /update handler or change its path
+    -->
+  <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" />
+
+  <!--
+   Analysis request handler.  Since Solr 1.3.  Use to returnhow a document is analyzed.  Useful
+   for debugging and as a token server for other types of applications
+   -->
+  <requestHandler name="/analysis" class="solr.AnalysisRequestHandler" />
+  
+
+  <!-- CSV update handler, loaded on demand -->
+  <requestHandler name="/update/csv" class="solr.CSVRequestHandler" startup="lazy" />
+
+
+  <!-- 
+   Admin Handlers - This will register all the standard admin RequestHandlers.  Adding 
+   this single handler is equivolent to registering:
+   
+  <requestHandler name="/admin/luke"       class="org.apache.solr.handler.admin.LukeRequestHandler" />
+  <requestHandler name="/admin/system"     class="org.apache.solr.handler.admin.SystemInfoHandler" />
+  <requestHandler name="/admin/plugins"    class="org.apache.solr.handler.admin.PluginInfoHandler" />
+  <requestHandler name="/admin/threads"    class="org.apache.solr.handler.admin.ThreadDumpHandler" />
+  <requestHandler name="/admin/properties" class="org.apache.solr.handler.admin.PropertiesRequestHandler" />
+  <requestHandler name="/admin/file"       class="org.apache.solr.handler.admin.ShowFileRequestHandler" >
+  
+  If you wish to hide files under ${solr.home}/conf, explicitly register the ShowFileRequestHandler using:
+  <requestHandler name="/admin/file" class="org.apache.solr.handler.admin.ShowFileRequestHandler" >
+    <lst name="invariants">
+     <str name="hidden">synonyms.txt</str> 
+     <str name="hidden">anotherfile.txt</str> 
+    </lst>
+  </requestHandler>
+  -->
+  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
+  
+  <!-- ping/healthcheck -->
+  <requestHandler name="/admin/ping" class="PingRequestHandler">
+    <lst name="defaults">
+      <str name="qt">standard</str>
+      <str name="q">solrpingquery</str>
+      <str name="echoParams">all</str>
+    </lst>
+  </requestHandler>
+    
+  <!-- Echo the request contents back to the client -->
+  <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
+    <lst name="defaults">
+     <str name="echoParams">explicit</str> <!-- for all params (including the default etc) use: 'all' -->
+     <str name="echoHandler">true</str>
+    </lst>
+  </requestHandler>
+  
+  <searchComponent class="solr.HighlightComponent" name="highlight">
+    <highlighting>
+      <!-- Configure the standard fragmenter -->
+      <!-- This could most likely be commented out in the "default" case -->
+      <fragmenter name="gap" class="org.apache.solr.highlight.GapFragmenter" default="true">
+        <lst name="defaults">
+          <int name="hl.fragsize">100</int>
+        </lst>
+      </fragmenter>
+
+      <!-- A regular-expression-based fragmenter (f.i., for sentence extraction) -->
+      <fragmenter name="regex" class="org.apache.solr.highlight.RegexFragmenter">
+        <lst name="defaults">
+          <!-- slightly smaller fragsizes work better because of slop -->
+          <int name="hl.fragsize">70</int>
+          <!-- allow 50% slop on fragment sizes -->
+          <float name="hl.regex.slop">0.5</float>
+          <!-- a basic sentence pattern -->
+          <str name="hl.regex.pattern">[-\w ,/\n\"']{20,200}</str>
+        </lst>
+      </fragmenter>
+
+      <!-- Configure the standard formatter -->
+      <formatter name="html" class="org.apache.solr.highlight.HtmlFormatter" default="true">
+        <lst name="defaults">
+          <str name="hl.simple.pre"><![CDATA[<em>]]></str>
+          <str name="hl.simple.post"><![CDATA[</em>]]></str>
+        </lst>
+      </formatter>
+    </highlighting>
+  </searchComponent>
+
+  <!-- queryResponseWriter plugins... query responses will be written using the
+    writer specified by the 'wt' request parameter matching the name of a registered
+    writer.
+    The "default" writer is the default and will be used if 'wt' is not specified 
+    in the request. XMLResponseWriter will be used if nothing is specified here.
+    The json, python, and ruby writers are also available by default.
+
+    <queryResponseWriter name="xml" class="org.apache.solr.request.XMLResponseWriter" default="true"/>
+    <queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
+    <queryResponseWriter name="python" class="org.apache.solr.request.PythonResponseWriter"/>
+    <queryResponseWriter name="ruby" class="org.apache.solr.request.RubyResponseWriter"/>
+    <queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/>
+    <queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/>
+
+    <queryResponseWriter name="custom" class="com.example.MyResponseWriter"/>
+  -->
+
+  <!-- XSLT response writer transforms the XML output by any xslt file found
+       in Solr's conf/xslt directory.  Changes to xslt files are checked for
+       every xsltCacheLifetimeSeconds.  
+   -->
+  <queryResponseWriter name="xslt" class="org.apache.solr.response.XSLTResponseWriter">
+    <int name="xsltCacheLifetimeSeconds">5</int>
+  </queryResponseWriter> 
+    
+  <!-- config for the admin interface --> 
+  <admin>
+    <defaultQuery>shakespeare</defaultQuery>
+    
+    <!-- configure a healthcheck file for servers behind a loadbalancer
+    <healthcheck type="file">server-enabled</healthcheck>
+    -->
+  </admin>
+
+</config>
diff --git a/solr/biblio/conf/stopwords.txt b/solr/biblio/conf/stopwords.txt
new file mode 100644
index 0000000000000000000000000000000000000000..40a5a5fa2f1bfd48e137dbbe4a495e3550944be0
--- /dev/null
+++ b/solr/biblio/conf/stopwords.txt
@@ -0,0 +1,34 @@
+an
+and
+are
+as
+at
+be
+but
+by
+for
+if
+in
+into
+is
+it
+no
+not
+of
+on
+or
+s
+such
+t
+that
+the
+their
+then
+there
+these
+they
+this
+to
+was
+will
+with
\ No newline at end of file
diff --git a/solr/biblio/conf/synonyms.txt b/solr/biblio/conf/synonyms.txt
new file mode 100644
index 0000000000000000000000000000000000000000..29b05690f1af1d6927a65275c757d1a2af3710c8
--- /dev/null
+++ b/solr/biblio/conf/synonyms.txt
@@ -0,0 +1,5 @@
+I,i,1,one,One
+II,ii,2,two,Two
+III,iii,3,three,Three
+IV,iv,4,four,Four
+V,v,5,five,Five
\ No newline at end of file
diff --git a/solr/biblio/conf/xslt/example.xsl b/solr/biblio/conf/xslt/example.xsl
new file mode 100644
index 0000000000000000000000000000000000000000..6832a1d4cb3093d2de50cdc38de09d11431d177f
--- /dev/null
+++ b/solr/biblio/conf/xslt/example.xsl
@@ -0,0 +1,132 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!-- 
+ * 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.
+ -->
+
+<!-- 
+  Simple transform of Solr query results to HTML
+ -->
+<xsl:stylesheet version='1.0'
+    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+>
+
+  <xsl:output media-type="text/html; charset=UTF-8" encoding="UTF-8"/> 
+  
+  <xsl:variable name="title" select="concat('Solr search results (',response/result/@numFound,' documents)')"/>
+  
+  <xsl:template match='/'>
+    <html>
+      <head>
+        <title><xsl:value-of select="$title"/></title>
+        <xsl:call-template name="css"/>
+      </head>
+      <body>
+        <h1><xsl:value-of select="$title"/></h1>
+        <div class="note">
+          This has been formatted by the sample "example.xsl" transform -
+          use your own XSLT to get a nicer page
+        </div>
+        <xsl:apply-templates select="response/result/doc"/>
+      </body>
+    </html>
+  </xsl:template>
+  
+  <xsl:template match="doc">
+    <xsl:variable name="pos" select="position()"/>
+    <div class="doc">
+      <table width="100%">
+        <xsl:apply-templates>
+          <xsl:with-param name="pos"><xsl:value-of select="$pos"/></xsl:with-param>
+        </xsl:apply-templates>
+      </table>
+    </div>
+  </xsl:template>
+
+  <xsl:template match="doc/*[@name='score']" priority="100">
+    <xsl:param name="pos"></xsl:param>
+    <tr>
+      <td class="name">
+        <xsl:value-of select="@name"/>
+      </td>
+      <td class="value">
+        <xsl:value-of select="."/>
+
+        <xsl:if test="boolean(//lst[@name='explain'])">
+          <xsl:element name="a">
+            <!-- can't allow whitespace here -->
+            <xsl:attribute name="href">javascript:toggle("<xsl:value-of select="concat('exp-',$pos)" />");</xsl:attribute>?</xsl:element>
+          <br/>
+          <xsl:element name="div">
+            <xsl:attribute name="class">exp</xsl:attribute>
+            <xsl:attribute name="id">
+              <xsl:value-of select="concat('exp-',$pos)" />
+            </xsl:attribute>
+            <xsl:value-of select="//lst[@name='explain']/str[position()=$pos]"/>
+          </xsl:element>
+        </xsl:if>
+      </td>
+    </tr>
+  </xsl:template>
+
+  <xsl:template match="doc/arr" priority="100">
+    <tr>
+      <td class="name">
+        <xsl:value-of select="@name"/>
+      </td>
+      <td class="value">
+        <ul>
+        <xsl:for-each select="*">
+          <li><xsl:value-of select="."/></li>
+        </xsl:for-each>
+        </ul>
+      </td>
+    </tr>
+  </xsl:template>
+
+
+  <xsl:template match="doc/*">
+    <tr>
+      <td class="name">
+        <xsl:value-of select="@name"/>
+      </td>
+      <td class="value">
+        <xsl:value-of select="."/>
+      </td>
+    </tr>
+  </xsl:template>
+
+  <xsl:template match="*"/>
+  
+  <xsl:template name="css">
+    <script>
+      function toggle(id) {
+        var obj = document.getElementById(id);
+        obj.style.display = (obj.style.display != 'block') ? 'block' : 'none';
+      }
+    </script>
+    <style type="text/css">
+      body { font-family: "Lucida Grande", sans-serif }
+      td.name { font-style: italic; font-size:80%; }
+      td { vertical-align: top; }
+      ul { margin: 0px; margin-left: 1em; padding: 0px; }
+      .note { font-size:80%; }
+      .doc { margin-top: 1em; border-top: solid grey 1px; }
+      .exp { display: none; font-family: monospace; white-space: pre; }
+    </style>
+  </xsl:template>
+
+</xsl:stylesheet>
diff --git a/solr/biblio/conf/xslt/example_atom.xsl b/solr/biblio/conf/xslt/example_atom.xsl
new file mode 100644
index 0000000000000000000000000000000000000000..e71797219e30830a287e3cd737ee9f83b35748d7
--- /dev/null
+++ b/solr/biblio/conf/xslt/example_atom.xsl
@@ -0,0 +1,63 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!-- 
+ * 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.
+ -->
+
+<!-- 
+  Simple transform of Solr query results to Atom
+ -->
+
+<xsl:stylesheet version='1.0'
+    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+
+  <xsl:output method="xml" encoding="utf-8" />
+
+  <xsl:template match='/'>
+    <xsl:variable name="query" select="response/lst[@name='responseHeader']/lst[@name='params']/str[@name='q']"/>
+    <feed xmlns="http://www.w3.org/2005/Atom">
+      <title>Example Solr Atom 1.0 Feed</title>
+      <subtitle>
+       This has been formatted by the sample "example_atom.xsl" transform -
+       use your own XSLT to get a nicer Atom feed.
+      </subtitle>
+      <author>
+        <name>Apache Solr</name>
+        <email>solr-user@lucene.apache.org</email>
+      </author>
+      <link rel="self" type="application/atom+xml" 
+            href="http://localhost:8983/solr/q={$query}&amp;wt=xslt&amp;tr=atom.xsl"/>
+      <updated>
+        <xsl:value-of select="response/result/doc[position()=1]/date[@name='timestamp']"/>
+      </updated>
+      <id>tag:localhost,2007:example</id>
+      <xsl:apply-templates select="response/result/doc"/>
+    </feed>
+  </xsl:template>
+    
+  <!-- search results xslt -->
+  <xsl:template match="doc">
+    <xsl:variable name="id" select="str[@name='id']"/>
+    <entry>
+      <title><xsl:value-of select="str[@name='name']"/></title>
+      <link href="http://localhost:8983/solr/select?q={$id}"/>
+      <id>tag:localhost,2007:<xsl:value-of select="$id"/></id>
+      <summary><xsl:value-of select="arr[@name='features']"/></summary>
+      <updated><xsl:value-of select="date[@name='timestamp']"/></updated>
+    </entry>
+  </xsl:template>
+
+</xsl:stylesheet>
diff --git a/solr/biblio/conf/xslt/example_rss.xsl b/solr/biblio/conf/xslt/example_rss.xsl
new file mode 100644
index 0000000000000000000000000000000000000000..57bb2799b5d953235ea23435b9e32ec9f4ce6645
--- /dev/null
+++ b/solr/biblio/conf/xslt/example_rss.xsl
@@ -0,0 +1,62 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!-- 
+ * 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.
+ -->
+
+<!-- 
+  Simple transform of Solr query results to RSS
+ -->
+
+<xsl:stylesheet version='1.0'
+    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+
+  <xsl:output method="xml" encoding="utf-8" />
+  <xsl:template match='/'>
+    <rss version="2.0">
+       <channel>
+	 <title>Example Solr RSS 2.0 Feed</title>
+         <link>http://localhost:8983/solr</link>
+         <description>
+          This has been formatted by the sample "example_rss.xsl" transform -
+          use your own XSLT to get a nicer RSS feed.
+         </description>
+         <language>en-us</language>
+         <docs>http://localhost:8983/solr</docs>
+         <xsl:apply-templates select="response/result/doc"/>
+       </channel>
+    </rss>
+  </xsl:template>
+  
+  <!-- search results xslt -->
+  <xsl:template match="doc">
+    <xsl:variable name="id" select="str[@name='id']"/>
+    <xsl:variable name="timestamp" select="date[@name='timestamp']"/>
+    <item>
+      <title><xsl:value-of select="str[@name='name']"/></title>
+      <link>
+        http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/>
+      </link>
+      <description>
+        <xsl:value-of select="arr[@name='features']"/>
+      </description>
+      <pubDate><xsl:value-of select="$timestamp"/></pubDate>
+      <guid>
+        http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/>
+      </guid>
+    </item>
+  </xsl:template>
+</xsl:stylesheet>
diff --git a/solr/bin/abc b/solr/bin/abc
new file mode 100644
index 0000000000000000000000000000000000000000..5d48415cdd110fb8c84413010062eef8bad8c1b2
--- /dev/null
+++ b/solr/bin/abc
@@ -0,0 +1,176 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to make an Atomic Backup after Commit of
+# a Solr Lucene collection.
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+curl_url=""
+
+unset solr_hostname solr_port data_dir webapp_name user verbose debug solr_url
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+prog=${0##*/}
+log=${solr_root}/logs/${prog}.log
+
+# define usage string
+USAGE="\
+usage: $prog [-h hostname] [-p port] [-d dir] [-w webappname] [-u username] [-U url] [-v] [-V]
+       -h          specify Solr hostname (defaults to localhost)
+       -p          specify Solr port number
+       -w          specify name of Solr webapp (defaults to solr)
+       -u          specify user to sudo to before running script
+       -U          specify full update url (overrides -h,-p,-w parameters)
+       -d          specify directory holding index data
+       -v          increase verbosity
+       -V          output debugging info
+"
+
+# parse args
+while getopts h:p:d:w:u:U:vV OPTION
+do
+    case $OPTION in
+    h)
+        solr_hostname="$OPTARG"
+        ;;
+    p)
+        solr_port="$OPTARG"
+        ;;
+    d)
+        data_dir="$OPTARG"
+        ;;
+    w)
+        webapp_name="$OPTARG"
+        ;;
+    u)
+        user="$OPTARG"
+        ;;
+    U)
+        solr_url="$OPTARG"
+        ;;
+    v)
+        verbose="v"
+        ;;
+    V)
+        debug="V"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+# use default value for data_dir if not specified
+# relative path starts at ${solr_root}
+if [[ -z ${data_dir} ]]
+then
+    data_dir=${solr_root}/data
+elif [[ "`echo ${data_dir}|cut -c1`" != "/" ]]
+then
+    data_dir=${solr_root}/${data_dir}
+fi
+
+if [[ -n ${solr_url} ]]
+then
+  curl_url=${solr_url}
+else
+  if [[ -z ${solr_port} ]]
+  then
+    echo "Solr port number missing in $confFile or command line."
+    echo "$USAGE"
+    exit 1
+  fi
+
+  # use default hostname if not specified
+  if [[ -z ${solr_hostname} ]]
+  then
+    solr_hostname=localhost
+  fi
+
+  # use default webapp name if not specified
+  if [[ -z ${webapp_name} ]]
+  then
+    webapp_name=solr
+  fi
+  curl_url=http://${solr_hostname}:${solr_port}/${webapp_name}/update
+fi
+
+fixUser "$@"
+
+start=`date +"%s"`
+
+logMessage started by $oldwhoami
+logMessage command: $0 $@
+
+logMessage sending commit to Solr server at ${curl_url}
+rs=`curl ${curl_url} -s -H 'Content-type:text/xml; charset=utf-8' -d "<commit/>"`
+if [[ $? != 0 ]]
+then
+  logMessage failed to connect to Solr server at ${curl_url}
+  logMessage commit failed
+  logExit failed 1
+fi
+
+# check status of commit request
+echo $rs | grep '<result.*status="0"' > /dev/null 2>&1
+if [[ $? != 0 ]]
+then
+  logMessage commit request to Solr at ${curl_url} failed:
+  logMessage $rs
+  logExit failed 2
+fi
+
+# successful commit creates a snapshot file synchronously
+lastsnap=`ls -drt1 ${data_dir}/snapshot.* 2> /dev/null | tail -1 `
+
+if [[ $lastsnap == "" ]]
+then
+  logMessage commit did not create snapshot at ${curl_url}, backup failed:
+  logExit failed 3
+fi
+
+name=backup.${lastsnap##*snapshot.}
+temp=temp-${name}
+
+if [[ -d ${data_dir}/${name} ]]
+then
+    logMessage backup directory ${data_dir}/${name} already exists
+    logExit aborted 1
+fi
+
+if [[ -d ${data_dir}/${temp} ]]
+then
+    logMessage backingup of ${data_dir}/${name} in progress
+    logExit aborted 1
+fi
+logMessage making backup ${data_dir}/${name}
+
+# clean up after INT/TERM
+trap 'echo cleaning up, please wait ...;/bin/rm -rf ${data_dir}/${name} ${data_dir}/${temp};logExit aborted 13' INT TERM
+
+# make a backup using hard links into temporary location
+# then move it into place atomically
+cp -lr ${lastsnap} ${data_dir}/${temp}
+mv ${data_dir}/${temp} ${data_dir}/${name}
+
+logExit ended 0
diff --git a/solr/bin/abo b/solr/bin/abo
new file mode 100644
index 0000000000000000000000000000000000000000..dc0c1678a69f1fe9a6065164e49c6a56ba6c6fc0
--- /dev/null
+++ b/solr/bin/abo
@@ -0,0 +1,176 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to make an Atomic Backup after Optimize of
+# a Solr Lucene collection.
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+curl_url=""
+
+unset solr_hostname solr_port data_dir webapp_name user verbose debug solr_url
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+prog=${0##*/}
+log=${solr_root}/logs/${prog}.log
+
+# define usage string
+USAGE="\
+usage: $prog [-h hostname] [-p port] [-d dir] [-w webapp_name] [-u username] [-U url] [-v] [-V]
+       -h          specify Solr hostname (defaults to localhost)
+       -p          specify Solr port number
+       -w          specify name of Solr webapp (defaults to solr)
+       -u          specify user to sudo to before running script
+       -U          specify full update url (overrides -h,-p,-w parameters)
+       -d          specify directory holding index data (defaults to data)
+       -v          increase verbosity
+       -V          output debugging info
+"
+
+# parse args
+while getopts h:p:d:w:u:U:vV OPTION
+do
+    case $OPTION in
+    h)
+        solr_hostname="$OPTARG"
+        ;;
+    p)
+        solr_port="$OPTARG"
+        ;;
+    d)
+        data_dir="$OPTARG"
+        ;;
+    w)
+        webapp_name="$OPTARG"
+        ;;
+    u)
+        user="$OPTARG"
+        ;;
+    U)
+        solr_url="$OPTARG"
+        ;;
+    v)
+        verbose="v"
+        ;;
+    V)
+        debug="V"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+# use default value for data_dir if not specified
+# relative path starts at ${solr_root}
+if [[ -z ${data_dir} ]]
+then
+    data_dir=${solr_root}/data
+elif [[ "`echo ${data_dir}|cut -c1`" != "/" ]]
+then
+    data_dir=${solr_root}/${data_dir}
+fi
+
+if [[ -n ${solr_url} ]]
+then
+  curl_url=${solr_url}
+else
+  if [[ -z ${solr_port} ]]
+  then
+    echo "Solr port number missing in $confFile or command line."
+    echo "$USAGE"
+    exit 1
+  fi
+
+  # use default hostname if not specified
+  if [[ -z ${solr_hostname} ]]
+  then
+    solr_hostname=localhost
+  fi
+
+  # use default webapp name if not specified
+  if [[ -z ${webapp_name} ]]
+  then
+    webapp_name=solr
+  fi
+  curl_url=http://${solr_hostname}:${solr_port}/${webapp_name}/update
+fi
+
+fixUser "$@"
+
+start=`date +"%s"`
+
+logMessage started by $oldwhoami
+logMessage command: $0 $@
+
+logMessage sending optimize to Solr server at ${curl_url}
+rs=`curl ${curl_url} -s -H 'Content-type:text/xml; charset=utf-8' -d "<optimize/>"`
+if [[ $? != 0 ]]
+then
+  logMessage failed to connect to Solr server at ${curl_url}
+  logMessage optimize failed
+  logExit failed 1
+fi
+
+# check status of optimize request
+echo $rs | grep '<result.*status="0"' > /dev/null 2>&1
+if [[ $? != 0 ]]
+then
+  logMessage optimize request to Solr at ${curl_url} failed:
+  logMessage $rs
+  logExit failed 2
+fi
+
+# successful optimize creates a snapshot file synchronously
+lastsnap=`ls -drt1 ${data_dir}/snapshot.* | tail -1 `
+
+if [[ $lastsnap == "" ]]
+then
+  logMessage commit did not create snapshot at ${curl_url}, backup failed:
+  logExit failed 3
+fi
+
+name=backup.${lastsnap##*snapshot.}
+temp=temp-${name}
+
+if [[ -d ${data_dir}/${name} ]]
+then
+    logMessage backup directory ${data_dir}/${name} already exists
+    logExit aborted 1
+fi
+
+if [[ -d ${data_dir}/${temp} ]]
+then
+    logMessage backingup of ${data_dir}/${name} in progress
+    logExit aborted 1
+fi
+logMessage making backup ${data_dir}/${name}
+
+# clean up after INT/TERM
+trap 'echo cleaning up, please wait ...;/bin/rm -rf ${data_dir}/${name} ${data_dir}/${temp};logExit aborted 13' INT TERM
+
+# make a backup using hard links into temporary location
+# then move it into place atomically
+cp -lr ${lastsnap} ${data_dir}/${temp}
+mv ${data_dir}/${temp} ${data_dir}/${name}
+
+logExit ended 0
diff --git a/solr/bin/backup b/solr/bin/backup
new file mode 100644
index 0000000000000000000000000000000000000000..1fc3b185d9ecc3510fc6520cd61b1c92b9881a29
--- /dev/null
+++ b/solr/bin/backup
@@ -0,0 +1,108 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to make a backup of a Solr Lucene collection.
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+
+unset data_dir user verbose debug
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+prog=${0##*/}
+log=${solr_root}/logs/${prog}.log
+
+# define usage string
+USAGE="\
+usage: $prog [-d dir] [-u username] [-v]
+       -d          specify directory holding index data
+       -u          specify user to sudo to before running script
+       -v          increase verbosity
+       -V          output debugging info
+"
+
+# parse args
+while getopts d:u:vV OPTION
+do
+    case $OPTION in
+    d)
+        data_dir="$OPTARG"
+        ;;
+    u)
+        user="$OPTARG"
+        ;;
+    v)
+        verbose="v"
+        ;;
+    V)
+        debug="V"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+# use default value for data_dir if not specified
+# relative path starts at ${solr_root}
+if [[ -z ${data_dir} ]]
+then
+    data_dir=${solr_root}/data
+elif [[ "`echo ${data_dir}|cut -c1`" != "/" ]]
+then
+    data_dir=${solr_root}/${data_dir}
+fi
+
+fixUser "$@"
+
+start=`date +"%s"`
+
+logMessage started by $oldwhoami
+logMessage command: $0 $@
+
+name=backup.`date +"%Y%m%d%H%M%S"`
+temp=temp-${name}
+
+if [[ -d ${data_dir}/${name} ]]
+then
+    logMessage backup directory ${data_dir}/${name} already exists
+    logExit aborted 1
+fi
+
+if [[ -d ${data_dir}/${temp} ]]
+then
+    logMessage backingup of ${data_dir}/${name} in progress
+    logExit aborted 1
+fi
+
+# clean up after INT/TERM
+trap 'echo cleaning up, please wait ...;/bin/rm -rf ${data_dir}/${name} ${data_dir}/${temp};logExit aborted 13' INT TERM
+
+logMessage making backup ${data_dir}/${name}
+
+# make a backup using hard links into temporary location
+# then move it into place atomically
+cp -lr ${data_dir}/index ${data_dir}/${temp}
+mv ${data_dir}/${temp} ${data_dir}/${name}
+
+logExit ended 0
+
diff --git a/solr/bin/backupcleaner b/solr/bin/backupcleaner
new file mode 100644
index 0000000000000000000000000000000000000000..6c2ac7ca961a28cf152efcd32b76eaaf24e7ae55
--- /dev/null
+++ b/solr/bin/backupcleaner
@@ -0,0 +1,142 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to clean up backups of a Solr Lucene collection.
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+
+unset days num data_dir user verbose debug
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+prog=${0##*/}
+log=${solr_root}/logs/${prog}.log
+
+# define usage string
+USAGE="\
+usage: $prog -D <days> | -N <num> [-d dir] [-u username] [-v]
+       -D <days>   cleanup backups more than <days> days old
+       -N <num>    keep the most recent <num> number of backups and
+                   cleanup up the remaining ones that are not being pulled
+       -d          specify directory holding index data
+       -u          specify user to sudo to before running script
+       -v          increase verbosity
+       -V          output debugging info
+"
+
+# parse args
+while getopts D:N:d:u:vV OPTION
+do
+    case $OPTION in
+    D)
+        days="$OPTARG"
+        ;;
+    N)
+        num="$OPTARG"
+        ;;
+    d)
+        data_dir="$OPTARG"
+        ;;
+    u)
+        user="$OPTARG"
+        ;;
+    v)
+        verbose="v"
+        ;;
+    V)
+        debug="V"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+if [[ -z ${days} && -z ${num} ]]
+then
+    echo "$USAGE"
+    exit 1
+fi
+
+fixUser "$@"
+
+# use default value for data_dir if not specified
+# relative path starts at ${solr_root}
+if [[ -z ${data_dir} ]]
+then
+    data_dir=${solr_root}/data
+elif [[ "`echo ${data_dir}|cut -c1`" != "/" ]]
+then
+    data_dir=${solr_root}/${data_dir}
+fi
+
+function remove
+{
+    logMessage removing backup $1
+    /bin/rm -rf $1
+}
+
+start=`date +"%s"`
+
+logMessage started by $oldwhoami
+logMessage command: $0 $@
+
+# trap control-c
+trap 'echo "caught INT/TERM, exiting now but partial cleanup may have already occured";logExit aborted 13' INT TERM
+
+if [[ -n ${days} ]]
+then
+    #is maxdepth supported?
+    find ${data_dir} -maxdepth 0 -name foobar >/dev/null 2>&1
+    if [ $? = 0 ]; then
+      maxdepth="-maxdepth 1"
+    else
+      unset maxdepth
+    fi
+  
+    logMessage cleaning up backups more than ${days} days old
+    for i in `find ${data_dir} ${maxdepth} -name 'backup.*' -mtime +${days} -print`
+    do
+        remove $i
+    done
+elif [[ -n ${num} ]]
+then
+    logMessage cleaning up all backups except for the most recent ${num} ones
+    unset backups count
+    backups=`ls -cd ${data_dir}/backup.* 2>/dev/null`
+    if [[ $? == 0 ]]
+    then
+        count=`echo $backups|wc -w`
+        startpos=`expr $num + 1`
+        if [[ $count -gt $num ]]
+        then
+            for i in `echo $backups|cut -f${startpos}- -d" "`
+            do
+	        remove $i
+	    done
+        fi
+    fi
+fi
+
+logExit ended 0
+
+
diff --git a/solr/bin/commit b/solr/bin/commit
new file mode 100644
index 0000000000000000000000000000000000000000..872e1cd260f61d315f3d74fd8eaa668328f59a72
--- /dev/null
+++ b/solr/bin/commit
@@ -0,0 +1,128 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to force a commit of all changes since last commit
+# for a Solr server
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+curl_url=""
+
+unset solr_hostname solr_port webapp_name user verbose debug solr_url
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+prog=${0##*/}
+log=${solr_root}/logs/${prog}.log
+
+# define usage string
+USAGE="\
+usage: $prog [-h hostname] [-p port] [-w webapp_name] [-u username] [-U url] [-v] [-V]
+       -h          specify Solr hostname (defaults to localhost)
+       -p          specify Solr port number
+       -w          specify name of Solr webapp (defaults to solr)
+       -u          specify user to sudo to before running script
+       -U          specify full update url (overrides -h,-p,-w parameters)
+       -v          increase verbosity
+       -V          output debugging info
+"
+
+# parse args
+while getopts h:p:w:u:U:vV OPTION
+do
+    case $OPTION in
+    h)
+        solr_hostname="$OPTARG"
+        ;;
+    p)
+        solr_port="$OPTARG"
+        ;;
+    w)
+        webapp_name="$OPTARG"
+        ;;
+    u)
+        user="$OPTARG"
+        ;;
+    U)
+        solr_url="$OPTARG"
+        ;;
+    v)
+        verbose="v"
+        ;;
+    V)
+        debug="V"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+if [[ -n ${solr_url} ]]
+then
+  curl_url=${solr_url}
+else
+  if [[ -z ${solr_port} ]]
+  then
+    echo "Solr port number missing in $confFile or command line."
+    echo "$USAGE"
+    exit 1
+  fi
+
+  # use default hostname if not specified
+  if [[ -z ${solr_hostname} ]]
+  then
+    solr_hostname=localhost
+  fi
+
+  # use default webapp name if not specified
+  if [[ -z ${webapp_name} ]]
+  then
+    webapp_name=solr
+  fi
+  curl_url=http://${solr_hostname}:${solr_port}/${webapp_name}/update
+fi
+
+fixUser "$@"
+
+start=`date +"%s"`
+
+logMessage started by $oldwhoami
+logMessage command: $0 $@
+
+rs=`curl ${curl_url} -s -H 'Content-type:text/xml; charset=utf-8' -d "<commit/>"`
+if [[ $? != 0 ]]
+then
+  logMessage failed to connect to Solr server at ${curl_url}
+  logMessage commit failed
+  logExit failed 1
+fi
+
+# check status of commit request
+echo $rs | grep '<result.*status="0"' > /dev/null 2>&1
+if [[ $? != 0 ]]
+then
+  logMessage commit request to Solr at ${curl_url} failed:
+  logMessage $rs
+  logExit failed 2
+fi
+
+logExit ended 0
diff --git a/solr/bin/optimize b/solr/bin/optimize
new file mode 100644
index 0000000000000000000000000000000000000000..446996e5d0d9bdca721a4b7dbf7458696ad07619
--- /dev/null
+++ b/solr/bin/optimize
@@ -0,0 +1,129 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to force a optimized commit of all changes since last commit
+# for a Solr server
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+curl_url=""
+
+unset solr_hostname solr_port webapp_name user verbose debug solr_url
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+prog=${0##*/}
+log=${solr_root}/logs/${prog}.log
+
+# define usage string
+USAGE="\
+usage: $prog [-h hostname] [-p port] [-u username] [-U url] [-v] [-V]
+       -h          specify Solr hostname (defaults to localhost)
+       -p          specify Solr port number
+       -w          specify name of Solr webapp (defaults to solr)
+       -u          specify user to sudo to before running script
+       -U          specify full update url (overrides -h,-p,-w parameters)
+       -v          increase verbosity
+       -V          output debugging info
+"
+
+# parse args
+originalargs="$@"
+while getopts h:p:w:u:U:vV OPTION
+do
+    case $OPTION in
+    h)
+        solr_hostname="$OPTARG"
+        ;;
+    p)
+        solr_port="$OPTARG"
+        ;;
+    w)
+        webapp_name="$OPTARG"
+        ;;
+    u)
+        user="$OPTARG"
+        ;;
+    U)
+        solr_url="$OPTARG"
+        ;;
+    v)
+        verbose="v"
+        ;;
+    V)
+        debug="V"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+if [[ -n ${solr_url} ]]
+then
+  curl_url=${solr_url}
+else
+  if [[ -z ${solr_port} ]]
+  then
+    echo "Solr port number missing in $confFile or command line."
+    echo "$USAGE"
+    exit 1
+  fi
+
+  # use default hostname if not specified
+  if [[ -z ${solr_hostname} ]]
+  then
+    solr_hostname=localhost
+  fi
+
+  # use default webapp name if not specified
+  if [[ -z ${webapp_name} ]]
+  then
+    webapp_name=solr
+  fi
+  curl_url=http://${solr_hostname}:${solr_port}/${webapp_name}/update
+fi
+
+fixUser "$@"
+
+start=`date +"%s"`
+
+logMessage started by $oldwhoami
+logMessage command: $0 $@
+
+rs=`curl ${curl_url} -s -H 'Content-type:text/xml; charset=utf-8' -d "<optimize/>"`
+if [[ $? != 0 ]]
+then
+  logMessage failed to connect to Solr server at ${curl_url}
+  logMessage optimize failed
+  logExit failed 1
+fi
+
+# check status of optimize request
+rc=`echo $rs|cut -f2 -d'"'`
+if [[ $? != 0 ]]
+then
+  logMessage optimize request to Solr at ${curl_url} failed:
+  logMessage $rs
+  logExit failed 2
+fi
+
+logExit ended 0
diff --git a/solr/bin/readercycle b/solr/bin/readercycle
new file mode 100644
index 0000000000000000000000000000000000000000..6a99d630de076a4062c361a85cc3e13a5a21f17d
--- /dev/null
+++ b/solr/bin/readercycle
@@ -0,0 +1,129 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to force all old readers closed and a new reader to be opened
+# for a Solr server
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+curl_url=""
+
+unset solr_hostname solr_port webapp_name user verbose debug solr_url
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+prog=${0##*/}
+log=${solr_root}/logs/${prog}.log
+
+# define usage string
+USAGE="\
+usage: $prog [-p hostname] [-p port] [-w webapp_name] [-u username] [-U url] [-v] [-V]
+       -h          specify Solr hostname (defaults to localhost)
+       -p          specify Solr port number
+       -w          specify name of Solr webapp (defaults to solr)
+       -u          specify user to sudo to before running script
+       -U          specify full update url (overrides -h,-p,-w parameters)
+       -v          increase verbosity
+       -V          output debugging info
+"
+
+# parse args
+originalargs="$@"
+while getopts h:p:w:u:U:vV OPTION
+do
+    case $OPTION in
+    h)
+        solr_hostname="$OPTARG"
+        ;;
+    p)
+        solr_port="$OPTARG"
+        ;;
+    w)
+        webapp_name="$OPTARG"
+        ;;
+    u)
+        user="$OPTARG"
+        ;;
+    U)
+        solr_url="$OPTARG"
+        ;;
+    v)
+        verbose="v"
+        ;;
+    V)
+        debug="V"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+if [[ -n ${solr_url} ]]
+then
+  curl_url=${solr_url}
+else
+  if [[ -z ${solr_port} ]]
+  then
+    echo "Solr port number missing in $confFile or command line."
+    echo "$USAGE"
+    exit 1
+  fi
+
+  # use default hostname if not specified
+  if [[ -z ${solr_hostname} ]]
+  then
+    solr_hostname=localhost
+  fi
+
+  # use default webapp name if not specified
+  if [[ -z ${webapp_name} ]]
+  then
+    webapp_name=solr
+  fi
+  curl_url=http://${solr_hostname}:${solr_port}/${webapp_name}/update
+fi
+
+fixUser "$@"
+
+start=`date +"%s"`
+
+logMessage started by $oldwhoami
+logMessage command: $0 $@
+
+rs=`curl ${curl_url} -s -H 'Content-type:text/xml; charset=utf-8' -d "<commit/>"`
+if [[ $? != 0 ]]
+then
+  logMessage failed to connect to Solr server at ${curl_url}
+  logMessage reader cycle failed
+  logExit failed 1
+fi
+
+# check status of commit request
+echo $rs | grep '<response.*status="0"' > /dev/null 2>&1
+if [[ $? != 0 ]]
+then
+  logMessage reader cycle request to Solr at ${curl_url} failed:
+  logMessage $rs
+  logExit failed 2
+fi
+
+logExit ended 0
diff --git a/solr/bin/rsyncd-disable b/solr/bin/rsyncd-disable
new file mode 100644
index 0000000000000000000000000000000000000000..4affdac8552f53222a32ffa99720cb176736702d
--- /dev/null
+++ b/solr/bin/rsyncd-disable
@@ -0,0 +1,77 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to disable rsyncd
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+
+unset user verbose debug
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+prog=${0##*/}
+log=${solr_root}/logs/rsyncd.log
+
+# define usage string
+USAGE="\
+usage: $prog [-u username] [-v]
+       -u          specify user to sudo to before running script
+       -v          increase verbosity
+       -V          output debugging info
+"
+
+# parse args
+while getopts u:vV OPTION
+do
+    case $OPTION in
+    u)
+        user="$OPTARG"
+        ;;
+    v)
+        verbose="v"
+        ;;
+    V)
+        debug="V"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+fixUser "$@"
+
+start=`date +"%s"`
+
+logMessage disabled by $oldwhoami
+logMessage command: $0 $@
+name=${solr_root}/logs/rsyncd-enabled
+
+if [[ -f ${name} ]]
+then
+    rm -f ${name}
+else
+    logMessage rsyncd not currently enabled
+    logExit exited 1
+fi
+
+logExit ended 0
diff --git a/solr/bin/rsyncd-enable b/solr/bin/rsyncd-enable
new file mode 100644
index 0000000000000000000000000000000000000000..da2a97a59aa4141430fc8cc910b92b9f79465bc8
--- /dev/null
+++ b/solr/bin/rsyncd-enable
@@ -0,0 +1,76 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to enable rsyncd
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+
+unset user verbose debug
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+log=${solr_root}/logs/rsyncd.log
+
+# define usage string
+USAGE="\
+usage: $prog [-u username] [-v]
+       -u          specify user to sudo to before running script
+       -v          increase verbosity
+       -V          output debugging info
+"
+
+# parse args
+while getopts u:vV OPTION
+do
+    case $OPTION in
+    u)
+        user="$OPTARG"
+        ;;
+    v)
+        verbose="v"
+        ;;
+    V)
+        debug="V"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+fixUser "$@"
+
+start=`date +"%s"`
+
+logMessage enabled by $oldwhoami
+logMessage command: $0 $@
+name=${solr_root}/logs/rsyncd-enabled
+
+if [[ -f ${name} ]]
+then
+    logMessage rsyncd already currently enabled
+    logExit exited 1
+else
+    touch ${name}
+fi
+
+logExit ended 0
diff --git a/solr/bin/rsyncd-start b/solr/bin/rsyncd-start
new file mode 100644
index 0000000000000000000000000000000000000000..6bfc130c2ab82bb6b098823c5928046d0f209dad
--- /dev/null
+++ b/solr/bin/rsyncd-start
@@ -0,0 +1,145 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to start rsyncd on master Solr server
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+
+unset data_dir solr_port rsyncd_port user verbose debug
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+prog=${0##*/}
+log=${solr_root}/logs/rsyncd.log
+
+# define usage string
+USAGE="\
+usage: $prog [-d dir] [-p portnum] [-u username] [-v]
+       -d          specify directory holding index data
+       -p          specify rsyncd port number
+       -u          specify user to sudo to before running script
+       -v          increase verbosity
+       -V          output debugging info
+"
+
+# parse args
+while getopts d:p:u:vV OPTION
+do
+    case $OPTION in
+    d)
+        data_dir="$OPTARG"
+        ;;
+    p)
+        rsyncd_port="$OPTARG"
+        ;;
+    u)
+        user="$OPTARG"
+        ;;
+    v)
+        verbose="v"
+        ;;
+    V)
+        debug="V"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+fixUser "$@"
+
+# try to determine rsyncd port number from $confFile if not specified on
+# command line, default to solr_port+10000
+if [[ -z ${rsyncd_port} ]]
+then
+    if [[ "${solr_port}" ]]
+    then
+        rsyncd_port=`expr 10000 + ${solr_port}`
+    else
+        echo "rsyncd port number missing in $confFile or command line."
+        echo "$USAGE"
+        exit 1
+    fi
+fi
+
+# use default value for data_dir if not specified
+# relative path starts at ${solr_root}
+if [[ -z ${data_dir} ]]
+then
+    data_dir=${solr_root}/data
+elif [[ "`echo ${data_dir}|cut -c1`" != "/" ]]
+then
+    data_dir=${solr_root}/${data_dir}
+fi
+
+logMessage started by $oldwhoami
+logMessage command: $0 $@
+
+if [[ ! -f ${solr_root}/logs/rsyncd-enabled ]]
+then
+    logMessage rsyncd disabled
+    exit 1
+fi
+
+if \
+    rsync rsync://localhost:${rsyncd_port} >/dev/null 2>&1
+then
+    logMessage "rsyncd already running at port ${rsyncd_port}"
+    exit 1
+fi
+
+# create conf/rsyncd.conf on the fly, creating solrlogs directory if needed
+if [[ ! -d ${solr_root}/conf ]]
+then
+    mkdir ${solr_root}/conf
+fi
+cat <<EOF > ${solr_root}/conf/rsyncd.conf
+#### rsyncd.conf file ####
+ 
+uid = $(whoami)
+gid = $(whoami)
+use chroot = no
+list = no
+pid file = ${solr_root}/logs/rsyncd.pid
+log file = ${solr_root}/logs/rsyncd.log
+[solr]
+    path = ${data_dir}
+    comment = Solr
+EOF
+
+rsync --daemon --port=${rsyncd_port} --config=${solr_root}/conf/rsyncd.conf
+
+# first make sure rsyncd is accepting connections
+i=1
+while \
+ ! rsync rsync://localhost:${rsyncd_port} >/dev/null 2>&1
+do
+    if (( i++ > 15 ))
+    then
+        logMessage "rsyncd not accepting connections, exiting" >&2
+        exit 2
+    fi
+    sleep 1
+done
+
+logMessage rsyncd started with data_dir=${data_dir} and accepting requests
diff --git a/solr/bin/rsyncd-stop b/solr/bin/rsyncd-stop
new file mode 100644
index 0000000000000000000000000000000000000000..d19b054cffa3826690e452d6ceb9e39a0acbc0b2
--- /dev/null
+++ b/solr/bin/rsyncd-stop
@@ -0,0 +1,105 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to stop rsyncd on master Solr server
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+
+unset user verbose debug
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+prog=${0##*/}
+log=${solr_root}/logs/rsyncd.log
+
+# define usage string
+USAGE="\
+usage: $prog [-u username] [-v]
+       -u          specify user to sudo to before running script
+       -v          increase verbosity
+       -V          output debugging info
+"
+
+# parse args
+while getopts u:vV OPTION
+do
+    case $OPTION in
+    u)
+        user="$OPTARG"
+        ;;
+    v)
+        verbose="v"
+        ;;
+    V)
+        debug="V"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+fixUser "$@"
+
+logMessage stopped by $oldwhoami
+logMessage command: $0 $@
+
+# look for pid file
+if [[ ! -f ${solr_root}/logs/rsyncd.pid ]]
+then
+    logMessage "missing rsyncd pid file ${solr_root}/logs/rsyncd.pid"
+    exit 2
+fi
+
+# get PID from file
+pid=$(<${solr_root}/logs/rsyncd.pid)
+if [[ -z $pid ]]
+then
+    logMessage "unable to get rsyncd's PID"
+    exit 2
+fi
+
+kill $pid
+
+# wait until rsyncd dies or we time out
+dead=0
+timer=0
+timeout=300
+while (( ! dead && timer < timeout ))
+do
+    if ps -eo pid | grep -qw $pid
+    then
+	kill $pid
+        (( timer++ ))
+        sleep 1
+    else
+        dead=1
+    fi
+done
+if ps -eo pid | grep -qw $pid
+then
+    logMessage rsyncd failed to stop after $timeout seconds
+    exit 3
+fi
+
+# remove rsyncd.conf
+/bin/rm -f ${solr_root}/conf/rsyncd.conf
diff --git a/solr/bin/scripts-util b/solr/bin/scripts-util
new file mode 100644
index 0000000000000000000000000000000000000000..953bcc81efb611ae7e6e45e84b4df9c9f144d36c
--- /dev/null
+++ b/solr/bin/scripts-util
@@ -0,0 +1,83 @@
+#!/bin/bash
+#
+# 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.
+#
+# util functions used by scripts
+
+export PATH=/sbin:/usr/sbin:/bin:/usr/bin:$PATH
+
+# set up variables
+prog=${0##*/}
+
+# source the config file if present
+confFile=${solr_root}/conf/scripts.conf
+if [[ -f $confFile ]]
+then
+    . $confFile
+fi
+
+function fixUser
+{
+# set user to $(whoami) if not specified
+    if [[ -z ${user} ]]
+    then
+        user=$(whoami)
+    fi
+
+# sudo
+    if [[ $(whoami) != ${user} ]]
+    then
+        sudo -u ${user} $0 "$@"
+        exit $?
+    fi
+
+    oldwhoami=$(who -m | cut -d' ' -f1 | sed -e's/^.*!//')
+
+    if [[ "${oldwhoami}" == "" ]]
+    then
+        oldwhoami=`ps h -Hfp $(pgrep -g0 ${0##*/}) | tail -1|cut -f1 -d" "`
+    fi
+}
+
+function timeStamp
+{
+    date +'%Y/%m/%d %H:%M:%S'
+}
+
+function logMessage
+{
+    echo $(timeStamp) $@>>$log
+    if [[ -n ${verbose} ]]
+    then
+	echo $@
+    fi
+}
+
+function logExit
+{
+    end=`date +"%s"`
+    diff=`expr $end - $start`
+    echo "$(timeStamp) $1 (elapsed time: $diff sec)">>$log
+    exit $2
+}
+
+# create logs directory if not there
+if [[ ! -d ${solr_root}/logs ]]
+then
+    mkdir ${solr_root}/logs
+fi
+
+umask 002
diff --git a/solr/bin/snapcleaner b/solr/bin/snapcleaner
new file mode 100644
index 0000000000000000000000000000000000000000..5301de3a77229f0dad83f53203409d36b8e3de21
--- /dev/null
+++ b/solr/bin/snapcleaner
@@ -0,0 +1,148 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to clean up snapshots of a Solr Lucene collection.
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+
+unset days num data_dir user verbose debug
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+prog=${0##*/}
+log=${solr_root}/logs/${prog}.log
+
+# define usage string
+USAGE="\
+usage: $prog -D <days> | -N <num> [-d dir] [-u username] [-v]
+       -D <days>   cleanup snapshots more than <days> days old
+       -N <num>    keep the most recent <num> number of snapshots and
+                   cleanup up the remaining ones that are not being pulled
+       -d          specify directory holding index data
+       -u          specify user to sudo to before running script
+       -v          increase verbosity
+       -V          output debugging info
+"
+
+# parse args
+while getopts D:N:d:u:vV OPTION
+do
+    case $OPTION in
+    D)
+        days="$OPTARG"
+        ;;
+    N)
+        num="$OPTARG"
+        ;;
+    d)
+        data_dir="$OPTARG"
+        ;;
+    u)
+        user="$OPTARG"
+        ;;
+    v)
+        verbose="v"
+        ;;
+    V)
+        debug="V"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+if [[ -z ${days} && -z ${num} ]]
+then
+    echo "$USAGE"
+    exit 1
+fi
+
+fixUser "$@"
+
+# use default value for data_dir if not specified
+# relative path starts at ${solr_root}
+if [[ -z ${data_dir} ]]
+then
+    data_dir=${solr_root}/data
+elif [[ "`echo ${data_dir}|cut -c1`" != "/" ]]
+then
+    data_dir=${solr_root}/${data_dir}
+fi
+
+function remove
+{
+    syncing=`ps -fwwwu ${user}|grep -w rsync|grep -v grep|grep -w $1`
+    if [[ -n $syncing ]]
+    then
+	logMessage $1 not removed - rsync in progress
+    else
+	logMessage removing snapshot $1
+	/bin/rm -rf $1
+    fi
+}
+
+start=`date +"%s"`
+
+logMessage started by $oldwhoami
+logMessage command: $0 $@
+
+# trap control-c
+trap 'echo "caught INT/TERM, exiting now but partial cleanup may have already occured";logExit aborted 13' INT TERM
+
+if [[ -n ${days} ]]
+then
+    #is maxdepth supported?
+    find ${data_dir} -maxdepth 0 -name foobar >/dev/null 2>&1
+    if [ $? = 0 ]; then
+      maxdepth="-maxdepth 1"
+    else
+      unset maxdepth
+    fi
+
+    logMessage cleaning up snapshots more than ${days} days old
+    for i in `find ${data_dir} ${maxdepth} -name 'snapshot.*' -mtime +${days} -print`
+    do
+        remove $i
+    done
+elif [[ -n ${num} ]]
+then
+    logMessage cleaning up all snapshots except for the most recent ${num} ones
+    unset snapshots count
+    snapshots=`ls -cd ${data_dir}/snapshot.* 2>/dev/null`
+    if [[ $? == 0 ]]
+    then
+        count=`echo $snapshots|wc -w`
+        startpos=`expr $num + 1`
+        if [[ $count -gt $num ]]
+        then
+            for i in `echo $snapshots|cut -f${startpos}- -d" "`
+            do
+	        remove $i
+	    done
+        fi
+    fi
+fi
+
+logExit ended 0
+
+
diff --git a/solr/bin/snapinstaller b/solr/bin/snapinstaller
new file mode 100644
index 0000000000000000000000000000000000000000..f716e1a0b077578fbaf0939e6f9d44407857a5e5
--- /dev/null
+++ b/solr/bin/snapinstaller
@@ -0,0 +1,168 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to install a snapshot into place as the Lucene collection
+# for a Solr server
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+
+unset master_host master_status_dir data_dir user verbose debug
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+prog=${0##*/}
+log=${solr_root}/logs/${prog}.log
+
+# define usage string
+USAGE="\
+usage: $prog [-M master] [-S sdir] [-d dir] [-u username] [-v]
+       -M master   specify hostname of master server from where to pull index
+                   snapshot
+       -S          specify directory holding snapshot status on master server
+       -d          specify directory holding index data on local machine
+       -u          specify user to sudo to before running script
+       -v          increase verbosity
+       -V          output debugging info
+"
+
+# parse args
+while getopts M:S:d:u:vV OPTION
+do
+    case $OPTION in
+    M)
+        master_host="$OPTARG"
+        ;;
+    S)
+        master_status_dir="$OPTARG"
+        ;;
+    d)
+        data_dir="$OPTARG"
+        ;;
+    u)
+        user="$OPTARG"
+        ;;
+    v)
+        verbose="v"
+        ;;
+    V)
+        debug="V"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+if [[ -z ${master_host} ]]
+then
+    echo "name of master server missing in $confFile or command line."
+    echo "$USAGE"
+    exit 1
+fi
+
+if [[ -z ${master_status_dir} ]]
+then
+    echo "directory holding snapshot status on master server missing in $confFile or command line."
+    echo "$USAGE"
+    exit 1
+fi
+
+fixUser "$@"
+
+# use default value for data_dir if not specified
+# relative path starts at ${solr_root}
+if [[ -z ${data_dir} ]]
+then
+    data_dir=${solr_root}/data
+elif [[ "`echo ${data_dir}|cut -c1`" != "/" ]]
+then
+    data_dir=${solr_root}/${data_dir}
+fi
+
+# assume relative path to start at ${solr_root}
+if [[ "`echo ${master_status_dir}|cut -c1`" != "/" ]]
+then
+    master_status_dir=${solr_root}/${master_status_dir}
+fi
+
+start=`date +"%s"`
+
+logMessage started by $oldwhoami
+logMessage command: $0 $@
+
+# get directory name of latest snapshot
+name=`ls ${data_dir}|grep 'snapshot\.'|grep -v wip|sort -r|head -1`
+
+# clean up after INT/TERM
+trap 'echo "caught INT/TERM, exiting now but partial installation may have already occured";/bin/rm -rf ${data_dir"/index.tmp$$;logExit aborted 13' INT TERM
+
+# is there a snapshot
+if [[ "${name}" == "" ]]
+then
+    logMessage no shapshot available
+    logExit ended 0
+fi
+
+name=${data_dir}/${name}
+
+# has snapshot already been installed
+if [[ ${name} == `cat ${solr_root}/logs/snapshot.current 2>/dev/null` ]]
+then
+    logMessage latest snapshot ${name} already installed
+    logExit ended 0
+fi
+
+# make sure master has directory for hold slaves stats/state
+if
+    ! ssh -o StrictHostKeyChecking=no ${master_host} mkdir -p ${master_status_dir}
+then
+    logMessage failed to ssh to master ${master_host}, snapshot status not updated on master
+fi
+
+# install using hard links into temporary directory
+# remove original index and then atomically copy new one into place
+logMessage installing snapshot ${name}
+cp -lr ${name}/ ${data_dir}/index.tmp$$
+/bin/rm -rf ${data_dir}/index
+mv -f ${data_dir}/index.tmp$$ ${data_dir}/index
+
+# update distribution stats
+echo ${name} > ${solr_root}/logs/snapshot.current
+
+# push stats/state to master
+if
+    ! scp -q -o StrictHostKeyChecking=no ${solr_root}/logs/snapshot.current ${master_host}:${master_status_dir}/snapshot.current.`uname -n`
+then
+    logMessage failed to ssh to master ${master_host}, snapshot status not updated on master
+fi
+
+# notify Solr to open a new Searcher
+logMessage notifing Solr to open a new Searcher
+${solr_root}/bin/commit
+if [[ $? != 0 ]]
+then
+  logMessage failed to connect to Solr server
+  logMessage snapshot installed but Solr server has not open a new Searcher
+  logExit failed 1
+fi
+
+logExit ended 0
diff --git a/solr/bin/snappuller b/solr/bin/snappuller
new file mode 100644
index 0000000000000000000000000000000000000000..7bab54dc60b9e9c0370f3e0f5a411fe4acfd81a4
--- /dev/null
+++ b/solr/bin/snappuller
@@ -0,0 +1,248 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to copy snapshots of a Solr Lucene collection from the master
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+
+unset master_host rsyncd_port master_data_dir master_status_dir snap_name
+unset sizeonly stats data_dir user verbose debug compress startStatus
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+prog=${0##*/}
+log=${solr_root}/logs/${prog}.log
+
+# define usage string
+USAGE="\
+usage: $prog [-M master] [-P portnum] [-D mdir] [-S sdir] [-n snapshot] [-d dir] [-u username] [-svz]
+       -M master   specify hostname of master server from where to pull index
+                   snapshot
+       -P port     specify rsyncd port number of master server from where to
+                   pull index snapshot
+       -D          specify directory holding index data on master server
+       -S          specify directory holding snapshot status on master server
+       -n snapshot pull a specific snapshot by name
+       -d          specify directory holding index data on local machine
+       -u          specify user to sudo to before running script
+       -s          use the --size-only option with rsync
+       -v          increase verbosity (-vv show file transfer stats also)
+       -V          output debugging info
+       -z          enable compression of data
+"
+
+# parse args
+while getopts M:P:D:S:n:d:u:svVz OPTION
+do
+    case $OPTION in
+    M)
+        master_host="$OPTARG"
+        ;;
+    P)
+        rsyncd_port="$OPTARG"
+        ;;
+    D)
+        master_data_dir="$OPTARG"
+        ;;
+    S)
+        master_status_dir="$OPTARG"
+        ;;
+    n)
+        snap_name="$OPTARG"
+        ;;
+    d)
+        data_dir="$OPTARG"
+        ;;
+    u)
+        user="$OPTARG"
+        ;;
+    s)
+        sizeonly="--size-only"
+        ;;
+    v)
+        [[ -n $verbose ]] && stats="--stats" || verbose=v
+        ;;
+    V)
+        debug="V"
+        ;;
+    z)
+        compress="z"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+if [[ -z ${master_host} ]]
+then
+    echo "name of master server missing in $confFile or command line."
+    echo "$USAGE"
+    exit 1
+fi
+
+# try to determine rsyncd port number from $confFile if not specified on
+# command line, default to solr_port+10000
+if [[ -z ${rsyncd_port} ]]
+then
+    if [[ "${solr_port}" ]]
+    then
+        rsyncd_port=`expr 10000 + ${solr_port}`
+    else
+        echo "rsyncd port number of master server missing in $confFile or command line."
+        echo "$USAGE"
+        exit 1
+    fi
+fi
+
+if [[ -z ${master_data_dir} ]]
+then
+    echo "directory holding index data on master server missing in $confFile or command line."
+    echo "$USAGE"
+    exit 1
+fi
+
+if [[ -z ${master_status_dir} ]]
+then
+    echo "directory holding snapshot status on master server missing in $confFile or command line."
+    echo "$USAGE"
+    exit 1
+fi
+
+fixUser "$@"
+
+# use default value for data_dir if not specified
+# relative path starts at ${solr_root}
+if [[ -z ${data_dir} ]]
+then
+    data_dir=${solr_root}/data
+elif [[ "`echo ${data_dir}|cut -c1`" != "/" ]]
+then
+    data_dir=${solr_root}/${data_dir}
+fi
+
+# assume relative path to start at ${solr_root}
+if [[ "`echo ${master_data_dir}|cut -c1`" != "/" ]]
+then
+    master_data_dir=${solr_root}/${master_data_dir}
+fi
+if [[ "`echo ${master_status_dir}|cut -c1`" != "/" ]]
+then
+    master_status_dir=${solr_root}/${master_status_dir}
+fi
+
+# push stats/state to master if necessary
+function pushStatus
+{
+    scp -q -o StrictHostKeyChecking=no ${solr_root}/logs/snappuller.status ${master_host}:${master_status_dir}/snapshot.status.`uname -n`
+}
+
+start=`date +"%s"`
+
+logMessage started by $oldwhoami
+logMessage command: $0 $@
+
+if [[ ! -f ${solr_root}/logs/snappuller-enabled ]]
+then
+    logMessage snappuller disabled
+    exit 1
+fi
+
+# make sure we can ssh to master
+if
+    ! ssh -o StrictHostKeyChecking=no ${master_host} id 1>/dev/null 2>&1
+then
+    logMessage failed to ssh to master ${master_host}
+    exit 1
+fi
+
+# get directory name of latest snapshot if not specified on command line
+if [[ -z ${snap_name} ]]
+then
+    snap_name=`ssh -o StrictHostKeyChecking=no ${master_host} "ls ${master_data_dir}|grep 'snapshot\.'|grep -v wip|sort -r|head -1"`
+fi
+if [[ "${snap_name}" == "" ]]
+then
+    logMessage no snapshot available on ${master_host} in ${master_data_dir}
+    logExit ended 0
+else
+    name=`basename ${snap_name}`
+fi
+
+# clean up after INT/TERM
+trap 'echo cleaning up, please wait ...;/bin/rm -rf ${data_dir}/${name} ${data_dir}/${name}-wip;echo ${startStatus} aborted:$(timeStamp)>${solr_root}/logs/snappuller.status;pushStatus;logExit aborted 13' INT TERM
+
+if [[ -d ${data_dir}/${name} || -d ${data_dir}/${name}-wip ]]
+then
+    logMessage no new snapshot available on ${master_host} in ${master_data_dir}
+    logExit ended 0
+fi
+
+# take a snapshot of current index so that only modified files will be rsync-ed
+# put the snapshot in the 'work-in-progress" directory to prevent it from
+# being installed while the copying is still in progress
+cp -lr ${data_dir}/index ${data_dir}/${name}-wip
+# force rsync of segments and .del files since we are doing size-only
+if [[ -n ${sizeonly} ]]
+then
+    rm -f ${data_dir}/${name}-wip/segments
+    rm -f ${data_dir}/${name}-wip/*.del
+fi
+
+logMessage pulling snapshot ${name}
+
+# make sure master has directory for hold slaves stats/state
+ssh -o StrictHostKeyChecking=no ${master_host} mkdir -p ${master_status_dir}
+
+# start new distribution stats
+rsyncStart=`date`
+startTimestamp=`date -d "$rsyncStart" +'%Y%m%d-%H%M%S'`
+rsyncStartSec=`date -d "$rsyncStart" +'%s'`
+startStatus="rsync of `basename ${name}` started:$startTimestamp"
+echo ${startStatus} > ${solr_root}/logs/snappuller.status
+pushStatus
+
+# rsync over files that have changed
+rsync -Wa${verbose}${compress} --delete ${sizeonly} \
+${stats} rsync://${master_host}:${rsyncd_port}/solr/${name}/ ${data_dir}/${name}-wip
+
+rc=$?
+rsyncEnd=`date`
+endTimestamp=`date -d "$rsyncEnd" +'%Y%m%d-%H%M%S'`
+rsyncEndSec=`date -d "$rsyncEnd" +'%s'`
+elapsed=`expr $rsyncEndSec - $rsyncStartSec`
+if [[ $rc != 0 ]]
+then
+  logMessage rsync failed
+  /bin/rm -rf ${data_dir}/${name}-wip
+  echo ${startStatus} failed:$endTimestamp > ${solr_root}/logs/snappuller.status
+  pushStatus
+  logExit failed 1
+fi
+
+# move into place atomically
+mv ${data_dir}/${name}-wip ${data_dir}/${name}
+
+# finish new distribution stats`
+echo ${startStatus} ended:$endTimestamp rsync-elapsed:${elapsed} > ${solr_root}/logs/snappuller.status
+pushStatus
+logExit ended 0
diff --git a/solr/bin/snappuller-disable b/solr/bin/snappuller-disable
new file mode 100644
index 0000000000000000000000000000000000000000..9bf3f836eca19382d93c789b86956b955dcec495
--- /dev/null
+++ b/solr/bin/snappuller-disable
@@ -0,0 +1,77 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to disable snappuller
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+
+unset user verbose debug
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+prog=${0##*/}
+log=${solr_root}/logs/snappuller.log
+
+# define usage string
+USAGE="\
+usage: $prog [-u username] [-v]
+       -u          specify user to sudo to before running script
+       -v          increase verbosity
+       -V          output debugging info
+"
+
+# parse args
+while getopts u:vV OPTION
+do
+    case $OPTION in
+    u)
+        user="$OPTARG"
+        ;;
+    v)
+        verbose="v"
+        ;;
+    V)
+        debug="V"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+fixUser "$@"
+
+start=`date +"%s"`
+
+logMessage disabled by $oldwhoami
+logMessage command: $0 $@
+name=${solr_root}/logs/snappuller-enabled
+
+if [[ -f ${name} ]]
+then
+    rm -f ${name}
+else
+    logMessage snappuller not currently enabled
+    logExit exited 1
+fi
+
+logExit ended 0
diff --git a/solr/bin/snappuller-enable b/solr/bin/snappuller-enable
new file mode 100644
index 0000000000000000000000000000000000000000..b379ba13a5fde97f1a8f327543dc634a27ef9161
--- /dev/null
+++ b/solr/bin/snappuller-enable
@@ -0,0 +1,77 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to enable snappuller
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+
+unset user verbose debug
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+prog=${0##*/}
+log=${solr_root}/logs/snappuller.log
+
+# define usage string
+USAGE="\
+usage: $prog [-u username] [-v]
+       -u          specify user to sudo to before running script
+       -v          increase verbosity
+       -V          output debugging info
+"
+
+# parse args
+while getopts u:vV OPTION
+do
+    case $OPTION in
+    u)
+        user="$OPTARG"
+        ;;
+    v)
+        verbose="v"
+        ;;
+    V)
+        debug="V"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+fixUser "$@"
+
+start=`date +"%s"`
+
+logMessage enabled by $oldwhoami
+logMessage command: $0 $@
+name=${solr_root}/logs/snappuller-enabled
+
+if [[ -f ${name} ]]
+then
+    logMessage snappuller already currently enabled
+    logExit exited 1
+else
+    touch ${name}
+fi
+
+logExit ended 0
diff --git a/solr/bin/snapshooter b/solr/bin/snapshooter
new file mode 100644
index 0000000000000000000000000000000000000000..f172f7c2b0fc23244bd4f29365d585013646084e
--- /dev/null
+++ b/solr/bin/snapshooter
@@ -0,0 +1,109 @@
+#!/bin/bash
+#
+# 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.
+#
+# Shell script to take a snapshot of a Solr Lucene collection.
+
+orig_dir=$(pwd)
+cd ${0%/*}/..
+solr_root=$(pwd)
+cd ${orig_dir}
+
+unset data_dir user verbose debug
+. ${solr_root}/bin/scripts-util
+
+# set up variables
+prog=${0##*/}
+log=${solr_root}/logs/${prog}.log
+
+# define usage string
+USAGE="\
+usage: $prog [-d dir] [-u username] [-v]
+       -d          specify directory holding index data
+       -u          specify user to sudo to before running script
+       -v          increase verbosity
+       -V          output debugging info
+"
+
+# parse args
+while getopts d:u:vV OPTION
+do
+    case $OPTION in
+    d)
+        data_dir="$OPTARG"
+        ;;
+    u)
+        user="$OPTARG"
+        ;;
+    v)
+        verbose="v"
+        ;;
+    V)
+        debug="V"
+        ;;
+    *)
+        echo "$USAGE"
+        exit 1
+    esac
+done
+
+[[ -n $debug ]] && set -x
+
+fixUser "$@"
+
+# use default value for data_dir if not specified
+# relative path starts at ${solr_root}
+if [[ -z ${data_dir} ]]
+then
+    data_dir=${solr_root}/data
+elif [[ "`echo ${data_dir}|cut -c1`" != "/" ]]
+then
+    data_dir=${solr_root}/${data_dir}
+fi
+
+start=`date +"%s"`
+
+logMessage started by $oldwhoami
+logMessage command: $0 $@
+
+snap_name=snapshot.`date +"%Y%m%d%H%M%S"`
+name=${data_dir}/${snap_name}
+temp=${data_dir}/temp-${snap_name}
+
+if [[ -d ${name} ]]
+then
+    logMessage snapshot directory ${name} already exists
+    logExit aborted 1
+fi
+
+if [[ -d ${temp} ]]
+then
+    logMessage snapshoting of ${name} in progress
+    logExit aborted 1
+fi
+
+# clean up after INT/TERM
+trap 'echo cleaning up, please wait ...;/bin/rm -rf ${name} ${temp};logExit aborted 13' INT TERM
+
+logMessage taking snapshot ${name}
+
+# take a snapshot using hard links into temporary location
+# then move it into place atomically
+cp -lr ${data_dir}/index ${temp}
+mv ${temp} ${name}
+
+logExit ended 0
+
diff --git a/solr/jetty/README.txt b/solr/jetty/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ea049ef9acade924b1b1c92279e771a3e20edc0e
--- /dev/null
+++ b/solr/jetty/README.txt
@@ -0,0 +1,141 @@
+
+This is the Jetty 6 HTTP server and servlet container.
+
+For more information about Jetty, please see the Jetty wiki: 
+
+   http://docs.codehaus.org/display/JETTY/
+
+DIRECTORY LAYOUT
+================
+bin                   utility scripts and executables
+contexts              Deployment directory for context descriptors
+contrib               Source modules for optional jetty packages in the jetty-contrib repository, which has a larger more open group of committers
+etc                   Configuration files
+examples              Example projects
+extras                Source modules for optional jetty packages in the main jetty repository.
+javadoc               Generated javadoc
+lib                   Generated libraries
+LICENSES              License
+logs                  Request log and server log files
+modules               Source modules for core jetty packages
+patches               Optional patches for source modules
+pom.xml               Build configuration for maven
+project-website       Project Website
+README.txt            This file
+resources             Directory for resources to include on classpath
+start.jar             Start jar for jetty
+VERSION.txt           Version history
+webapps               Deployment directory for standard webapps
+
+
+RUNNING JETTY
+=============
+From the release, you can run the server with:
+
+   java -jar start.jar
+
+and then point your browser at 
+
+   http://localhost:8080
+
+and click to the test webapp, where there are some demos and more
+information.
+
+The start command above is equivalent to 
+
+   java -jar start.jar etc/jetty.xml
+
+which gives a configuration file on the commandline. An explicit
+configuration file (or multiple configuration files) may be
+given to select specific configurations.
+
+There is also a unix start script in bin/jetty.sh that can be used
+in /etc/init.d
+
+JETTY DEPENDENCIES
+==================
+
+The Jetty build is rather large, because it bundles many optional
+packages.
+
+Jetty depends ONLY on a jre 1.4 runtime and the three jars found in
+the top level of the $JETTY_HOME/lib directory:
+
+  servlet-api-2.5-$VERSION.jar
+  jetty-$VERSION.jar
+  jetty-util-$VERSION.jar
+ 
+For small foot print applications, these three jars can be 
+trimmed of excess classes - we will soon automate generation
+of such minimal assemblies.
+
+The jars found in the subdirectories are all optional:
+
+  jsp-2.0/*.jar   (depends on java 2 (jre 1.4))
+  jsp-2.1/*.jar   (depends on java 5 (jre 1.5))
+  management/*.jar
+  naming/*.jar
+  plus/*.jar
+  xbean/*.jar
+
+The start.jar includes all these options if they are
+left in the lib subdirectories.
+
+The start.jar will also select the version of JSP to
+use based on the version of the jre available.
+
+
+RUNNING WITH JMX
+================
+
+The server can be run with JMX management with the command:
+
+   java -jar start.jar etc/jetty-jmx.xml etc/jetty.xml
+   
+This command adds the jmx configuration file before the server
+configuration.
+
+RUNNING WITH JETTY PLUS
+=======================
+
+The server can be run as JettyPlus (JNDI, JAAS etc.) with the 
+command:
+
+   java -jar start.jar etc/jetty.xml etc/jetty-plus.xml
+   
+This command adds the plus configuration file after the server configuration file,
+although you will first need to follow the instructions inside the etc/jetty-plus.xml
+file.
+
+RUNNING WITH OTHER CONTAINERS
+=============================
+If you wish to use Continuations in other containers, the jetty-util.jar
+can be included in WEB-INF/lib and will provide waiting continuations
+
+
+BUILDING JETTY
+==============
+
+Jetty uses maven 2 as its build system.  Maven will fetch
+the dependancies, build the server and assemble a runnable
+version:
+
+  mvn install
+
+Jetty itself only needs java 1.4, however to build JSP 2.1 
+support you need to use java5 AND you will need to have
+cvs installed.    If you want to use java1.4,
+then you can use the jsp-2.0 modules instead of the 
+jsp-api-2.1 and  jsp-2.1 modules.
+
+
+DEPENDENCIES 
+============
+The only real dependancy is the servlet api, so only 
+the jars in the top level of the lib directory are needed
+to run Jetty (and they can be trimmed from many applications).
+
+The jars in the subdirectories of lib are all optional, but
+are included on the classpath by the standard start.jar 
+mechanism
+
diff --git a/solr/jetty/VERSION.txt b/solr/jetty/VERSION.txt
new file mode 100644
index 0000000000000000000000000000000000000000..82ce9925bd84fbe8f6c5500b08d914d62f11b00c
--- /dev/null
+++ b/solr/jetty/VERSION.txt
@@ -0,0 +1,3459 @@
+jetty-6.1.11 20 May 2008
+ + JETTY-336 413 error for full header buffer
+ + JETTY-425 race in stopping SelectManager
+ + JETTY-580 Fixed SSL shutdown
+ + JETTY-581 ContextPath constructor
+ + JETTY-582 final ISO_8859_1
+ + JETTY-584 handle null contextPath
+ + JETTY-588 handle Retry in ServletException
+ + JETTY-590 Digest auth domain for root context
+ + JETTY-592 expired timeout callback without synchronization
+ + JETTY-595 SessionHandler only deals with base request session
+ + JETTY-596 Proxy support in HttpClient
+ + JETTY-598 Added more reliable cometd message flush option
+ 
+jetty-6.1.10 20 May 2008
+ + Use QueuedThreadPool as default
+ + JETTY-440 allow file name patterns for jsp compilation for jspc plugin
+ + JETTY-529 CNFE when deserializing Array from session resolved
+ + JETTY-537 JSON handles Locales
+ + JETTY-547 Shutdown SocketEndpoint output before close
+ + JETTY-550 Reading 0 bytes corrupts ServletInputStream
+ + JETTY-551 Upgraded to Wadi 2.0-M10
+ + JETTY-556 Encode all URI fragments
+ + JETTY-557 Allow ServletContext.setAttribute before start
+ + JETTY-558 optional handling of X-Forwarded-For/Host/Server
+ + JETTY-566 allow for non-blocking behavior in jetty maven plugin
+ + JETTY-572 unique cometd client ID
+ + JETTY-579 osgi fixes with management and servlet resources
+
+jetty-6.1.9 26 March 2008
+ + Make javax.servlet.jsp optional osgi import for jetty module
+ + Ensure Jotm tx mgr can be found in jetty-env.xml
+ + JETTY-399 update OpenRemoteServiceServlet to gwt 1.4
+ + JETTY-471 LDAP JAAS Realm
+ + JETTY-475 AJP connector in RPMs
+ + JETTY-482 update to JETTY-399
+ + JETTY-519 HttpClient does not recycle closed connection.
+ + JETTY-522 Add build profile for macos for setuid
+ + JETTY-525 Fixed decoding for long strings
+ + JETTY-526 Fixed MMBean fields on JMX MBeans
+ + JETTY-532 MBean properties for QueuedThreadPool
+ + JETTY-535 Fixed Bayeux server side client memory leak
+ + JETTY-538 test harness fix for windows
+ + JETTY-541 Cometd per client timeouts
+
+jetty-6.1.8 28 February 2008
+ + Added QueuedThreadPool
+ + Optimized QuotedStringTokenizer.quote()
+ + further Optimizations and improvements of Cometd
+ + Optimizations and improvements of Cometd, more pooled objects
+ + Improved Cometd timeout handling
+ + Added BayeuxService
+ + Cookie support in BayeuxClient
+ + Improved Bayeux API
+ + add removeHandler(Handler) method to HandlerContainer interface
+ + Added JSON.Convertor and non static JSON instances
+ + Long cache for JSON
+ + Fixed JSON negative numbers
+ + JSON unquotes /
+ + Add "mvn jetty:stop" 
+ + allow sessions to be periodically persisted to disk
+ + grizzly fixed for posts
+ + Add removeHandler(Handler) method to HandlerContainer interface
+ + Remove duplicate commons-logging jars and include sslengine in jboss sar
+ + Allow code ranges on ErrorPageErrorHandler
+ + AJP handles bad mod_jk methods
+ + JETTY-350 log ssl errors on SslSocketConnector
+ + JETTY-417 JETTY_LOGS environment variable not queried by jetty.sh
+ + JETTY-433 ContextDeployer constructor fails unnecessarily when using a security manager if jetty.home not set
+ + JETTY-434 ContextDeployer scanning of sub-directories should be optional
+ + JETTY-481 Handle empty Bayeux response
+ + JETTY-489 Improve doco on the jetty.port property for plugin
+ + JETTY-490 Fixed JSONEnumConvertor
+ + JETTY-491 opendocument mime types
+ + JETTY-492 Null pointer in HashSSORealm
+ + JETTY-493 JSON handles BigDecimals
+ + JETTY-498 Improved cookie parsing
+ + JETTY-507 Fixed encoding from JETTY-388 and test case
+ + JETTY-508 Extensible cometd handlers
+ + JETTY-509 Fixed JSONP transport for changing callback names
+ + JETTY-511 jetty.sh mishandled JETTY_HOME when launched from a relative path
+ + JETTY-512 add slf4j as optional to manifest
+ + JETTY-513 Terracotta session replication does not work when the initial page on each server does not set any attributes
+ + JETTY-515 Timer is missing scavenging Task in HashSessionManager
+
+jetty-6.1.7 - 22 December 2007
+ + Added BayeuxService
+ + Added JSON.Convertor and non static JSON instances
+ + Add "mvn jetty:stop" 
+ + allow sessions to be periodically persisted to disk
+ + Cookie support in BayeuxClient
+ + grizzly fixed for posts
+ + jetty-6.1 branch created from 6.1.6 and r593 of jetty-contrib trunk
+ + Optimizations and improvements of Cometd, more pooled objects
+ + Update java5 patch
+ + JETTY-386 CERT-553235 backout fix and replaced with ContextHandler.setCompactPath(boolean) 
+ + JETTY-467 allow URL rewriting to be disabled.
+ + JETTY-468 unique holder names for addServletWithMapping
+ + JETTY-474 Fixed case sensitivity issue with HttpFields
+ + JETTY-486 Improved jetty.sh script
+ + JETTY-487 Handle empty chunked request
+
+jetty-6.1.6 - 18 November 2007
+ + rudimentary debian packaging
+ + updated grizzly connector to 1.6.1
+ + JETTY-455 Optional cometd id
+ + JETTY-459 Unable to deploy from Eclipse into the root context
+ + JETTY-461 fixed cometd unknown channel
+ + JETTY-464 typo in ErrorHandler
+ + JETTY-465 System.exit() in constructor exception for MultiPartOutputStream
+ 
+jetty-6.1.6rc1 - 5 November 2007
+ + Upgrade jsp 2.1 to SJSAS-9_1-B58G-FCS-08_Sept_2007
+ + Housekeeping on poms
+ + CERT VU#38616 handle single quotes in cookie names.
+ + Improved JSON parsing from Readers
+ + Moved some impl classes from jsp-api-2.1 to jsp-2.1
+ + Added configuration file for capturing stderr and stdout
+ + Updated for dojo 1.0(rc) cometd
+ + Give bayeux timer name
+ + Give Terracotta session scavenger a name
+ + Jetty Eclipse Plugin 1.0.1: force copy of context file on redeploy
+ + JETTY-388 Handle utf-16 and other multibyte non-utf-8 form content.
+ + JETTY-409 String params that denote files changed to File 
+ + JETTY-438 handle trailing . in vhosts
+ + JETTY-439 Fixed 100 continues clash with Connection:close
+ + JETTY-451 Concurrent modification of session during invalidate
+ + JETTY-443 windows bug causes Acceptor thread to die
+ + JETTY-445 removed test code
+ + JETTY-448 added setReuseAddress on AbstractConnector
+ + JETTY-450 Bad request for response sent to server
+ + JETTY-452 CERT VU#237888 Dump Servlet - prevent cross site scripting
+ + JETTY-453 updated Wadi to 2.0-M7
+ + JETTY-454 handle exceptions with themselves as root cause
+ + JETTY-456 allow null keystore for osX
+ + JETTY-457 AJP certificate chains
+
+jetty-6.1.6rc0 - 3 October 2007
+ + Added jetty.lib system property to start.config
+ + AJP13 Fix on chunked post
+ + Fix cached header optimization for extra characters
+ + SetUID option to support setgid
+ + Make mx4j used only if runtime uses jdk<1.5
+ + Moved Grizzly to contrib
+ + Give deployment file Scanner threads a unique name
+ + Fix Host header for async client
+ + Fix typo in async client onResponsetHeader method name
+ + Tweak OSGi manifests to remove unneeded imports
+ + Allow scan interval to be set after Scanner started
+ + Add jetty.host system property
+ + Allow properties files on the XmlConfiguration command line.
+ + Prevent infinite loop on stopping with temp dir
+ + Ensure session is completed only when leaving context.
+ + Update terracotta to 2.4.1 and exclude ssl classes
+ + Update jasper2.1 to tag SJSAS-9_1-B58C-FCS-22_Aug_2007
+ + Removal of unneeded dependencies from management, maven-plugin, naming &  plus poms
+ + Adding setUsername,setGroupname to setuid and mavenizing native build
+ + UTF-8 for bayeux client
+ + CVE-2007-5615 Added protection for response splitting with bad headers.
+ + Cached user agents strings in the /org/mortbay/jetty/useragents resource
+ + Make default time format for RequestLog match NCSA default
+ + Use terracotta repo for build; make jetty a terracotta module
+ + Fix patch for java5 to include cometd module
+ + Added ConcatServlet to combine javascript and css
+ + Add ability to persist sessions with HashSessionManager
+ + Avoid FULL exception in window between blockForOutput and remote close
+ + Added JPackage RPM support
+ + Added JSON.Convertable
+ + Updated README, test index.html file and jetty-plus.xml file
+ + JETTY-259 SystemRoot set for windows CGI
+ + JETTY-311 avoid json keywords
+ + JETTY-376 allow anything but CRLF in reason string
+ + JETTY-398 Allow same WADI Dispatcher to be used across multiple web-app contexts
+ + JETTY-400 consume CGI stderr
+ + JETTY-402 keep HashUserRealm in sync with file
+ + JETTY-403 Allow long content length for range requests
+ + JETTY-404 WebAppDeployer sometimes deploys duplicate webapp
+ + JETTY-405 Default date formate for reqest log
+ + JETTY-407 AJP handles unknown content length
+ + JETTY-413 Make rolloveroutputstream timer daemon
+ + JETTY-422 Allow <Property> values to be null in config files
+ + JETTY-423 Ensure javax.servlet.forward parameters are latched on first forward
+ + JETTY-425 Handle duplicate stop calls better
+ + JETTY-430 improved cometd logging
+ + JETTY-431 HttpClient soTimeout
+
+jetty-6.1.5 - 19 Jul 2007
+ + Upgrade to Jasper 2.1 tag SJSAS-9_1-B50G-BETA3-27_June_2007
+ + Fixed GzipFilter for dispatchers
+ + Fixed reset of reason
+ + JETTY-392 - updated LikeJettyXml example
+
+jetty-6.1.5rc0 - 15 Jul 200
+ + update terracotta session clustering to terracotta 2.4
+ + SetUID option to only open connectors before setUID.
+ + Protect SslSelectChannelConnector from exceptions during close
+ + Improved Request log configuration options
+ + Added GzipFilter and UserAgentFilter
+ + make OSGi manifests for jetty jars
+ + update terracotta configs for tc 2.4 stable1
+ + remove call to open connectors in jetty.xml
+ + update links on website
+ + make jetty plus example webapps use ContextDeployer
+ + Dispatch SslEngine expiry (non atomic)
+ + Make SLF4JLog impl public, add mbean descriptors
+ + SPR-3682 - dont hide forward attr in include.
+ + Upgrade to Jasper 2.1 tag SJSAS-9_1-B50G-BETA3-27_June_2007
+ + JETTY-253 - Improved graceful shutdown
+ + JETTY-373 - Stop all dependent lifecycles
+ + JETTY-374 - HttpTesters handles large requests/responses
+ + JETTY-375 - IllegalStateException when committed.
+ + JETTY-376 - allow spaces in reason string
+ + JETTY-377 - allow sessions to be wrapped with AbstractSesssionManager.SessionIf
+ + JETTY-378 - handle JVMs with non ISO/UTF default encodings
+ + JETTY-380 - handle pipelines of more than 4 requests!
+ + JETTY-385 - EncodeURL for new sessions from dispatch
+ + JETTY-386 - Allow // in file resources
+
+
+jetty-6.1.4 - 15 Jun 2007
+ + fixed early open() call in NIO connectors
+ + JETTY-370 ensure maxIdleTime<=0 means connections never expire
+ + JETTY-371 Fixed chunked HEAD response
+ + JETTY-372 make test for cookie caching more rigorous
+
+jetty-6.1.4rc1 - 10 Jun 2007
+ + Work around IBM JVM socket close issue 
+ + moved documentation for jetty and jspc maven plugins to wiki
+ + async client improvements
+ + fixed handling of large streamed files
+ + Fixed synchronization conflict SslSelectChannel and SelectChannel
+ + Optional static content cache 
+ + JETTY-310 better exception when no filter file for cometd servlet
+ + JETTY-323 handle htaccess without a user realm
+ + JETTY-346 add wildcard support to extra scan targets for maven plugin
+ + JETTY-355 extensible SslSelectChannelConnector
+ + JETTY-357 cleaned up ssl buffering
+ + JETTY-360 allow connectors, userRealms to be added from a <jettyConfig> for maven plugin
+ + JETTY-361 prevent url encoding of dir listings for non-link text
+ + JETTY-362 More object locks
+ + JETTY-365 make needClientAuth work on SslSelectChannelConnector
+ + JETTY-366 JETTY-368 Improved bayeux disconnect
+
+jetty-6.1.4rc0 - 1 Jun 2007
+ + Reorganized import of contrib modules
+ + Unified JMX configuration
+ + Updated slf4j version to 1.3.1
+ + Updated junit to 3.8.2
+ + Allow XmlConfiguration properties to be configured
+ + Add (commented out) jspc precompile to test-webapp
+ + Add slf4j-api for upgraded version
+ + Change scope of fields for Session
+ + Add ability to run cometd webapps to maven plugin
+ + Delay ssl handshake until after dispatch in sslSocketConnector
+ + Set so_timeout during ssl handshake as an option on SslSocketConnector
+ + Optional send Date header. Server.setSendDateHeader(boolean)
+ + update etc/jetty-ssl.xml with new handshake timeout setting
+ + fixed JSP close handling
+ + improved date header handling
+ + fixed waiting continuation reset
+ + JETTY-257 fixed comet cross domain
+ + JETTY-309 fix applied to sslEngine
+ + JETTY-317 rollback inclusion of cometd jar for maven plugin
+ + JETTY-318 Prevent meta channels being created
+ + JETTY-330 Allow dependencies with scope provided for jspc plugin 
+ + JETTY-335 SslEngine overflow fix
+ + JETTY-337 deprecated get/setCipherSuites and added get/setExcludeCipherSuites
+ + JETTY-338 protect isMoreInBuffer from destroy
+ + JETTY-339 MultiPartFiler deletes temp files on IOException
+ + JETTY-340 FormAuthentication works with null response
+ + JETTY-344 gready fill in ByteArrayBuffer.readFrom
+ + JETTY-345 fixed lost content with blocked NIO.
+ + JETTY-347 Fixed type util init
+ + JETTY-352 Object locks
+
+jetty-6.1.3 - 4 May 2007
+ + Handle CRLF for content in header optimization
+ + JETTY-309 don't clear writable status until dispatch
+ + JETTY-315 suppressed warning
+ + JETTY-322 AJP13 cping and keep alive
+
+jetty-6.1.2 - 1 May 2007
+ + Improved unavailabile handling
+ + sendError resets output state
+ + Fixed session invalidation error in WadiSessionManager
+ + Updated Wadi to version 2.0-M3
+ + Added static member definition in WadiSessionManager
+ + JETTY-322 fix ajp cpong response and close handling
+ + JETTY-324 fix ant plugin
+ + JETTY-328 updated jboss
+
+jetty-6.1.2rc5 - 24 April 2007
+ + set default keystore for SslSocketConnector
+ + removed some compile warnings
+ + Allow jsp-file to be / or /*
+ + JETTY-305 delayed connection destroy
+ + JETTY-309 handle close in multivalue connection fields.
+ + JETTY-309 force writable status of endpoints.
+ + JETTY-314 fix for possible NPE in Request.isRequestedSessionIdValid
+
+jetty-6.1.2rc4 - 19 April 2007
+ + JETTY-294 Fixed authentication reset
+ + JETTY-299 handle win32 paths for object naming
+ + JETTY-300 removed synchronized on dispatch
+ + JETTY-302 correctly parse quoted content encodings
+ + JETTY-303 fixed dual reset of generator
+ + JETTY-304 Fixed authentication reset
+
+jetty-6.1.2rc3 - 16 April 2007
+ + Improved performance and exclusions for TLD scanning
+ + MBean properties assume writeable unless marked RO
+ + refactor of SessionManager and SessionIdManager for clustering 
+ + Improvements to allow simple setting of Cache-Control headers
+ + AJP redirects https requests correctly
+ + Fixed writes of unencoded char arrays.
+ + JETTY-283 Parse 206 and 304 responses in client
+ + JETTY-285 enable jndi for mvn jetty:run-war and jetty:run-exploded
+ + JETTY-289 fixed javax.net.ssl.SSLException on binary file upload
+ + JETTY-292 Fixed error page handler error pages
+ + JETTY-293 fixed NPE on fast init
+ + JETTY-294 Response.reset() resets headers as well as content
+ + JETTY-295 Optional support of authenticated welcome files
+ + JETTY-296 Close direct content inputstreams
+ + JETTY-297 Recreate tmp dir on stop/start
+ + JETTY-298 Names in JMX ObjectNames for context, servlets and filters
+
+jetty-6.1.2rc2 - 27 March 2007
+ + Enable the SharedStoreContextualiser for the WadiSessionManager(Database store for clustering)
+ + AJP13 CPING request and CPONG response implemented
+ + AJP13 Shutdown Request from peer implemented
+ + AJP13 remoteUser, contextPath, servletPath requests implemented
+ + Change some JNDI logging to debug level instead of info
+ + Update jasper to glassfish tag SJSAS-9_1-B39-RC-14_Mar_2007
+ + Optimized multi threaded init on startup servlets
+ + Removed unneeded specialized TagLibConfiguration class from maven plugin
+ + Refactor Scanner to increase code reuse with maven/ant plugins
+ + Added RestFilter for PUT and DELETE from Aleksi Kallio
+ + Make annotations work for maven plugin
+ + JETTY-125 maven plugin: ensure test dependencies on classpath for <useTestClasspath>
+ + JETTY-246 path encode cookies rather than quote
+ + JETTY-254 prevent close of jar entry by bad JVMs
+ + JETTY-256 fixed isResumed and work around JVM bug
+ + JETTY-258 duplicate log message in ServletHandler
+ + JETTY-260 Close connector before stop
+ + JETTY-262 Allow acceptor thread priority to be adjusted
+ + JETTY-263 Added implementation for authorizationType Packets
+ + JETTY-265 Only quote cookie values if needed
+ + JETTY-266 Fix deadlock with shutdown
+ + JETTY-271 ResourceHandler uses resource for MimeType mapping
+ + JETTY-272 Activate and Passivate events for sessions
+ + JETTY-274 Improve flushing at end of request for blocking
+ + JETTY-276 Partial fix for reset/close race
+ + JETTY-277 Improved ContextHandlerCollection
+ + JETTY-278 Session invalidation delay until no requests
+ + JETTY-278 Only unwrap one layer of ServletExceptions
+ + JETTY-280 Fixed deadlock with two flushing threads
+ + JETTY-284 Fixed stop connector race
+ + JETTY-286 isIntegral and isConfidential methods overridden in SslSelectChannelConnector
+
+jetty-6.1.2rc1 - 8 March 2007
+ + TagLibConfiguration uses resource input stream
+ + Improved handling of early close in AJP
+ + add ajp connector jar to jetty-jboss sar
+ + Improved Context setters for wadi support
+ + fix Dump servlet to handle primitive array types
+ + handle comma separated values for the Connection: header
+ + Added option to allow null pathInfo within context
+ + BoundedThreadPool queues rather than blocks excess jobs.
+ + Support null pathInfo option for webservices deployed to jetty/jboss
+ + Workaround to call SecurityAssocation.clear() for jboss webservices calls to ejbs
+ + Ensure jetty/jboss uses servlet-spec classloading order
+ + call preDestroy() after servlet/filter destroy()
+ + Fix constructor for Constraint to detect wildcard role
+ + Added support for lowResourcesIdleTime to SelectChannelConnector
+ + JETTY-157 make CGI handle binary data
+ + JETTY-175 JDBCUserRealm use getInt instead of getObject
+ + JETTY-188 Use timer for session scavaging
+ + JETTY-235 default realm name
+ + JETTY-242 fix race condition with scavenging sessions when stopping
+ + JETTY-243 FULL
+ + JETTY-244 Fixed UTF-8 buffer overflow
+ + JETTY-245 Client API improvements
+ + JETTY-246 spaces in cookies
+ + JETTY-248 setContentLength after content written
+ + JETTY-250 protect attribute enumerations from modification
+ + JETTY-252 Fixed stats handling of close connection
+ + JETTY-254 prevent close of jar file by bad JVMs
+
+jetty-6.1.2rc0 - 15 February 2007
+ + JETTY-223 Fix disassociate of UserPrincipal on dispatches
+ + JETTY-226 Fixed SSLEngine close issue
+ + JETTY-232 Fixed use of override web.xml
+ + JETTY-236 Buffer leak
+ + JETTY-237 AJPParser Buffer Data Handling
+ + JETTY-238 prevent form truncation
+ + Patches from sybase for ClientCertAuthenticator
+ + Coma separated cookies
+ + Cometd timeout clients
+
+jetty-6.1.2pre1 5 Feb 2007
+ + JETTY-224 run build up to process-test before invoking jetty:run
+ + Added error handling for incorrect keystore/truststore password in SslSelectChannelConnector
+ + fixed bug with virtual host handling in ContextHandlerCollection
+ + added win32service to standard build
+ + refactored cometd to be continuation independent
+ + allow ResourceHandler to use resource base from an enclosing ContextHandler
+ 
+jetty-6.1.2pre0 1 Feb 2007
+ + Fixed 1.4 method in jetty plus
+ + Fixed generation of errors during jsp compilation for jsp-2.1
+ + Added cometd jsonp transport from aabeling
+ + Added terracotta cluster support for cometd
+ + JETTY-213 request.isUserInRole(String) fixed
+ + JETTY-215 exclude more transitive dependencies from tomcat jars for jsp-2.0
+ + JETTY-216 handle AJP packet fragmentation
+ + JETTY-218 handle AJP ssl key size and integer
+ + JETTY-219 fixed trailing encoded chars in cookies
+ + JETTY-220 fixed AJP content 
+ + JETTY-222 fix problem parsing faces-config.xml
+ + add support for Annotations in servlet, filter and listener sources
+ + improved writer buffering
+ + moved JSON parser to util to support reuse
+ + handle virtual hosts in ContextHandlerCollection
+ + enable SslSelectChannelConnector to modify the SslEngine's client authentication settings
+ 
+jetty-6.1.1 - 15 Jan 2007
+jetty-6.1.1rc1 - 12 Jan 2007
+ + Use timers for Rollover logs and scanner
+ + JETTY-210 Build jsp-api-2.0 for java 1.4
+
+jetty-6.1.1rc0 - 10 Jan 2007
+ + Fixed unpacking WAR
+ + extras/win32service download only if no JavaServiceWrapper exist
+ + MultiPartFilter deleteFiles option
+ + CGI servlet fails without exception
+ + JETTY-209 Added ServletTester.createSocketConnector
+ + JETTY-210 Build servlet-api-2.5 for java 1.4
+ + JETTY-211 fixed jboss build
+ + ensure response headers on AjaxFilter messsages turn off caching
+ + start webapps on deployment with jboss, use isDistributed() method from WebAppContext
+ + simplified chat demo
+
+jetty-6.1.0 - 9 Jan 2007
+ + Fixed unpacking WAR
+jetty-6.1.0 - 5 Jan 2007
+ + Improved config of java5 threadpool
+ + Protect context deployer from Errors
+ + Added WebAppContext.setCopyWebDir to avoid JVM jar caching issues.
+ + GERONIMO-2677 refactor of session id handling for clustering
+ + ServletTester sets content length
+ + Added extras/win32service
+ + JETTY-206 fixed AJP getServerPort and getRemotePort
+
+jetty-6.1.0rc3 - 2 Jan 2007
+ + JETTY-195 fixed ajp ssl_cert handling
+ + JETTY-197 fixed getRemoteHost
+ + JETTY-203 initialize ServletHandler if no Context instance
+ + JETTY-204 setuid fix
+ + setLocale does not use default content type
+ + Use standard releases of servlet and jsp APIs.
+ + implement resource injection and lifecycle callbacks declared in web.xml
+ + extras/servlet-tester
+
+jetty-6.1.0rc2 - 20 December 2006
+ + AJP13Parser, throw IllegalStateException on unimplemented AJP13 Requests
+ + ContextHandlerCollection is noop with no handlers
+ + ensure servlets initialized if only using ServletHandler
+ + fixed Jetty-197 AJP13 getRemoteHost()
+ + Refactored AbstractSessionManager for ehcache
+ + ensure classpath passed to jspc contains file paths not urls
+ + JETTY-194 doubles slashes are significant in URIs
+ + JETTY-167 cometd refactor
+ + remove code to remove SecurityHandler if no constraints present
+ + JETTY-201 make run-as work for both web container and ejb container in jboss
+ + ensure com.sun.el.Messages.properties included in jsp-2.1 jar
+ 
+jetty-6.1.0rc1 - 14 December 2006
+ + simplified idle timeout handling
+ + JETTY-193 MailSessionReference without authentication
+ + JETTY-199 newClassPathResource
+ + ensure unique name for ServletHolder instances
+ + added cache session manager(pre-alpha)
+
+jetty-6.1.0rc0 - 8 December 2006
+ + JETTY-181 Allow injection of a java:comp Context
+ + JETTY-182 Optionally set JSP classpath initparameter
+ + Dispatcher does not protect javax.servlet attributes
+ + DefaultHandler links virtual hosts.
+ + Fixed cachesize on invalidate
+ + Optimization of writers
+ + ServletHandler allows non REQUEST exceptions to propogate
+ + TCK fixes from Sybase:
+   * Handle request content encodings
+   * forward query attribute fix
+   * session attribute listener
+   * Servlet role ref
+   * flush if content-length written
+   * 403 for BASIC authorization failure
+   * null for unknown named dispatches
+ + JETTY-184 cometd connect non blocking
+ + Support for RFC2518 102-processing response
+ + JETTY-123 fix improved
+ + Added org.mortbay.thread.concurrent.ThreadPool 
+ + Added extras/gwt
+ + Fixed idle timeout
+ + JETTY-189 ProxyConnection
+ + Added spring ejb3 demo example
+ + update jasper to glassfish SJSAS-9_1-B27-EA-07_Dec_2006
+ + fixed JETTY-185 tmp filename generation
+
+jetty-6.1.0pre3 - 22 November 2006
+ + fixed NIO endpoint flush. Avoid duplicate sends
+ + CVE-2006-6969 Upgraded session ID generation to use SecureRandom
+ + updated glassfish jasper to tag SJSAS-9_1-B25-EA-08_Nov_2006
+ + Support TLS_DHE_RSA_WITH_AES_256_CBC_SHA 
+ + JETTY-180 XBean support for context deploy
+ + JETTY-154 Cookies are double quotes only
+ + Expose isResumed on Continuations
+ + Refactored AJP generator
+ 
+
+jetty-6.0.2 - 22 November 2006
+ + Moved all modules updates from 6.1pre2 to 6.0
+ + Added concept of bufferred endpoint
+ + Added conversion Object -> ObjectName for the result of method calls made on MBeans
+ + Added DataFilter configuration to cometd
+ + added examples/test-jaas-webapp
+ + Added extraClassPath to WebAppContext
+ + Added hierarchical destroy of mbeans
+ + Added ID constructor to AbstractSessionManager.Session
+ + added isStopped() in LifeCycle and AbstractLifeCycle
+ + Added override descriptor for deployment of RO webapps
+ + add <Property> replacement in jetty xml config files
+ + alternate optimizations of writer (use -Dbuffer.writers=true)
+ + Allow session cookie to be refreshed
+ + Apply queryEncoding to getQueryString
+ + CGI example in test webapp
+ + change examples/test-jndi-webapp so it can be regularly built
+ + Default soLinger is -1 (disabled)
+ + ensure "" returned for ServletContext.getContextPath() for root context
+ + ensure sessions nulled out on request recycle; ensure session null after invalidate
+ + ensure setContextPath() works when invoked from jetty-web.xml
+ + fixed NIO endpoint flush. Avoid duplicate sends
+ + Fixed NPE in bio.SocketEndPoint.getRemoteAddr()
+ + Fixed resource cache flushing
+ + Fixed tld parsing for maven plugin
+ + HttpGenerator can generate requests
+ + Improved *-mbean.properties files and specialized some MBean
+ + JETTY-118 ignore extra content after close.
+ + JETTY-119 cleanedup Security optimizatoin
+ + JETTY-123 handle windows UNC paths
+ + JETTY-126 handle content > Integer.MAX_VALUE
+ + JETTY-129 ServletContextListeners called after servlets are initialized
+ + JETTY-151 Idle timeout only applies to blocking operations
+ + JETTY-151 refactored writers
+ + JETTY-154 Cookies are double quotes only
+ + JETTY-171 Fixed filter mapping
+ + JETTY-172 use getName() instead of toString
+ + JETTY-173 restore servletpath after dispatch
+ + Major refactor of SelectChannel EndPoint for client selector
+ + make .tag files work in packed wars
+ + Plugin shutdown context before stopping it.
+ + Refactored session lifecycle and additional tests
+ + release resource lookup in Default servlet
+ + (re)make JAAS classes available to webapp classloader
+ + Reverted UnixCrypt to use coersions (that effected results)
+ + Session IDs can change worker ID
+ + Simplified ResourceCache and Default servlet
+ + SocketConnector closes all connections in doStop
+ + Upgraded session ID generation to use SecureRandom
+ + updated glassfish jasper to tag SJSAS-9_1-B25-EA-08_Nov_2006
+ + Support TLS_DHE_RSA_WITH_AES_256_CBC_SHA 
+
+Jetty-5.1.14 - 9 Aug 2007
+ + patched with correct version
+ + JETTY-155 force close with content length.
+ + JETTY-369 failed state in Container
+
+Jetty-5.1.13
+ + Sourceforge 1648335: problem setting version for AJP13
+
+Jetty-5.1.12 - 22 November 2006
+ + Added support for TLS_DHE_RSA_WITH_AES_256_CBC_SHA
+ + Upgraded session ID generation to use SecureRandom
+ + Quote single quotes in cookies
+ + AJP protected against bad requests from mod_jk
+ + JETTY-154 Cookies ignore single quotes
+ 
+Jetty-4.2.27 - 22 November 2006
+ + Upgraded session ID generation to use SecureRandom
+ + AJP protected against bad requests from mod_jk
+
+jetty-6.1.0pre2 - 20 Nov 2006
+ + Added extraClassPath to WebAppContext
+ + Fixed resource cache flushing
+ + Clean up jboss module licensing
+
+jetty-6.1.0pre1 - 19 Nov 2006
+ + Use ContextDeployer as main deployer in jetty.xml
+ + Added extras/jboss
+ + Major refactor of SelectChannel EndPoint for client selector 
+ + Fixed NPE in bio.SocketEndPoint.getRemoteAddr()
+ + Reverted UnixCrypt to use coersions (that effected results)
+ + JETTY-151 Idle timeout only applies to blocking operations
+ + alternate optimizations of writer (use -Dbuffer.writers=true)
+ + JETTY-171 Fixed filter mapping
+ + JETTY-172 use getName() instead of toString
+ + JETTY-173 restore servletpath after dispatch
+ + release resource lookup in Default servlet
+ + Simplified ResourceCache and Default servlet 
+ + Added override descriptor for deployment of RO webapps
+ + Added hierarchical destroy of mbeans
+ + JETTY-151 refactored writers
+
+jetty-6.1.0pre0 - 21 Oct 2006
+ + add <Property> replacement in jetty xml config files
+ + make .tag files work in packed wars
+ + add hot deployment capability
+ + ensure setContextPath() works when invoked from jetty-web.xml
+ + ensure sessions nulled out on request recycle; ensure session null after invalidate
+ + ensure "" returned for ServletContext.getContextPath() for root context
+ + Fixed tld parsing for maven plugin
+ + Improved *-mbean.properties files and specialized some MBean
+ + Added conversion Object -> ObjectName for the result of method calls made on MBeans
+ + JETTY-129 ServletContextListeners called after servlets are initialized
+ + change examples/test-jndi-webapp so it can be regularly built
+ + added isStopped() in LifeCycle and AbstractLifeCycle
+ + fixed isUserInRole checking for JAASUserRealm
+ + fixed ClassCastException in JAASUserRealm.setRoleClassNames(String[])
+ + add a maven-jetty-jspc-plugin to do jspc precompilation
+ + added examples/test-jaas-webapp
+ + (re)make JAAS classes available to webapp classloader
+ + CGI example in test webapp
+ + Plugin shutdown context before stopping it.
+ + Added concept of bufferred endpoint
+ + Factored ErrorPageErrorHandler out of WebAppContext
+ + Refactored ErrorHandler to avoid statics
+ + Transforming classloader does not transform resources.
+ + SocketConnector closes all connections in doStop
+ + Improved charset handling in URLs
+ + minor optimization of bytes to UTF8 strings
+ + JETTY-112 ContextHandler checks if started
+ + JETTY-113 support optional query char encoding on requests
+ + JETTY-114 removed utf8 characters from code
+ + JETTY-115 Fixed addHeader
+ + added cometd chat demo
+ + JETTY-119 cleanedup Security optimizatoin
+ + Refactored session lifecycle and additional tests
+ + JETTY-121 init not called on externally constructed servlets
+ + JETTY-124 always initialize filter caches
+ + JETTY-126 handle content > Integer.MAX_VALUE
+ + JETTY-123 handle windows UNC paths
+ + JETYY-120 SelectChannelConnector closes all connections on stop
+ + Added ID constructor to AbstractSessionManager.Session
+ + Allow session cookie to be refreshed
+ + Added DataFilter configuration to cometd
+ + Added extras/setuid to support start as root
+ + Apply queryEncoding to getQueryString 
+ + JETTY-118 ignore extra content after close.
+ + HttpGenerator can generate requests
+ + Ported HtAccessHandler
+ + Start of a client API
+ + Session IDs can change worker ID
+ + Default soLinger is -1 (disabled)
+ + AJP Connector 
+
+Jetty-5.1.11 - 8 October 2006
+ + fixed ByteBufferOutputStream capacity calculation
+ + Fixed AJP handling of certificate length (1494939)
+ + Fixed AJP chunk header (1507377)
+ + Fixed order of destruction event calls
+ + Fix to HttpOutputStream from M.Traverso
+ + Default servlet only uses setContentLength on wrapped responses
+ 
+Jetty-4.2.26 - 8 October 2006
+ + Backport of AJP fixes
+
+jetty-6.0.1 - 24 September 2006
+ + fixed isUserInRole checking for JAASUserRealm
+ + fixed ClassCastException in JAASUserRealm.setRoleClassNames(String[])
+ + Improved charset handling in URLs
+ + Factored ErrorPageErrorHandler out of WebAppContext
+ + Refactored ErrorHandler to avoid statics
+ + JETTY-112 ContextHandler checks if started
+ + JETTY-114 removed utf8 characters from code
+ + JETTY-115 Fixed addHeader
+ + JETTY-121 init not called on externally constructed servlets
+ + Improved charset handling in URLs
+ + minor optimization of bytes to UTF8 strings
+ + JETTY-113 support optional query char encoding on requests
+ + JETTY-124 always initialize filter caches
+ + JETYY-120 SelectChannelConnector closes all connections on stop
+
+jetty-6.0.0 - 10 September 2006
+ + SocketConnector closes all connections in doStop
+ + Conveniance builder methods for listeners and filters
+ + Transforming classloader does not transform resources.
+ + Plugin shutdown context before stopping it.
+
+jetty-6.0.0rc4 - 5 September 2006
+ + bind jetty-env.xml entries to java:comp/env
+ + Fix for JETTY-107. Poor cast in SessionDump demo.
+ + Set charset on error pages
+
+jetty-6.0.0rc3 - 1 September 2006
+ + pulled 6.0.0 branch
+ + turn URLConnection caching off when searching for tlds [JETTY-103]
+ + Move MailSessionReference to org.mortbay.naming.factories
+ + Less verbose handling of BadResources from bad URLs
+ + Avoid double error handling of Bad requests
+ + don't warn for content length on head requests
+ + temp fix for JETTY-104 (raised glassfish ISSUE-1044) hide
+   JSP forced path attribute
+ + Fixed JETTY-68. Complete request after sendRedirect
+ + Transferred the sslengine patch from the patches directory to extras
+
+jetty-6.0.0rc2 - 25 August 2006
+ + use mvn -Dslf4j=false jetty:run to disable use of slf4j logging with jdk1.4/jsp2.0
+ + added org.apache.commons.logging package to system classes that can't be overridden by a webapp classloader
+ + mvn -Djetty.port=x jetty:run uses port number given for the default connector
+ + Fixed NPE when no resource cache
+ + Refactored WebXmlConfiguration to allow custom web.xml resource
+ + Moved more utility packagtes to the util jar
+ + Direct buffer useage is optional
+ + Destroy HttpConnection to improve buffer pooling
+ + Timestamp in StdErrLog
+
+jetty-6.0.0rc1 - 16 August 2006
+ + Support for binding References and Referenceables and javax.mail.Sessions in JNDI
+ + Added TransformingWebAppClassLoader for spring 2.0 byte code modification support
+ + Ensure classes come before dependencies for plugin [JETTY-90]
+ + Fixed FD leak for bad TCP acks. JETTY-63
+ + new Server().addHandler(handler) no longer throws NPE [JETTY-87]
+ + Change path mapping so that a path spec of /foo/* does not match /foo.bar : JETTY-88
+ + add <requestLog> config param to jetty plugin
+ + Improve Ssl config JETTY-85 JETTY-86 (TrustManager and SecureRandom are now configurable; better handling of null/default values)
+ + parse jsp-property-group in web.xml for additional JSP servlet mappings
+ + protected setContentType from being set during include
+ + added toString() on JAASUserPrincipal (JETTY-91)
+ + added modules/spring with XmlBeanFactory configuration
+ + removed support for lowResources from SelectChannelConnector
+ + added start of cometd implementation (JSON only)
+ + added start of grizzly connector
+ + removed org.mortbay. from context system classes configuration
+ + -DSTOP.PORT must be specified.
+ + moved optional modules to extras
+ + fixed bug that caused Response.setStatus to ignore the provided message
+ + refactored resource cache
+ + Allow direct filling of buffers for uncached static content.
+ + Added simple ResourceHandler and FileServer example
+
+jetty-6.0.0rc0 - 7 July 2006
+ + change prefix from "jetty6" to just "jetty" for plugin: eg is now mvn jetty:run
+ + allow <key> or <name> in <systemProperty> for plugin
+ + simplified jetty.xml with new constructor injections
+ + added setters and getters on SessionManager API for session related config: cookie name, url parameter name, domain, max age and path.
+ + add ability to have a lib/ext dir from which to recursively add all jars and zips to the classpath
+ + patch to allow Jetty to use JSP2.1 from Glassfish instead of Jasper from Tomcat
+ + fixed classesDirectory param for maven plugin to be configurable
+ + ensure explicitly set tmp directory called "work" is not deleted on exit
+ + ensure war is only unpacked if war is newer than "work" directory
+ + change name of generated tmp directory to be "Jetty_"+host+"_"+port+"_"+contextpath+"_"+virtualhost
+ + Cleaned up idle expiry.
+ + Ssl algorithm taken from system property
+ + Added 8 random letters&digits to Jetty-generated tmp work dir name to ensure uniqueness
+ + Simplify runtime resolution of JSP library for plugin
+ + Ensure mvn clean cleans the build
+ + Do not wrap EofException with EofException
+ + reverse order for destroy event listeners
+ + added StatisticsHandler and statistics on Connector.
+ + Simplified Servlet Context API
+ + Added maximum limit to filter chain cache.
+ + refactor HttpChannelEndPoint in preparation for SslEngine
+ + ContextHandlerCollection addContext and setContextClass
+ + Discard excess bytes in header buffer if connection is closing
+ + Updated javax code from http://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk/java/javax@417727
+ + Threadpool does not need to be a LifeCycle
+ + support graceful shutdown
+ + Added WebAppContextClassLoader.newInstance to better support exensible loaders.
+ + immutable getParameterMap()
+ + support <load-on-startup> for SingleThreadModel
+ + changed ServletContext.getResourcePaths()  to not return paths containing double slashes
+ + fixed HttpGenerator convertion of non UTF-8: JETTY-82
+ + added html module from jetty 5 - but deprecated until maintainer found
+
+jetty-6.0.0beta17 - 1/6/2006
+ + Added config to disable file memory mapped buffers for windows
+ + Added Request.isHandled()
+ + Refactored Synchronization of SelectChannelConnector
+ + Recovered repository from Codehaus crash
+ + ContextHandler.setConnectors replace setHosts
+ + Connector lowResourceMaxIdleTime  implemented.
+ + Default servlet checks for aliases resources
+ + Added clover reports and enough tests to get >50% coverage
+ + Fixed IE SSL issue.
+ + Implemented runAs on servlets
+ + Flush will flush all bytes rather than just some.
+ + Protected WEB-INF and META-INF
+ + don't reset headers during forward
+ + BoundedThreadPool.doStop waits for threads to complete
+
+jetty-6.0.0beta16 - 12/5/2006
+ + remove a couple of System.err.printlns
+ + replace backwards compativle API in UrlEncoded
+
+jetty-6.0.0beta15 - 11/5/2006
+ + Added Server attribute org.mortbay.jetty.Request.maxFormContentSize
+ + Renamed NotFoundHandler to DefaultHandler
+ + Added automatic scan of all WEB-INF/jetty-*.xml files for plugin
+ + Added <scanTargets> parameter to allow other locations to scan for plugin
+ + Major refactor to simplify Server and handler hierarchy
+ + setSendServerVersion method added to Server to control sending of Server: http header
+ + removed SelectBlockingChannelConnector (unmaintained)
+ + Improved HttpException
+ + Moved more resources to resources
+ + Added ThrottlingFilter and fixed race in Continuations
+ + Added taglib resources to 2.1 jsp api jar
+ + Reset of timer task clears expiry
+ + improved MBeanContainer object removal
+ + ContextHandler.setContextPath can be called after start.
+ + Fixed handling of params after forward
+ + Added --version to start.jar
+ + Added embedded examples
+ + Simplified DefaultServlet static content buffering
+ + readded BoundedThreadPool shrinking (and then fixed resulting deadlock)
+ + improved MBean names
+ + improved support for java5 jconsole
+ + Session scavenger threads from threadpool
+ + Thread names include URI if debug set
+ + don't accept partial authority in request line.
+ + enforce 204 and 304 have no content
+
+jetty-6.0.0beta14 - 9/4/2006
+ + ignore dirs and files that don't exist in plugin scanner
+ + added support for stopping jetty using "java -jar start.jar --stop"
+ + added configurability for webdefault.xml in maven plugin
+ + adding InvokerServlet
+ + added ProxyServlet
+ + stop JDBCUserRealm coercing all credentials to String
+ + Change tmp dir of plugin to work to be in line with jetty convention
+ + Modify plugin to select JSP impl at runtime
+ + Use start.config to select which JSP impl at runtime based on jdk version
+ + Added JSP 2.1 APIs from apache
+ + Added Jasper 2.1 as jesper (jasper without JCL)
+ + Started readding logging to jesper using jdk logging
+ + fixed priority of port from url over host header
+ + implemented request.isUserInRole
+ + securityHandler removed if not used.
+ + moved test webapps to examples directory
+ + improved contentType handling and test harness
+ + fixed forward bug (treated as include)
+ + fixed HttpField iterator
+ + added jetty-util.jar module
+ + added reset to Continuation
+
+
+jetty-6.0.0beta12 - 16/3/2006
+ + Fixed maven plugin JNDI for redeploys
+ + Fixed tld discovery for plugin (search dependencies)
+ + Fixed JettyPlus for root contexts
+ + Fixed error handling in error page
+ + Added JSP2.0 demos to test webapp
+ + Upgraded jasper to 5.5.15
+ + Added provider support to SslListener
+ + Log ERROR for runtimeExceptions
+
+jetty-6.0.0beta11 - 14/3/2006
+ + added JAAS
+ + added webapp-specific JNDI entries
+ + added missing Configurations for maven plugin
+ + fixed FORM authentication
+ + moved dtd and xsd to standard javax location
+ + added patch to use joda-time
+ + refactored session ID management
+ + refactored configuration files and start()
+ + fixed ; decoding in URIs
+ + Added HttpURI and improved UTF-8 parsing.
+ + refactored writers and improved UTF-8 generation.
+
+jetty-6.0.0beta10 25/2/2006
+ + Added support for java:comp/env
+ + Added support for pluggable transaction manager
+ + Forward masks include attributes and vice versa
+ + Fixed default servlet handling of includes
+ + Additional accessors for request logging
+ + added getLocalPort() to connector
+ + Fixed content-type for range requests
+ + Fix for sf1435795 30sec delay from c taylor
+ + Fix for myfaces and include with close
+ + Fix sf1431936 don't chunk the chunk
+ + Fix http://jira.codehaus.org/browse/JETTY-6. hi byte reader
+ + Updates javax to MR2 release
+
+jetty-6.0.0beta9 9/2/2006
+ + PathMap for direct context mapping.
+ + Refactored chat demo and upgraded prototype.js
+ + Continuation cleanup
+ + Fixed unraw decoding of query string
+ + Fixed dispatch of wrapped requests.
+ + Fixed double flush of short content.
+ + Added request log.
+ + Added CGI servlet.
+ + Force a tempdir to be set.
+ + Force jasper scratch dir.
+ + fixed setLocale bug sf1426940
+ + Added TLD tag listener handling.
+
+jetty-6.0.0beta8 24/1/2006
+ + fixed dispatch of new session problem. sf:1407090
+ + reinstated rfc2616 test harness
+ + Handle pipeline requests without hangs
+ + Removed queue from thread pool.
+ + improved caching of content types
+ + fixed bug in overloaded write method on HttpConnection (reported against Tapestry4.0)
+ + hid org.apache.commons.logging and org.slf4j packages from webapp
+ + maven-jetty6-plugin stopped transitive inclusion of log4j and
+   commons-logging from commons-el for jasper
+ + patch to remove spurious ; in HttpFields
+ + improve buffer return mechanism.
+ + conveniance addHandler removeHandler methods
+ + maven-jetty6-plugin: ensure compile is done before invoking jetty
+ + maven-jetty6-plugin: support all types of artifact dependencies
+
+Jetty-6.0.0Beta7
+ + Fixed infinite loop with chunk handling
+ + Faster header name lookup
+ + removed singleton Container
+ + reduced info verbosity
+ + null dispatch attributes not in names
+ + maven-jetty6-plugin added tmpDirectory property
+ + maven-jetty6-plugin stopped throwing an error if there is no target/classes directory
+
+Jetty-6.0.0Beta6
+ + Fixed issue with blocking reads
+ + Fixed issue with unknown headers
+ + optimizations
+
+Jetty-6.0.0Beta5
+ + Moved to SVN
+ + Fixed writer char[] creations
+ + Added management module for mbeans
+
+Jetty-6.0.0Beta4
+ + System property support in plugin
+ + CVE-2006-2758 Fixed JSP visibility security issue.
+ + Improved jetty-web.xml access to org.mortbay classes.
+ + Jasper 5.5.12
+
+Jetty-6.0.0Beta3
+ + Fixed error in block read
+ + Named dispatch.
+ + Fixed classloader issue with server classes
+
+Jetty-6.0.0Beta2
+ + merged util jar back into jetty jar
+ + Simpler continuation API
+ + loosely coupled with JSP servlet
+ + loosely coupled with SLF4J
+ + Improved reuse of HttpField values and cookies.
+ + Improved buffer return
+
+Jetty-6.0.0Beta1
+ + Servlet 2.5 API
+ + SSL connector
+ + maven2 plugin
+ + shutdown hook
+ + refactored start/stop
+ + Implemented all listeners
+ + Error pages
+ + Virtual hosts
+ + Multiple select sets
+
+Jetty-6.0.0Beta0
+ + Maven 2 build
+ + Dispatcher parameters
+ + UTF-8 encoding for URLs
+ + Fixed blocking read
+
+Jetty-6.0.0APLPA3
+ + Added demo for Continuations
+ + Jasper and associated libraries.
+
+Jetty-6.0.0ALPHA2
+ + Continuations - way cool way to suspend a request and retry later.
+ + Dispatchers
+ + Security
+
+Jetty-6.0.0ALPHA1
+ + Filters
+ + web.xml handling
+
+Jetty-6.0.0ALPHA0
+ * Totally rearchitected and rebuilt, so 10 years of cruft could be removed!
+ * Improved "dependancy injection" and "inversion of control" design of components
+ * Improved "interceptor" design of handlers
+ * Smart split buffer design allows large buffers to only be allocated to active connections. The
+   resulting memory savings allow very large buffers to be used, which increases the chance of efficient
+   asynchronous flushing and of avoiding chunking.
+ * Optional use of NIO Buffering so that efficient direct buffers and memory mapped files can be
+   used.
+ * Optional use of NIO non-blocking scheduling so that threads are not allocated per connection.
+ * Optional use of NIO gather writes, so that for example a HTTP header and a memory mapped
+ * file may be sent as sent is a single operation.
+ - Missing Security
+ - Missing Request Dispatchers
+ - Missing web.xml based configuration
+ - Missing war support
+
+
+Jetty-5.1.11RC0 - 5 April 2006
+ + stop JDBCUserRealm forcing all credentials to be String
+ + force close with shutdownOutput for win32
+ + NPE protection if desirable client certificates
+ + Added provider support to SslListener 
+ + logging improvements for servlet and runtime exceptions
+ + Fixed AJP handling of ;jsessionid.
+ + improved contentType param handling 
+
+Jetty-5.1.10 - 5 January 2006
+ + Fixed path aliasing with // on windows.
+ + Fix for AJP13 with multiple headers
+ + Fix for AJP13 with encoded path
+ + Remove null dispatch attributes from getAttributeNames
+ + Put POST content default back to iso_8859_1. GET is UTF-8 still
+ 
+Jetty-4.2.25 - 4 Jan 2006
+ + Fixed aliasing of // for win32
+
+Jetty-5.1.9 - 7 December 2005
+ + Fixed wantClientAuth(false) overriding netClientAuth(true) 
+
+Jetty-6.0.0betaX -
+ + See http://jetty.mortbay.org/jetty6 for 6.0 releases
+
+Jetty-5.1.8 - 7 December 2005
+ + Fixed space in URL issued created in 5.1.6
+
+Jetty-5.1.7 - 7 December 2005
+Jetty-5.1.7rc0 - 6 December 2005
+ + improved server stats
+ + char encoding for MultiPartRequest
+ + fixed merging of POST params in dispatch query string.
+ + protect from NPE in dispatcher getValues
+ + Updated to 2.6.2 xerces
+ + JSP file servlet mappings copy JspServlet init params.
+ + Prefix servlet context logs with org.mortbay.jetty.context
+ + better support for URI character encodings
+ + use commons logging jar instead of api jar.
+
+Jetty-5.1.6 - 18 November 2005
+ + CVE-2006-2758 Fixed JSP visibility security issue.
+ + Improved jetty-web.xml access to org.mortbay classes.
+
+Jetty-5.1.5 - 10 November 2005
+ + Improved shutdown hook
+ + Improved URL Decoding
+ + Improved mapping of JSP files.
+
+Jetty-5.1.5rc2 - 7 October 2005
+ + Reverted dispatcher params to RI rather than spec behaviour.
+ + ProxyHandler can handle chained proxies
+ + unsynchronized ContextLoader
+ + ReFixed merge of Dispatcher params
+ + public ServerMBean constructor
+ + UTF-8 encoding for URLs 
+ + Response.setLocale will set locale even if getWriter called.
+
+Jetty-5.1.5rc1 - 23 August 2005
+ + upgraded to commons logging 1.0.4
+ + Release commons logging factories when stopping context.
+ + Fixed illegal state with chunks and 100 continue - Tony Seebregts
+ + Fixed PKCS12Import input string method
+ + Fixed merge of Dispatcher parameters
+ + Encoded full path in ResourceHandler directory listing
+ + handle extra params after charset in header
+ + Fixed 100-continues with chunking and early commit
+
+Jetty-5.1.5rc0 - 16 August 2005
+ + Fixed component remove memory leak for stop/start cycles
+ + Facade over commons LogFactory so that discovery may be avoided.
+ + Applied ciphersuite patch from tonyj
+ + Authenticators use servlet sendError
+ + CGI sets SCRIPT_FILENAME
+ + HttpTunnel timeout
+ + NPE protection for double stop in ThreadedServer
+ + Expect continues only sent if input is read.
+
+Jetty-5.1.4 - 5 June 2005
+ + Fixed FTP close issue.
+ + setup MX4J with JDK1.5 in start.config
+ + set classloader during webapp doStop
+ + NPE protection in ThreadedServer
+ + ModelMBean handles null signatures
+ + Change JAAS impl to be more flexible on finding roles
+
+Jetty-5.1.4rc0 - 19 April 2005
+ + ServletHttpContext correctly calls super.doStop.
+ + HttpServer delegates component handling to Container.
+ + Allow ServletHandler in normal HttpContext again.
+ + Stop start.jar putting current directory on classpath.
+ + More protection from null classloaders.
+ + Turn off web.xml validation for JBoss.
+
+Jetty-5.1.3 - 7 April 2005
+ + Some minor code janitorial services
+
+Jetty-4.2.24 - 7 April 2005 
+
+Jetty-5.1.3rc4 - 31 March 2005
+ + Moved servlet request wrapping to enterContextScope for geronimo security
+ + refixed / mapping for filters
+ + Allow XmlConfiguration to start with no object.
+ + updated to mx4j 3.0.1
+ + rework InitialContextFactory to use static 'default' namespace
+ + make java:comp/env immutable for webapps as per J2EE spec
+
+Jetty-5.1.3rc3 - 20 March 2005
+ + removed accidental enablement of DEBUG for JettyPlus jndi in log4j.properties
+ + fixed "No getter or setter found" mbean errors
+
+Jetty-5.1.3rc2 - 16 March 2005
+ + Updated JSR154Filter for ERROR dispatch
+ + Fixed context to _context refactory error
+
+Jetty-5.1.3rc1 - 13 March 2005
+ + Fixed typo in context-param handling.
+ + update to demo site look and feel.
+ + Fixed principal naming in FormAuthenticator
+ + JettyPlus updated to JOTM 2.0.5, XAPool 1.4.2
+
+Jetty-4.2.24rc1 
+ + Fixed principal naming in FormAuthenticator
+
+Jetty-5.1.3rc0 - 8 March 2005
+ + Flush filter chain caches on servlet/filter change
+ + Fixed rollover filename format bug
+ + Fixed JSR154 error dispatch with explicit pass of type.
+ + Allow system and server classes to be configured for context loader.
+ + IOException if EOF read during chunk.
+ + Fixed HTAccess crypt salt handling.
+ + Added simple xpath support to XmlParser
+ + Added TagLibConfiguration to search for listeners in TLDs.
+ + Added SslListener for 1.4 JSSE API.
+ + Fixed moderate load preventing ThreadPool shrinking.
+ + Added logCookie and logLatency support to NCSARequestLog
+ + Added new JAAS callback to allow extra login form fields in authentication
+
+Jetty-4.2.24rc0 - 8 March 2005
+ + Back ported Jetty 5 ThreadedServer and ThreadPool
+ + Added logCookie and logLatency support to NCSARequestLog
+
+Jetty-5.1.2 - 18 January 2005
+ + Added id and ref support to XmlConfiguration
+ + Cleaned up AbstractSessionManager synchronization.
+ + Fixed potential concurrent login problem with JAAS
+ + Apply patch #1103953
+
+Jetty-4.2.23 - 16 January 2005
+ + Cleaned up AbstractSessionManager synchronization.
+ + Fixed potential concurrent login problem with JAAS
+
+Jetty-5.1.2pre0 - 22 December 2004
+ + Fixed case of Cookie parameters
+ + Support Secure and HttpOnly in session cookies
+ + Modified useRequestedID handling to only use IDs from other contexts
+ + Added global invalidation to AbstractSessionManager
+ + UnavailableException handling from handle
+ + Fixed suffix filters
+
+Jetty-4.2.23RC0 - 17 December 2004
+ + LineInput handles readers with small internal buffer
+ + Added LogStream to capture stderr and stdout to logging
+ + Support Secure and HttpOnly in session cookies
+ + Build unsealed jars
+
+Jetty-5.1.1 - 1 December 2004
+
+Jetty-5.1.1RC1 
+ + Some minor findbugs code cleanups
+ + Made more WebApplicationHandle configuration methods public.
+ + Fixed ordering of filters with multiple interleaved mappings.
+ + Allow double // within URIs
+ + Applied patch for MD5 hashed credentials for MD5
+
+Jetty-5.1.1RC0 - 17 November 2004
+ + fix for adding recognized EventListeners
+ + fix commons logging imports to IbmJsseListener
+ + added new contributed shell start/stop script
+ + excluded ErrorPageHandler from standard build in extra/jdk1.2 build
+
+Jetty-5.1.0 - 14 November 2004
+
+Jetty-5.1.RC1 - 24 October 2004
+ + Allow JSSE listener to be just confidential or just integral.
+ + Fixed NPE for null contenttype
+ + improved clean targets
+ + when committed setHeader is a noop rather than IllegalStateException 
+ + Partially flush writers on every write so content length can be detected.
+ + Build unsealed jars
+ + default / mapping does not apply to Filters
+ + many minor cleanups suggested from figbug utility
+ + Allow multiple accepting threads
+
+Jetty-5.1.RC0 - 11 October 2004
+ + Fixed many minor issues from J2EE 1.4 TCK testing
+See sf.net bugs 1031520 - 1032205
+ + Refactored, simplified and optimized HttpOutputStream
+ + LineInput handles readers with small internal buffer
+ + Added LogStream to capture stderr and stdout to logging
+ + Added filter chain cache
+ + Added JSR77 servlet statistic support
+ + Refactored webapp context configurations
+ + Added LifeCycle events and generic container.
+ + Upgraded to ant-1.6 for jasper
+ + Fixed HTAccessHandler
+ + JBoss 4.0.0 support
+
+Jetty-5.0.0 - 10 September 2004
+
+Jetty-5.0.RC4 - 5 September 2004
+ + Fixed configuration of URL alias checking
+ + JettyJBoss: Use realm-name from web.xml if present, otherwise use security-domain from jboss-web.xml
+
+Jetty-5.0.RC3 - 28 August 2004
+ + DIGEST auth handles qop, stale and maxNonceAge.
+ + Less verbose warning for non validating xml parser.
+ + fixed jaas logout for jetty-jboss
+ + fixed deployment of ejb-link elements in web.xml with jboss
+ + Update to jasper 5.0.27
+ + Added parameters for acceptQueueSize and lowResources level.
+ + Changed default URI encoding to UTF-8
+ + Fixes to work with java 1.5
+ + JettyPlus upgrade to XAPool 1.3.3. and HSQLDB 1.7.2
+ + JettyPlus addition of pluggable DataSources
+ + Always say close for HTTP/1.0 non keep alive.
+
+Jetty-4.2.22 - 23 August
+ + fixed jaas logout for jetty-jboss integration
+ + fixed deployment of ejb-link elements in web.xml for jboss
+ + Added parameters for acceptQueueSize and lowResources level.
+
+Jetty-5.0.RC2 - 2 July 2004
+ + Fixed DIGEST challenge delimiters
+ + HTAccess calls UnixCrypt correctly
+ + integrated jetty-jboss with jboss-3.2.4
+ + Error dispatchers are always GET requests.
+ + OPTIONS works for all URLs on default servlet
+ + add JMX support for JettyPlus
+ + add listing of java:comp/env for webapp with JMX
+ + make choice of override of JNDI ENC entries: config.xml or web.xml 
+ + Default servlet may use only pathInfo for resource
+ + Fixed session leak in j2ee
+ + Fixed no-role security constraint combination.
+ + Fix to use runas roles during servlet init and destroy
+ + Fixed JAAS logout
+ + HttpContext sendError for authentication errors
+
+Jetty-4.2.21 - 2 July 2004
+ + integrated jetty-jboss with jboss-3.2.4
+ + add JMX support for JettyPlus
+ + add listing of java:comp/env for webapp with JMX
+ + make choice of override of JNDI ENC entries: config.xml or web.xml 
+ + Fixed JAAS logout
+
+Jetty-5.0.RC1 - 24 May 2004
+ + Changed to apache 2.0 license
+ + added extra/etc/start-plus.config to set up main.class for jettyplus
+ + maxFormContentLength may be unlimited with <0 value
+ + Fixed HTTP tunnel timeout setting.
+ + Improved handling of exception from servlet init.
+ + FORM auth redirects to context on a re-auth
+ + Handle multiple virutal hosts from JBoss 3.2.4RC2
+
+Jetty-4.2.20 - 22 May 2004
+ + maxFormContentLength may be unlimited with <0 value
+ + Fixed HTTP tunnel timeout setting.
+ + Improved handling of exception from servlet init.
+ + FORM auth redirects to context on a re-auth
+
+Jetty-5.0.0RC0 - 7 April 2004
+ + Updated JettyPlus to JOTM 1.4.3 (carol-1.5.2, xapool-1.3.1)
+ + ServletContext attributes wrap HttpContext attributes.
+ + Factored out XML based config from WebApplicationContext
+ + Improved RequestLog performance
+ + Fixed j2se 1.3 problem with HttpFields
+ + Default servlet respectes servlet path
+ + Fixed setCharacterEncoding for parameters.
+ + Fixed DOS problem
+ + Worked around bad jboss URL handler in XMLParser
+ + Forced close of connections over stop/start
+ + ProxiedFor field support added to NCSARequestLog
+ + Fixed Default servlet for non empty servlet paths
+ + Updated mx4j to V2
+ + Updated jasper to 5.0.19
+ + Changed dist naming convention to lowercase
+
+Jetty-4.2.20RC0 - 7 April 2004
+ + Worked around bad jboss URL handler in XMLParser
+ + Forced close of connections over stop/start
+ + HttpFields protected headers
+ + ProxiedFor field support added to NCSARequestLog
+ + Fixed Default servlet for non empty servlet paths
+ + Changed dist naming convention to lowercase
+
+Jetty-4.2.19 - 19 Mar 2004
+ + Fixed DOS attack problem
+
+Jetty-5.0.beta2 - 12 Feb 2004
+ + Added skeleton JMX MBean for jetty plus
+ + Fixed HEAD with empty chunk bug.
+ + Fixed jetty.home/work handling
+ + Fixed setDate thread safety
+ + Fixed SessionManager init
+ + Improved low thread handling
+ + FileResource better handles non sun JVM
+ + Monitor closes socket before exit
+ + Updated to Japser 5.0.16
+ + RequestDispatcher uses request encoding for query params
+ + Fixed busy loop in threadpool run
+ + Reorganized ServletHolder init
+ + Added log4j context repository to jettyplus
+ + NPE guard for no-listener junit deployment
+ + Added experimental NIO listeners again.
+ + fixed filter dispatch configuration.
+ + fixed lazy authentication with FORMs
+ 
+Jetty-4.2.18 - 1 Mar 2004
+ + Added log4j context repository to jettyplus
+ + NPE guard for no-listener junit deployment
+ + Improved log performance
+ + Fixed j2se 1.3 problem with HttpFields
+ + Suppress some more IOExceptions
+ + Default servlet respectes servlet path
+
+Jetty-4.2.17 - 1 Feb 2004
+ + Fixed busy loop in threadpool run  
+ + Reorganized ServletHolder init
+
+Jetty-4.2.16 - 30 Jan 2004
+ + Fixed setDate multi-cpu race
+ + Improved low thread handling
+ + FileResource better handles non sun JVM
+ + Fixed HttpTunnel for JDK 1.2
+ + Monitor closes socket before exit
+ + RequestDispatcher uses request encoding for query params
+ + Update jasper to 4.1.29
+
+Jetty-5.0.beta1 - 24 December 2003
+ + SecurityConstraints not reset by stop() on custom context
+ + Fixed UnixCrypt handling in HTAccessHandler
+ + Added patch for JBoss realm single sign on
+ + Reorganized FAQ
+ + Env variables for CGI
+ + Removed support for old JBoss clustering
+
+Jetty-4.2.15 - 24 December 2003
+ + SecurityConstraints not reset by stop() on custom context
+ + Fixed UnixCrypt handling in HTAccessHandler
+ + Added patch for JBoss realm single sign on
+ + Environment variables for CGI
+ + Removed support for old JBoss clustering
+                                                                                             
+Jetty-5.0.beta0 - 22 November 2003
+ + Removed support for HTTP trailers
+ + PathMap uses own Map.Entry impl for IBM JVMs 
+ + Use ${jetty.home}/work or WEB-INF/work for temp directories if present
+ + Protect ThreadPool.run() from interrupted exceptions
+ + Added org.mortbay.http.ErrorHandler for error pages.
+ + Fixed init race in HttpFields cache
+ + Allow per listener handlers
+ + Added MsieSslHandler to handle browsers that don't grok persistent SSL (msie 5)
+ + Respect content length when decoding form content.
+ + JBoss integration uses writer rather than stream for XML config handling
+ + Expire pages that contain set-cookie as per RFC2109 recommendation
+ + Updated jasper to 5.0.14beta
+ + Removed the CMR/CMP distributed session implementation
+
+Jetty-4.2.15rc0 - 22 November 2003
+ + PathMap uses own Map.Entry impl for IBM JVMs 
+ + Race in HttpFields cache
+ + Use ${jetty.home}/work or WEB-INF/work for temp directories if present
+ + Protect ThreadPool.run() from interrupted exceptions
+ + Added org.mortbay.http.ErrorHandler for error pages.
+ + JsseListener checks UserAgent for browsers that can't grok persistent SSL (msie5)
+ + Removed the CMR/CMP distributed session implementation
+
+Jetty-4.2.14 - 04 November 2003
+ + respect content length when decoding form content.
+ + JBoss integration uses writer rather than stream for XML config handling
+ + Fixed NPE in SSO
+ + Expire pages that contain set-cookie as per RFC2109 recommendation
+
+Jetty-5.0.alpha3 - 19 October 2003
+ + Reworked Dispatcher to better support cross context sessions.
+ + Use File.toURI().toURL() when jdk 1.2 alternative is available.
+ + Priority added to ThreadPool
+ + replaced win32 service with http://wrapper.tanukisoftware.org
+ + FileClassPath derived from walk of classloader hierarchy.
+ + Implemented security constraint combinations
+ + Set TransactionManager on JettyPlus datasources and pools
+ + Fixed null pointer if no sevices configured for JettyPlus
+ + Updated jasper and examples to 5.0.12
+ + Lazy authentication if no auth constraint.
+ + Restore servlet handler after dispatch
+ + Allow customization of HttpConnections
+ + Failed requests excluded from duration stats
+
+Jetty-4.2.14RC1 - 19 October 2003
+ + Reworked Dispatcher to better support cross context sessions.
+ + Added UserRealm.logout and arrange for form auth  
+ + Allow customization of HttpConnections
+ + Failed requests excluded from 
+
+Jetty-4.2.14RC0 - 7 October 2003
+ + Correctly setup context classloader in cross context dispatch.
+ + Put a semi busy loop into proxy tunnels for IE problems
+ + Fixed handling of error pages for IO and Servlet exceptions
+ + updated extra/j2ee to jboss 3.2.1+
+ + Use File.toURI().toURL() when jdk 1.2 alternative is available.
+ + cookie timestamps are in GMT
+ + Priority on ThreadedServer
+ + replaced win32 service with http://wrapper.tanukisoftware.org
+ + Build fileclasspath from a walk of the classloaders
+ + Set TransactionManager on JettyPlus datasources and pools
+ + Fixed null pointer if no sevices configured for JettyPlus
+ + Fixed comments with embedded double dashes on jettyplus.xml file
+
+Jetty-5.0.alpha2 - 19 September 2003
+ + Use commons logging.
+ + Use log4j if extra is present.
+ + Improved JMX start.
+ + Update jakarta examples
+ + Correctly setup context classloader in cross context dispatch.
+ + Turn off validation without non-xerces errors
+ + minor doco updates.
+ + moved mailing lists to sourceforge.
+ + Put a semi busy loop into proxy tunnels for IE problems
+ + MultipartRequest supports multi value headers.
+ + XML entity resolution uses URLs not Resources
+ + Implemented ServletRequestListeners as optional filter.
+ + Moved error page mechanism to be webapp only.
+ + Fixed error page handling of IO and Servlet exceptions.
+
+Jetty-5.0.alpha1 - 12 August 2003
+ + Switched to mx4j
+ + Improve combinations of Security Constraints
+ + Implemented locale encoding mapping.
+ + Synced with 4.2.12
+ + Updated to Jasper 5.0.7
+ + Server javadoc from war
+
+Jetty-5.0.alpha0 - 16 Jul 2003
+ + Compiled against 2.4 servlet spec.
+ + Implemented remote/local addr/port methods
+ + Updated authentication so that a normal Principal is used.
+ + updated to jasper 5.0.3
+ + Implemented setCharaterEncoding 
+ + Implemented filter-mapping <dispatcher> element
+ + Implemented Dispatcher forward attributes.
+
+Jetty-4.2.12 - 12 August 2003
+ + Restore max inactive interval for session manager
+ + Removed protection of org.mortbay.http attributes
+ + Fixed parameter ordering for a forward request.
+ + Fixed up HTAccessHandler
+ + Improved error messages from ProxyHandler
+ + Added missing S to some OPTIONS strings
+ + Added open method to threaded server.
+ + FORMAuthenticator does 403 with empty error page.
+ + Fixed MIME types for chemicals
+ + Padding for IE in RootNotFoundHandler
+
+Jetty-4.2.11 - 12 July 2003
+ + Fixed race in servlet initialization code.
+ + Cookie params all in lower case.
+ + Simplified AJP13 connection handling. 
+ + Prevent AJP13 from reordering query.
+ + Support separate Monitor class for start
+ + Branched for Jetty 5 development.
+ 
+Jetty-4.2.10 - 7 July 2003
+ + Updates to JettyPlus documentation
+ + Updates to Jetty tutorial for start.jar, jmx etc
+
+Jetty-4.2.10pre2 - 4 July 2003
+ + Improvement to JettyPlus config of datasources and connection pools
+ + Addition of mail service for JettyPlus
+ + Move to Service-based architecture for JettyPlus features
+ + Re-implementation of JNDI
+ + Many improvements in JettyPlus java:comp handling
+ + Allow multiple security-role-ref elements per servlet.
+ + Handle Proxy-Connection better
+ + Cleaned up alias handling.
+ + Confidential redirection includes query
+ + handle multiple security role references
+ + Fixed cookie handling for old cookies and safari
+ + Restricted ports in ProxyHandler.
+ + URI always encodes %
+ + Session statistics
+ + XmlConfiguration can get/set fields.
+
+Jetty-4.2.10pre1 - 2 June 2003
+ + Fixed JSP code visibility problem introduced in Jetty-4.2.10pre0
+ + Added stop.jar
+ + Added SSO implementation for FORM authentication.
+ + WebApplicationContext does not reassign defaults descriptor value.
+ + Fixed AJP13 protocol so that request/response header enums are correct.
+ + Fixed form auth success redirect after retry, introduced in 4.2.9rc1
+ + Trace support is now optional (in AbstractHttpHandler).
+ + Deprecated forced chunking.
+ + Form authentication remembers URL over 403
+ + ProxyHandler has improved test for request content
+ + Removed support of org.mortbay.http.User role.
+ + Fixed problem with shared session for inter context dispatching.
+
+Jetty-4.2.10pre0 - 5 May 2003
+ + Moved Log4JLogSink into JettyPlus
+ + Added ability to override jetty startup class by using -Djetty.server on runline
+ + Incorporate JettyPlus jotm etc into build.
+ + Massive reorg of the CVS tree.
+ + Incorporate jetty extra and plus into build
+ + Integrate with JAAS
+ + Apply the append flag of RolloverFileOutputStream constructor.
+ + RolloverFileOutputStream manages Rollover thread.
+ + New look and feel for www site.
+ + Fixed table refs in JDBCUserRealm.
+ + Allow params in form auth URLs
+ + Updated to jasper jars from tomcat 4.1.24
+ + Allow query params in error page URL.
+ + ProxyHandler checks black and white lists for Connect.
+ + Merge multivalued parameters in dispatcher.
+ + Fixed CRLF bug in MultiPartRequest
+ + Warn if max form content size is reached.
+ + getAuthType returns CLIENT_CERT instead of CLIENT-CERT.
+ + getAuthType maps the HttpServletRequest final strings.
+ + FORM Authentication is serializable for session distribution.
+
+Jetty-4.2.9 - 19 March 2003
+ + Conditional headers check after /dir to /dir/ redirection.
+
+Jetty-4.2.9rc2 - 16 March 2003
+ + Fixed build.xml for source release
+ + Made rfc2068 PUT/POST Continues support optional.
+ + Defaults descriptor has context classloader set.
+ + Allow dispatch to j_security_check
+ + Added X-Forwarded-For header in ProxyHandler
+ + Updated included jmx jars
+
+Jetty-4.2.9rc1 - 6 March 2003
+ + Work around URLClassloader not handling leading /
+ + Dump servlet can load resources for testing now.
+ + Added trust manager support to SunJsseListener.
+ + Added support for client certs to AJP13.
+ + Cleaned up includes
+ + Removed checking for single valued headers.
+ + Optional 2.4 behaviour for sessionDestroyed notification.
+ + Stop proxy url from doing user interaction.
+ + Turn request log buffering off by default.
+ + Reduced default context cache sizes (Total 1MB file 100KB).
+ + ProxyHandler has black and white host list.
+ + Added requestlog to HttpContext.
+ + Allow delegated creation of WebApplication derivations.
+ + Check Data contraints before Auth constraints
+
+Jetty-4.2.8_01 - 18 February 2003
+ + Patched first release of 4.2.8 with correct version number
+ + Fixed CGI servlet to handle multiple headers.
+ + Added a SetResponseHeadersHandler, can set P3P headers etc.
+ + ProxyHandler can handle multiple cookies.
+ + Fixed AdminServlet to handle changed getServletPath better.
+ + Default servlet can have own resourceBase.
+ + Rolled back SocketChannelListener to 4.2.5 version
+ + Added option to resolve remote hostnames.  Defaults to off.
+ + Added MBeans for Servlets and Filters
+ + Moved ProxyHandler to the src1.4 tree
+
+Jetty-4.2.7 - 4 February 2003
+ + Upgraded to JSSE 1.0.3_01 to fix security problem.
+ + Fixed proxy tunnel for non persistent connections.
+ + Relative sendRedirect handles trailing / correctly.
+ + Changed PathMap to conform to / getServletPath handling.
+
+Jetty-4.2.6 - 24 January 2003
+ + Improved synchronization on AbstractSessionManager.
+ + Allow AJP13 buffers to be resized.
+ + Fixed LineInput problem with expanded buffers.
+ + ClientCertAuthentication updates request.
+ + Fixed rel sendRedirects for root context.
+ + Added HttpContext.setHosts to restrict context by real interface.
+ + Added MBeans for session managers
+ + Improved SocketChannelListener contributed.
+ + Added version to HttpServerMBean.
+
+Jetty-4.2.5 - 14 January 2003
+ + Fixed pathParam bug for ;jsessionid
+ + Don't process conditional headers and ranges for includes
+ + Added Log4jSink in the contrib directory.
+ + Fixed requestedSessionId null bug.
+
+Jetty-4.2.4 - 4 January 2003
+ + Fixed stop/start handling of servlet context
+ + Reuse empty LogSink slots.
+ + HTAccessHandler checks realm as well as htpassword.
+ + Clear context listeners after stop.
+ + Clear context attributes after stop.
+ + Use requestedSessionId as default session ID.
+ + Added MBeans for handlers
+ + Upgraded jasper to 4.1.18
+
+Jetty-4.2.4rc0 - 12 December 2002
+ + Simplified ThreadedServer
+ + Use ThreadLocals for ByteArrayPool to avoid synchronization.
+ + Use Version to reset HttpFields
+ + Cheap clear for HttpFields
+ + Fixed setBufferSize NPE.
+ + Cleaned up some unused listener throws.
+ + Handle chunked form data.
+ + Allow empty host header.
+ + Avoid optional 100 continues.
+ + Limit form content size.
+ + Handle = in param values.
+ + Added HttpContext.flushCache
+ + Configurable root context.
+ + RootNotFoundHandler to help when no context found.
+ + Update jasper to 4.1.16beta
+ + Fixed dir listing from jars.
+ + Dir listings in UTF8
+ + Character encoding handling for GET requests.
+ + Removed container transfer encoding handling.
+ + Improved setBufferSize handling
+ + Code logs objects rather than strings.
+ + Better access to session manager.
+ + Fixed isSecure and getScheme for SSL over AJP13
+ + Improved ProxyHandler to the point is works well for non SSL.
+ + Implemented RFC2817 CONNECT in ProxyHandler
+ + Added gzip content encoding support to Default and ResourceHandler
+
+Jetty-4.2.3 - 2 December 2002
+ + Removed aggressive threadpool shrinkage to avoid deadlock on SMP machines.
+ + Fixed some typos
+ + Added links to Jetty Powered page
+ + Clean up of ThreadedServer.stop()
+ + Updated bat scripts
+ + Added PKCS12Import class to import PKCS12 key directly
+ + removed old HttpContext.setDirAllowed()
+ + added main() to org.mortbay.http.Version
+ + Check form authentication config for leading /
+ + Cleaner servlet stop to avoid extra synchronization on handle
+ + org.mortbay.http.HttpContext.FileClassPathAttribute
+
+Jetty-4.2.2 - 20 November 2002
+ + Fixed sendRedirect for non http URLS
+ + Fixed URI query recycling for persistent connections
+ + Fixed handling of empty headers
+ + Added EOFException to reduce log verbosity on closed connections.
+ + Avoided bad buffer status after closed connection.
+
+Jetty-4.2.1 - 18 November 2002
+ + Fixed bad optimization in UrlEncoding
+ + Re-enabled UrlEncoding test harnesses
+
+Jetty-4.2.0 - 16 November 2002
+ + Fixed AJP13 buffer size.
+ + Fixed remove listener bug.
+ + Fixed include of Invoker servlet.
+ + Restrict 304 responses to seconds time resolution.
+ + Use IE date formatting for speed.
+ + Removed jasper source and just include jars from 4.1.12
+ + Worked around JVM1.3 bug for JSPs
+ + Lowercase jsessionid for URLs only.
+ + Made NCSARequestLog easier to extend.
+ + Added definitions for RFC2518 WebDav response codes.
+ + Removed remaining non portable getBytes() calls
+ + Added upload demo to dump servlet.
+ + Many more optimizations.
+
+Jetty-4.1.4 - 16 November
+ + Fixed ContextLoader parent delegation bug
+ + Fixed remove SocketListener bug.
+ + Fixed Invoker servlet for RD.include
+ + Use IE date formatting for last-modified efficiency
+ + Last modified handling uses second resolution.
+ + Made NCSARequestLog simpler to extend.
+
+Jetty-4.2.0rc1 - 2 November 2002
+ + Support default mime mapping defined by *
+ + Recycling of HttpFields class.
+ + Renamed Filter application methods.
+ + Fixed firstWrite after commit.
+ + Fixed ContextLoader parent delegation bug.
+ + Fixed problem setting the size of chunked buffers.
+ + Removed unused Servlet and Servlet-Engine headers.
+ + Fixed servletpath on invoker for named servlets.
+ + Fixed directory resource bug in JarFileResource.
+ + Improved handling of 2 byte encoded characters within forms.
+
+Jetty-4.2.0rc0 - 24 October 2002
+ + Greg's birthday release!
+ + Added embedded iso8859 writer to HttpOutputStream.
+ + Removed duplicate classes from jar
+ + Fixed RolloverFileOutputStream without date.
+ + Fixed SessionManager initialization
+ + Added authenticator to admin.xml
+ + Fixed Session timeout NPE.
+
+ Jetty-4.1.3 - 24 October 2002
+ + Fixed RolloverFileOutputStream without date.
+ + Fixed SessionManager initialization
+ + Added authenticator to admin.xml
+ + Fixed Session timeout NPE.
+
+Jetty-4.0.6 - 24 October 2002
+ + Clear interrupted status in ThreadPool
+ + Fixed forward query string handling
+ + fixed forward attribute handling for jsp-file servlets
+ + Fixed setCharacterEncoding to work with getReader
+ + Fixed handling of relative sendRedirect after forward.
+ + Fixed virtual hosts temp directories.
+
+Jetty-4.2.0beta0 - 13 October 2002
+ + New ThreadPool implementation.
+ + New Buffering implementation.
+ + New AJP13 implementation.
+ + Removed Dispatcher dependancy on ServletHttpContext
+ + getNamedDispatcher(null) returns containers default servlet.
+ + unquote charset in content type
+ + Stop/Start filters in declaration order.
+ + Use "standard" names for default,jsp & invoker servlets.
+ + Fixed caching of directories to avoid shared buffers.
+ + Fixed bad log dir detection
+ + Fix Session invalidation bug
+ + Build without jmx
+ + 404 instead of 403 for WEB-INF requests
+ + FORM authentication sets 403 error page
+ + Allow %3B encoded ; in URLs
+ + Allow anonymous realm
+ + Update jasper to 4.1.12 tag
+
+Jetty-4.1.2 - 13 October 2002
+ + Some AJP13 optimizations.
+ + getNamedDispatcher(null) returns containers default servlet.
+ + unquote charset in content type
+ + Stop/Start filters in declaration order.
+ + Use "standard" names for default,jsp & invoker servlets.
+ + Fixed caching of directories to avoid shared buffers.
+ + Fixed bad log dir detection
+ + Fix Session invalidation bug
+ + Build without jmx
+ + 404 instead of 403 for WEB-INF requests
+ + FORM authentication sets 403 error page
+ + Allow %3B encoded ; in URLs
+ + Allow anonymous realm
+ + Update jasper to 4.1.12 tag
+
+Jetty-4.1.1 - 30 September 2002
+ + Fixed client scripting vulnerability with jasper2.
+ + Merged LimitedNCSARequestLog into NCSARequestLog
+ + Fixed space in resource name handling for jdk1.4
+ + Moved launcher/src to src/org/mortbay/start
+ + Fixed infinite recursion in JDBCUserRealm
+ + Avoid setting sotimeout for optimization.
+ + String comparison of If-Modified-Since headers.
+ + Touch files when expanding jars
+ + Deprecated maxReadTime.
+ + Cache directory listings.
+
+Jetty-4.1.0 - 22 September 2002
+ + Fixed CGI+windows security hole.
+ + Fixed AJP13 handling of mod_jk loadbalancing.
+ + Stop servlets in opposite order to start.
+ + NCSARequest log buffered default
+ + WEB-INF/classes before WEB-INF/lib
+ + Sorted directory listings.
+ + Handle unremovable tempdir.
+ + Context Initparams to control session cookie domain, path and age.
+ + ClientCertAuthenticator protected from null subjectDN
+ + Added LimitedNCSARequestLog
+ + Use javac -target 1.2 for normal classes
+
+Jetty-4.1.0RC6 - 14 September 2002
+ + Don't URL encode FileURLS.
+ + Improved HashUserRealm doco
+ + FormAuthenticator uses normal redirections now.
+ + Encode URLs of Authentication redirections.
+ + Added logon.jsp for no cookie form authentication.
+ + Extended Session API to pass request for jvmRoute handling
+ + Fixed problem with AJP 304 responses.
+ + Improved look and feel of demo
+ + Cleaned up old debug.
+ + Added redirect to welcome file option.
+
+Jetty-4.1.0RC5 - 8 September 2002
+ + AJP13Listener caught up with HttpConnection changes.
+ + Added commandPrefix init param to CGI
+ + More cleanup in ThreadPool for idle death.
+ + Improved errors for misconfigured realms.
+ + Implemented security-role-ref for isUserInRole.
+
+Jetty-4.1.0RC4 - 30 August 2002
+ + Included IbmJsseListener in the contrib directory.
+ + Updated jasper2 to 4.1.10 tag.
+ + Reverted to 302 for all redirections as all clients do not understand 303
+ + Created statsLock sync objects to avoid deadlock when stopping.
+
+Jetty-4.1.0RC3 - 28 August 2002
+ + Fixed security problem for suffix matching with trailing "/"
+ + addWebApplications encodes paths to allow for spaces in file names.
+ + Improved handling of PUT,DELETE & MOVE.
+ + Improved handling of path encoding in Resources for bad JVMs
+ + Added buffering to request log
+ + Created and integrated the Jetty Launcher
+ + Made Resource canonicalize it's base path for directories
+ + Allow WebApplicationHandler to be used with other handlers.
+ + Added defaults descriptor to addWebApplications.
+ + Allow FORM auth pages to be within security constraint.
+
+Jetty-4.1.0RC2 - 20 August 2002
+ + Conveninace setClassLoaderJava2Compliant method.
+ + Clear interrupted status in ThreadPool
+ + Fixed HttpFields cache overflow
+ + Improved ByteArrayPool to handle multiple sizes.
+ + Added HttpListener.bufferReserve
+ + Use system line separator for log files.
+ + Updated to Jasper2 (4_1_9 tag)
+ + Build ant, src and zip versions with the release
+
+Jetty-4.1.0RC1 - 11 August 2002
+ + Fixed forward query string handling
+ + Fixed setCharacterEncoding to work with getReader
+ + Fixed getContext to use canonical contextPathSpec
+ + Improved the return codes for PUT
+ + Made HttpServer serializable
+ + Updated international URI doco
+ + Updated jasper to CVS snapshot 200208011920
+ + Fixed forward to jsp-file servlet
+ + Fixed handling of relative sendRedirect after forward.
+
+Jetty-4.1.0RC0 - 31 July 2002
+ + Fixed getRealPath for packed war files.
+ + Changed URI default charset back to ISO_8859_1
+ + Restructured Password into Password and Credentials
+ + Added DigestAuthenticator
+ + Added link to a Jetty page in Korean.
+ + Added ExpiryHandler which can set a default Expires header.
+
+Jetty-4.0.5 - 31 July 2002
+ + Fixed getRealPath for packed war files.
+ + Reversed order of ServletContextListener.contextDestroyed calls
+ + Fixed getRequestURI for RD.forward to return new URI.
+
+Jetty-4.1.B1 - 19 July 2002
+ + Updated mini.http.jar target
+ + CGI Servlet, pass all HTTP headers through.
+ + CGI Servlet, catch and report program invocation failure status.
+ + CGI Servlet, fixed suffix mapping problem.
+ + CGI Servlet, set working directory for exec
+ + Support HTTP/0.9 requests again
+ + Reversed order of ServletContextListener.contextDestroyed calls
+ + Moved dynamic servlet handling to Invoker servlet.
+ + Moved webapp resource handling to Default servlet.
+ + Sessions create attribute map lazily.
+ + Added PUT,DELETE,MOVE support to webapps.
+ + Added 2.4 Filter dispatching support.
+
+Jetty-3.1.9 - 15 July 2002
+ + Allow doHead requests to be forwarded.
+ + Fixed race in ThreadPool for minThreads <= CPUs
+
+Jetty-4.1.B0 - 13 July 2002
+ + Added work around of JDK1.4 bug with NIO listener
+ + Moved 3rd party jars to $JETTY_HOME/ext
+ + Fixed ThreadPool bug when minThreads <= CPUs
+ + close rather than disable stream after forward
+ + Allow filter init to access servlet context methods.
+ + Keep notFoundContext out of context mapping lists.
+ + mod_jk FAQ
+ + Fixed close problem with load balancer.
+ + Stopped RD.includes closing response.
+ + RD.forward changes getRequestURI.
+ + NCSARequestLog can log to stderr
+
+Jetty-4.1.D2 - 24 June 2002
+ + Support trusted external authenticators.
+ + Moved jmx classes from JettyExtra to here.
+ + Set contextloader during webapplicationcontext.start
+ + Added AJP13 listener for apache integration.
+ + Fixed ChunkableOutputStream close propagation
+ + Better recycling of HttpRequests.
+ + Protect session.getAttributeNames from concurrent modifications.
+ + Allow comma separated cookies and headers
+ + Back out Don't chunk 30x empty responses.
+ + Conditional header tested against welcome file not directory.
+ + Improved ThreadedServer stopping on bad networks
+ + Use ThreadLocals to avoid unwrapping in Dispatcher.
+
+Jetty-4.0.4 - 23 June 2002
+ + Back out change: Don't chunk 30x empty responses.
+ + Conditional header tested against welcome file not directory.
+ + Improved ThreadedServer stopping on bad networks
+
+Jetty-4.0.3 - 20 June 2002
+ + WebapplicationContext.start sets context loader
+ + Fixed close propagation of on-chunked output streams
+ + Force security disassociation.
+ + Better recycling of HttpRequests.
+ + Protect session.getAttributeNames from concurrent modifications.
+ + Allow session manager to be initialized when set.
+ + Fixed japanese locale
+ + Allow comma separated cookies and headers
+
+Jetty-4.1.D1 - 8 June 2002
+ + Recycle servlet requests and responses
+ + Added simple buffer pool.
+ + Reworked output buffering to keep constant sized buffers.
+ + Don't chunk 30x empty responses.
+ + Fixed "" contextPaths in Dispatcher.
+ + Removed race for the starting of session scavaging
+ + Fixed /foo/../bar// bug in canonical path.
+ + Merged ResourceBase and SecurityBase into HttpContext
+
+Jetty-4.0.2 - 6 June 2002
+ + Fixed web.dtd references.
+ + Fixed handler/context start order.
+ + Added OptimizeIt plug
+ + Fixed /foo/../bar// bug in canonical path.
+ + Don't chunk 30x empty responses.
+ + Fixed "" contextPaths in Dispatcher.
+ + Removed race for the starting of session scavaging
+
+Jetty-3.1.8 - 6 June 2002
+ + Made SecurityConstraint.addRole() require authentication.
+ + Fixed singled threaded dynamic servlets
+ + Fixed no slash context redirection.
+ + Fixed /foo/../bar// bug in canonical path.
+
+Jetty-4.1.D0 - 5 June 2002
+ + The 4.1 Series started looking for even more performance
+within the 2.3 specification.
+ + Removed the HttpMessage facade mechanism
+ + BRAND NEW WebApplicationHandler & WebApplicationContext
+ + Added TypeUtil to reduce Integer creation.
+ + General clean up of the API for for MBean getters/setters.
+ + Experimental CLIENT-CERT Authenticator
+ + Restructured ResourceHandler into ResourceBase
+ + Fixed web.dtd references.
+ + Fixed handler/context start order.
+ + Added OptimizeIt plug.
+
+Jetty-4.0.1 - 22 May 2002
+ + Fixed contextclassloader on ServletContextEvents.
+ + Support graceful stopping of context and server.
+ + Fixed "null" return from getRealPath
+ + OutputStreamLogSink config improvements
+ + Updated jasper to 16 May snapshot
+
+Jetty-4.0.1RC2 - 14 May 2002
+ + Better error for jre1.3 with 1.4 classes
+ + Cleaned up RD query string regeneration.
+ + 3DES Keylength was being reported as 0. Now reports 168 bits.
+ + Implemented the run-as servlet tag.
+ + Added confidential and integral redirections to HttpListener
+ + Fixed ServletResponse.reset() to resetBuffer.
+
+Jetty-4.0.1RC1 - 29 April 2002
+ + Improved flushing of chunked responses
+ + Better handling if no realm configured.
+ + Expand ByteBuffer full limit with capacity.
+ + Fixed double filtering of welcome files.
+ + Fixed FORM authentication auth of login page bug.
+ + Fixed setTempDirectory creation bug
+ + Avoid flushes during RequestDispatcher.includes
+
+Jetty-4.0.1RC0 - 18 April 2002
+ + Updated Jasper to CVS snapshot from Apr 18 18:50:59 BST 2002
+ + Pass pathParams via welcome file forward for jsessionid
+ + Extended facade interfaces to HttpResponse.sendError
+ + Moved basic auth handling to HttpRequest
+ + AbstractSessionManager sets contextClassLoader for scavanging
+ + Set thread context classloader for webapp load-on-startup inits
+ + Added extract arg to addWebApplications
+ + Fixed delayed response bug:
+Stopped HttpConnection consuming input from timedout connection.
+ + DTD allows static "Get" and "Set" methods to be invoked.
+
+Jetty-4.0.0 - 22 March 2002
+ + Updated tutorial configure version
+ + Added IPAddressHandler for IP restrictions
+ + Updated contributors.
+ + Minor documentation updates.
+ + Jetty.sh cygwin support
+
+Jetty-4.0.RC3 - 20 March 2002
+ + Fixed ZZZ offset format to +/-HHMM
+ + Updated history
+ + JDBCUserRealm instantiates JDBC driver
+ + ContextInitialized notified before load-on-startup servlets.
+ + Suppress WriterOutputStream warning.
+ + Changed html attribute order for mozilla quirk.
+
+Jetty-4.0.RC2 - 12 March 2002
+ + Fixed security constraint problem with //
+ + Fixed version for String XmlConfigurations
+ + Fixed empty referrer in NCSA log.
+ + Dont try to extract directories
+ + Added experimental nio SocketChannelListener
+ + Added skeleton load balancer
+ + Fixed column name in JDBCUserRealm
+ + Remove last of the Class.forName calls.
+ + Removed redundant sessionID check.
+ + Security FAQ
+ + Disabled the Password EXEC mechanism by default
+
+Jetty-3.1.7 - 12 Mar 2002
+ + Fixed security problem with constraints being bypassed with //
+in URLs
+
+Jetty-4.0.RC1 - 06 March 2002
+ + Added ContentEncodingHandler for compression.
+ + Fixed filter vs forward bug.
+ + Improved efficiency of quality list handling
+ + Simplified filter API to chunkable streams
+ + XmlParser is validating by default. use o.m.x.XmlParser.NotValidating property to change.
+ + contextDestroyed event sent before destruction.
+ + Minor changes to make HttpServer work on J2ME CVM
+ + Warn if jdk 1.4 classes used on JVM <1.4
+ + WebApplication will use ContextLoader even without WEB-INF directory.
+ + FileResource depends less on FilePermissions.
+ + Call response.flushBuffer after service to flush wrappers.
+ + Empty suffix for temp directory.
+ + Contributors list as an image to prevent SPAM!
+ + Fixed recursive DEBUG loop in Logging.
+ + Updated jetty.sh to always respect arguments.
+
+Jetty-3.1.6 - 28 Feb 2002
+ + Implemented 2.3 clarifications to security constraint semantics
+PLEASE REVIEW YOUR SECURITY CONSTRAINTS (see README).
+ + Empty suffix for temp directory.
+ + Fixed HttpFields remove bug
+ + Set Listeners default scheme
+ + LineInput can handle any sized marks
+ + HttpResponse.sendError makes a better attempt at finding an error page.
+ + Dispatcher.forward dispatches directly to ServletHolder to avoid
+premature exception handling.
+
+Jetty-4.0.B2 - 25 Feb 2002
+ + Minor Jasper updates
+ + Improve handling of unknown URL protocols.
+ + Improved default jetty.xml
+ + Adjust servlet facades for welcome redirection
+ + User / mapping rather than /* for servlet requests to static content
+ + Accept jetty-web.xml or web-jetty.xml in WEB-INF
+ + Added optional JDK 1.4 src tree
+ + o.m.u.Frame uses JDK1.4 stack frame handling
+ + Added LoggerLogSink to direct Jetty Logs to JDK1.4 Log.
+ + Start ServletHandler as part of the FilterHandler start.
+ + Simplified addWebApplication
+ + Added String constructor to XmlConfiguration.
+ + Added org.mortbay.http.JDBCUserRealm
+ + Init classloader for JspServlet
+ + Slightly more agressive eating unused input from non persistent connection.
+
+Jetty-4.0.B1 - 13 Feb 2002
+ + WriterOutputStream so JSPs can include static resources.
+ + Suppress error only for IOExceptions not derivitives.
+ + HttpConnection always eats unused bodies
+ + Merged HttpMessage and Message
+ + LineInput waits for LF after CF if seen CRLF before.
+ + Added setClassLoader and moved getFileClassPath to HttpContext
+ + Updated examples webapp from tomcat
+ + getRequestURI returns encoded path
+ + Servlet request destined for static content returns paths as default servlet
+
+Jetty-4.0.B0 - 4 Feb 2002
+ + Implemented 2.3 security constraint semantics
+PLEASE REVIEW YOUR SECURITY CONSTRAINTS (see README).
+ + Stop and remove NotFound context for HttpServer
+ + HttpContext destroy
+ + Release process builds JettyExtra
+ + Welcome files may be relative
+ + Fixed HttpFields remove bug
+ + Added Array element to XMLConfiguration
+ + Allow listener schemes to be set.
+ + Added index links to tutorial
+ + Renamed getHttpServers and added setAnonymous
+ + Updated crimson to 1.1.3
+ + Added hack for compat tests in watchdog for old tomcat stuff
+ + Added AbstractSessionManager
+ + Support Random Session IDs in HashSessionManager.
+ + Common handling of TRACE
+ + Updated tutorial and FAQ
+ + Reduce object count and add hash width to StringMap
+ + Factor out RolloverFileOutputStream from OutputStreamLogSink
+ + Remove request logSink and replace with RequestLog using
+RolloverFileOutputStream
+ + Handle special characters in resource file names better.
+ + Welcome file dispatch sets requestURI.
+ + Removed triggers from Code.
+
+Jetty-4.0.D4 - 14 Jan 2002
+ + Prevent output after forward
+ + Handle ServletRequestWrappers for Generic Servlets
+ + Improved handling of UnavailableException
+ + Extract WAR files to standard temp directory
+ + URI uses UTF8 for % encodings.
+ + Added BlueRibbon campaign.
+ + RequestDispatcher uses cached resources for include
+ + Improved HttpResponsse.sendError error page matching.
+ + Fixed noaccess auth demo.
+ + FORM auth caches UserPrincipal
+ + Added isAuthenticated to UserPrincipal
+
+Jetty-4.0.D3 - 31 Dec 2001
+ + Fixed cached filter wrapping.
+ + Fixed getLocale again
+ + Patch jasper to 20011229101000
+ + Removed limits on mark in LineInput.
+ + Corrected name to HTTP_REFERER in CGI Servlet.
+ + Fixed UrlEncoding for % + combination.
+ + Generalized temp file handling
+ + Fixed ContextLoader lib handling.
+ + DateCache handles misses better.
+ + HttpFields uses DateCache more.
+ + Moved admin port to 8081 to avoid JBuilder
+ + Made Frame members private and fixed test harness
+ + cookies with maxAge==0 expire on 1 jan 1970
+ + setCookie always has equals
+
+Jetty-3.1.5 - 11 Dec 2001
+ + setCookie always has equals for cookie value
+ + cookies with maxage==0 expired 1 jan 1970
+ + Fixed formatting of redirectURLs for NS4.08
+ + Fixed ChunableInputStream.resetStream bug.
+ + Ignore IO errors when trying to persist connections.
+ + Allow POSTs to static resources.
+ + stopJob/killStop in ThreadPool to improve stopping
+ThreadedServer on some platforms.
+ + Branched at Jetty_3_1
+
+Jetty-4.0.D2 - 2 Dec 2001
+ + Removed most of the old doco, which needs to be
+rewritten and added again.
+ + Restructured for demo and test hierarchies
+ + Fixed formatting of redirect URLs.
+ + Removed ForwardHandler.
+ + Removed Demo.java (until updated).
+ + Made the root context a webapplication.
+ + Moved demo docroot/servlets to demo directory
+ + added addWebApplications auto discovery
+ + Disabled last forwarding by setPath()
+ + Removed Request set methods (will be replaced)
+ + New event model to decouple from beans container.
+ + Better handling of charset in form encoding.
+ + Allow POSTs to static resources.
+ + Fixed ChunableInputStream.resetStream bug.
+ + Ignore IO errors when trying to persist connections.
+ + Allow POSTs to static resources.
+ + stopJob/killStop in ThreadPool to improve stopping
+ThreadedServer on some platforms.
+
+Jetty-4.0.D1 - 14 Nov 2001
+ + Fixed ServletHandler with no servlets
+ + Fixed bug with request dispatcher parameters
+ + New ContextLoader implementation.
+ + New Dispatcher implementation
+ + Added Context and Session Event Handling
+ + Added FilterHolder
+ + Added FilterHandler
+ + Changed HandlerContext to HttpContext
+ + Simplified ServletHandler
+ + Removed destroy methods
+ + Simplified MultiMap
+
+Jetty-4.0.D0 - 06 Nov 2001
+ + Branched from Jetty_3_1 == Jetty_3_1_4
+ + 2.3 Servlet API
+ + 1.2 JSP API
+ + Jasper from tomcat4
+ + Start SessionManager abstraction.
+ + Added examples webapp from tomcat4
+ + Branched at Jetty_3_1
+
+Jetty-3.1.4 - 06 Nov 2001
+ + Added RequestLogFormat to allow extensible request logs.
+ + Support the ZZZ timezone offset format in DateCache
+ + HTAccessHandler made stricter on misconfiguration
+ + Generate session unbind events on a context.stop()
+ + Default PathMap separator changed to ":,"
+ + PathMap now ignores paths after ; or ? characters.
+ + Remove old stuff from contrib that had been moved to extra
+ + getRealPath accepts \ URI separator on platforms using \ file separator.
+
+Jetty-3.1.3 - 26 Oct 2001
+ + Fix security problem with trailing special characters.
+Trailing %00 enabled JSP source to be viewed or other
+servlets to be bypassed.
+ + Fixed several problems with external role authentication.
+Role authentication in JBoss was not working correctly and
+there were possible object leaks. The fix required an API
+change to UserPrinciple and UserRealm.
+ + Allow a per context UserRealm instance.
+ + Upgraded JSSE to 1.0.2
+ + Improved FORM auth handling of role failure.
+ + Improved Jasper debug output.
+ + Improved ThreadedServer timeout defaults
+ + Fixed binary files in CVS
+ + Fixed Virtual hosts to case insensitive.
+ + PathMap spec separator changed from ',' to ':'. May be set with
+org.mortbay.http.PathMap.separators system property.
+ + Correct dispatch to error pages with javax attributes set.
+
+Jetty-3.1.2 - 13 Oct 2001
+ + Fixed double entry on PathMap.getMatches
+ + Fixed servlet handling of non session url params.
+ + Fixed attr handling in XmlParser.toString
+ + Fixed request log date formatting
+ + Fixed NotFoundHandler handling of unknown methods
+ + Fixed FORM Authentication username.
+ + Fixed authentication role handling in FORM auth.
+ + FORM authentication passes query params.
+ + Added short delay to shutdown hook for JVM bug.
+ + Added ServletHandler.sessionCount()
+ + Added run target to ant
+ + Changed 304 responses for Opera browser.
+ + Changed JSESSIONID to jsessionid
+ + Log OK state after thread low warnings.
+ + Changed unsatisfiable range warnings to debug.
+ + Further improvements in handling of shutdown.
+
+Jetty-3.1.1 - 27 Sep 2001
+ + Fixed jar manifest format - patched 28 Sep 2001
+ + Removed JDK 1.3 dependancy
+ + Fixed ServletRequest.getLocale().
+ + Removed incorrect warning for WEB-INF/lib jar files.
+ + Handle requestdispatcher during init.
+ + Use lowercase tags in html package to be XHTML-like.
+ + Correctly ignore auth-constraint descriptions.
+ + Reduced verbosity of bad URL errors from IIS virus attacks
+
+Jetty-3.1.0 - 21 Sep 2001
+ + Added long overdue Tutorial documentation.
+ + Improved some other documentation.
+ + Fix ResourceHandler cache invalidate.
+ + Fix ServletResponse.setLocale()
+ + Fix reuse of Resource
+ + Fix Jetty.bat for spaces.
+ + Fix .. handling in URI
+ + Fix REFFERER in CGI
+ + Fix FORM authentication on exact patterns
+ + Fix flush on stop bug in logs.
+ + Fix param reading on CGI servlet
+ + New simplified jetty.bat
+ + Improved closing of listeners.
+ + Optimized List creation
+ + Removed win32 service.exe
+ + Added HandlerContext.registerHost
+
+Jetty-3.1.rc9 - 02 Sep 2001
+ + Added bin/orgPackage.sh script to change package names.
+ + Changed to org.mortbay domain names.
+ + Form auth login and error pages relative to context path.
+ + Fixed handling of rel form authentication URLs
+ + Added support for Nonblocking listener.
+ + Added lowResourcePersistTimeMs for more graceful degradation when
+we run out of threads.
+ + Patched Jasper to 3.2.3.
+ + Added handlerContext.setClassPaths
+ + Fixed bug with non cookie sessions.
+ + Format cookies in HttpFields.
+
+Jetty-3.1.rc8 - 22 Aug 2001
+ + Support WEB-INF/web-jetty.xml configuration extension for webapps
+ + Allow per context log files.
+ + Updated sponsors page
+ + Added HttpServer statistics
+ + Don't add notfound context.
+ + Many major and minor optimizations:
+* ISO8859 conversion
+* Buffer allocation
+* URI pathAdd
+* StringMap
+* URI canonicalPath
+* OutputStreamLogSink replaces WriterLogSink
+ + Separation of URL params in HttpHandler API.
+ + Fixed handling of default mime types
+ + Allow contextpaths without leading /
+ + Removed race from dynamic servlet initialization.
+
+Jetty-3.1.rc7 - 9 Aug 2001
+ + Fix bug in sendRedirect for HTTP/1.1
+ + Added doco for Linux port redirection.
+ + Don't persist connections if low on threads.
+ + Added shutdown hooks to Jetty.Server to trap Ctl-C
+ + Fixed bug with session ID generation.
+ + Added FORM authentication.
+ + Remove old context path specs
+ + Added UML diagrams to Jetty architecture documentation.
+ + Use Enumerations to reduce conversions for servlet API.
+ + Optimized HttpField handling to reduce object creatiyon.
+ + ServletRequest SSL attributes in line with 2.2 and 2.3 specs.
+ + Dump Servlet displays cert chains
+ + Fixed redirect handling by the CGI Servlet.
+ + Fixed request.getPort for redirections from 80
+ + Added utility methods to ServletHandler for wrapping req/res pairs.
+ + Added method handling to HTAccessHandler.
+ + ServletResponse.sendRedirect puts URLs into absolute format.
+
+Jetty-3.1.rc6 - 10 Jul 2001
+ + Avoid script vulnerability in error pages.
+ + Close persistent HTTP/1.0 connections on missing Content-Length
+ + Use exec for jetty.sh run
+ + Improved SSL debugging information.
+ + KeyPairTool can now load cert chains.
+ + KeyPairTool is more robust to provider setup.
+ + Fixed bug in B64Code. Optimised B64Code.
+ + Added Client authentication to the JsseListener
+ + Fixed a problem with Netscape and the acrobat plugin.
+ + Improved debug output for IOExceptions.
+ + Updated to JSSE-1.0.2, giving full strength crypto.
+ + Win32 Service uses Jetty.Server instead of HttpServer.
+ + Added getResource to HandleContext.
+ + WebApps initialize resourceBase before start.
+ + Fixed XmlParser to handle xerces1.3 OK
+ + Added Get element to the XmlConfiguration class.
+ + Added Static calls to the XmlConfiguration class.
+ + Added debug and logging config example to demo.xml
+ + Moved mime types and encodings to property bundles.
+ + RequestDispatch.forward() uses normal HandlerContext.handle()
+path if possible.
+ + Cleaned up destroy handling of listeners and contexts.
+ + Removed getConfiguration from LifeCycleThread to avoid JMX clash.
+ + Cleaned up Win32 Service server creation.
+ + Moved gimp image files to Jetty3Extra
+
+Jetty-3.1.rc5 - 1 May 2001
+ + Added build target for mini.jetty.jar - see README.
+ + Major restructing of packages to separate servlet dependancies.
+  c.m.XML  - moved XML dependant classes from c.m.Util
+  c.m.HTTP - No servlet or XML dependant classes:
+  c.m.Jetty.Servlet - moved from c.m.HTTP.Handler.Servlet
+  c.m.Servlet - received some servlet dependant classes from HTTP.
+ + Added UnixCrypt support to c.m.U.Password
+ + Added HTaccessHandler to authenitcate against apache .htaccess files.
+ + Added query param handling to ForwardHandler
+ + Added ServletHandler().setUsingCookies().
+ + Optimized canonical path calculations.
+ + Warn and close connections if content-length is incorrectly set.
+ + Request log contains bytes actually returned.
+ + Fixed handling of empty responses at header commit.
+ + Fixed ResourceHandler handling of ;JSESSIONID
+ + Fixed forwarding to null pathInfo requests.
+ + Fixed handling of multiple cookies.
+ + Fixed EOF handling in MultiPartRequest.
+ + Fixed sync of ThreadPool idleSet.
+ + Fixed jetty.bat classpath problems.
+
+Jetty-3.0.6 - 26 Apr 2001
+ + Fixed handling of empty responses at header commit.
+ + Fixed ResourceHandler handling of ;JSESSIONID
+ + Fixed forwarding to null pathInfo requests.
+ + Fixed EOF handlding in MultiPartRequest.
+ + Fixed sync of ThreadPool idleSet.
+ + Load-on-startup the JspServlet so that precompiled servlets work.
+
+Jetty-3.1.rc4 - 14 April 2001
+ + Include full versions of JAXP and Crimson
+ + Added idle thread getter to ThreadPool.
+ + Load-on-startup the JspServlet so that precompiled servlets work.
+ + Removed stray debug println from the Frame class.
+
+Jetty-3.0.5 - 14 Apr 2001
+ + Branched from 3.1 trunk to fix major errors
+ + Fixed LineInput bug EOF
+ + Improved flush ordering for forwarded requests.
+ + Turned off range handling by default until bugs resolved
+ + Don't chunk if content length is known.
+ + fixed getLocales handling of quality params
+ + Created better random session ID
+ + Resource handler strips URL params like JSESSION.
+ + Fixed session invalidation unbind notification to conform with spec
+ + Load-on-startup the JspServlet so that precompiled servlets work.
+
+Jetty-3.1.rc3 - 9 April 2001
+ + Implemented multi-part ranges so that acrobat is happy.
+ + Simplified multipart response class.
+ + Improved flush ordering for forwarded requests.
+ + Improved ThreadPool stop handling
+ + Frame handles more JIT stacks.
+ + Cleaned up handling of exceptions thrown by servlets.
+ + Handle zero length POSTs
+ + Start session scavenger if needed.
+ + Added ContentHandler Observer to XmlParser.
+ + Allow webapp XmlParser to be observed for ejb-ref tags etc.
+ + Created better random session ID
+
+Jetty-3.1.rc2 - 30 Mar 2001
+ + Lifecycle.start() may throw Exception
+ + Added MultiException to throw multiple nested exceptions.
+ + Improved logging of nested exceptions.
+ + Only one instance of default MIME map.
+ + Use reference JAXP1.1 for XML parsing.y
+ + Version 1.1 of configuration dtd supports New objects.
+ + Improved handling of Primitive classes in XmlConfig
+ + Renamed getConnection to getHttpConnection
+ + fixed getLocales handling of quality params
+ + fixed getParameter(name) handling for multiple values.
+ + added options to turn off ranges and chunking to support acrobat requests.
+
+Jetty-3.1.rc1 - 18 Mar 2001
+ + Moved JMX and SASL handling to Jetty3Extra release
+ + Fixed problem with ServletContext.getContext(uri)
+ + Added Jetty documentation pages from JettyWiki
+ + Cleaned up build.xml script
+ + Minimal handling of Servlet.log before initialization.
+ + Various SSL cleanups
+ + Resource handler strips URL params like JSESSION.
+
+Jetty-3.1.rc0 - 23 Feb 2001
+ + Added JMX management framework.
+ + Use Thread context classloader as default context loader parent.
+ + Fixed init order for unnamed servlets.
+ + Fixed session invalidation unbind notification to conform with spec
+ + Improved handling of primitives in utilities.
+ + Socket made available via HttpConnection.
+ + Improved InetAddrPort and ThreadedServer to reduce DNS lookups.
+ + Dynamic servlets may be restricted to Context classloader.
+ + Reoganized packages to allowed sealed Jars
+ + Changed getter and setter methods that did not conform to beans API.
+
+Jetty-3.0.4 - 23 Feb 2001
+ + Fixed LineInput bug with split CRLF.
+
+Jetty-3.0.3 - 3 Feb 2001
+ + Fixed pipelined request buffer bug.
+ + Handle empty form content without exception.
+ + Allow Log to be disabled before initialization.
+ + Included new Jetty Logo
+ + Implemented web.xml servlet mapping to a JSP
+ + Fixed handling of directories without trailing /
+
+Jetty-3.0.2 - 13 Jan 2001
+ + Replaced ResourceHandler FIFO cache with LRU cache.
+ + Greatly improved buffering in ChunkableOutputStream
+ + Padded error bodies for IE bug.
+ + Improved HTML.Block efficiency
+ + Improved jetty.bat
+ + Improved jetty.sh
+ + Handle unknown status reasons in HttpResponse
+ + Ignore included response updates rather than IllegalStateException
+ + Removed classloading stats which were causing circular class loading problems.
+ + Allow '+' in path portion of a URL.
+ + Try ISO8859_1 encoding if can't find ISO-8859-1
+ + Restructured demo site pages.
+ + Context specific security permissions.
+ + Added etc/jetty.policy as example policy file.
+
+Jetty-3.0.1 - 20 Dec 2000
+ + Fixed value unbind notification for session invalidation.
+ + Removed double null check possibility from ServletHolder
+
+Jetty-3.0.0 - 17 Dec 2000
+ + Improved jetty.sh logging
+ + Improved dtd resolution in XML parser.
+ + Fixed taglib parsing
+ + Fixed rel path handling in default configurations.
+ + Optional extract war files.
+ + Fixed WriterLogSink init bug
+ + Use inner class to avoid double null check sync problems
+ + Fixed rollover bug in WriterLogSink
+
+Jetty-3.0.0.rc8 - 13 Dec 2000
+ + Optional alias checking added to FileResource.  Turned on by default
+on all platforms without the "/" file separator.
+ + Mapped *.jsp,*.jsP,*.jSp,*.jSP,*.Jsp,*.JsP,*.JSp,*.JSP
+ + Tidied handling of ".", ".." and "//" in resource paths
+ + Protected META-INF as well as WEB-INF in web applications.
+ + Jetty.Server catches init exceptions per server
+ + getSecurityHandler creates handler at position 0.
+ + SysV unix init script
+ + Improved exit admin handling
+ + Change PathMap handling of /* to give precedence over suffix mapping.
+ + Forward to welcome pages rather than redirect.
+ + Removed special characters from source.
+ + Default log options changed if in debug mode.
+ + Removed some unused variables.
+ + Added ForwardHandler
+ + Removed security constraint on demo admin server.
+ + Patched jasper to tomcat 3.2.1
+
+Jetty-3.0.0.rc7 - 02 Dec 2000
+ + Fixed security problem with lowercase WEB-INF uris on windows.
+ + Extended security constraints (see README and WebApp Demo).
+ + Set thread context classloader during handler start/stop calls.
+ + Don't set MIME-Version in response.
+ + Allow dynamic servlets to be served from /
+ + Handle multiple inits of same servlet class.
+ + Auto add a NotFoundHandler if needed.
+ + Added NotFoundServlet
+ + Added range handling to ResourceHandler.
+ + CGI servlet handles not found better.
+ + WEB-INF protected by NotFoundServlet rather than security constraint.
+ + PUT, MOVE disabled in WebApplication unless defaults file is passed.
+ + Conditionals apply to puts, dels and moves in ResourceHandler.
+ + URIs accept all characters < 0xff.
+ + Set the AcceptRanges header.
+ + Depreciated RollOverLogSink and moved functionality to an
+improved WriterLogSink.
+ + Changed log options to less verbose defaults.
+ + ThreadedServer.forceStop() now makes a connection to itself to handle non-premptive close.
+ + Double null lock checks use ThreadPool.__nullLockChecks.
+ + Split Debug servlet out of Admin Servlet.
+ + Added Com.mortbay.HTTP.Handler.Servlet.Context.LogSink attribute
+to Servlet Context. If set, it is used in preference to the system log.
+
+Jetty-3.0.0.rc6 - 20 Nov 2000
+ + RequestDispatcher.forward() only resets buffer, not headers.
+ + Added ServletWriter that can be disabled.
+ + Resource gets systemresources from it's own classloader.
+ + don't include classes in release.
+ + Allow load-on-startup with no content.
+ + Fixed RollOverFileLogSink bug with extra log files.
+ + Improved Log defaults
+ + Don't start HttpServer log sink on add.
+ + Admin servlet uses unique links for IE.
+ + Added Win32 service support
+ + Reduced risk of double null check sync problem.
+ + Don't set connection:close for normal HTTP/1.0 responses.
+ + RequestDispatcher new queries params replace old.
+ + Servlet init order may be negative.
+ + Corrected a few of the many spelling mistakes.
+ + Javadoc improvements.
+ + Webapps serve dynamics servlets by default.
+ + Warn for missing WEB-INF or web.xml
+ + Sessions try version 1 cookies in set-cookie2 header.
+ + Session cookies are given context path
+ + Put extra server and servlet info in header.
+ + Version details in header can be suppressed with System property
+java.com.mortbay.HTTP.Version.paranoid
+ + Prevent reloading dynamic servlets at different paths.
+ + Implemented resource aliases in HandlerContext - used by Servlet Context
+ + Map tablib configuration to resource aliases.
+ + Implemented customizable error pages.
+ + Simple stats in ContextLoader.
+ + Allow HttpMessage state to be manipulated.
+ + Allow multiple set cookies.
+
+Jetty-3.0.0.rc5 - 12 Nov 2000
+ + Default writer encoding set by mime type if not explicitly set.
+ + Relax webapp rules, accept no web.xml or no WEB-INF
+ + Pass flush through ServletOut
+ + Avoid jprobe race warnings in DateCache
+ + Allow null cookie values
+ + Servlet exceptions cause 503 unavailable rather than 500 server error
+ + RequestDispatcher can dispatch static resources.
+ + Merged DynamicHandler into ServletHandler.
+ + Added debug form to Admin servlet.
+ + Implemented servlet load ordering.
+ + Moved JSP classpath hack to ServletHolder
+ + Removed Makefile build system.
+ + Many javadoc cleanups.
+
+Jetty-2.4.9 - 12 Nov 2000
+ + HttpListener ignore InterruptedIOExceptions
+ + HttpListener default max idle time = 20s
+ + HtmlFilter handles non default encodings
+ + Writing HttpRequests encodes path
+ + HttpRequest.write uses ISO8859_1 encoding.
+
+Jetty-3.0.0.rc4 - 6 Nov 2000
+ + Provide default JettyIndex.properties
+ + Fixed mis-synchronization in ThreadPool.stop()
+ + Fixed mime type mapping bug introduced in RC3
+ + Ignore more IOExceptions (still visible with debug).
+
+Jetty-3.0.0.rc3 - 5 Nov 2000
+ + Changed ThreadPool.stop for IBM 1.3 JVM
+ + Added bin/jetty.sh run script.
+ + upgraded build.xml to ant v1.2
+ + Set MaxReadTimeMs in all examples
+ + Further clean up of the connection close actions
+ + Moved unused classes from com.mortbay.Util to com.mortbay.Tools in
+new distribution package.
+ + Handle mime suffixes containing dots.
+ + Added gz tgz tar.gz .z mime mappings.
+ + Fixed default mimemap initialization bug
+ + Optimized persistent connections by recycling objects
+ + Added HandlerContext.setHttpServerAccess for trusted contexts.
+ + Set the thread context class loader in HandlerContext.handle
+ + Prevent servlet setAttribute calls to protected context attributes.
+ + Removed redundant context attributes.
+ + Implemented mime mapping in webapplications.
+ + Strip ./ from relative resources.
+ + Added context class path dynamic servlet demo
+
+Jetty-3.0.0.rc2 - 29 Oct 2000
+ + Replaced ISO-8859-1 literals with StringUtil static
+ + Pass file based classpath to JspServlet (see README).
+ + Prevented multiple init of ServletHolder
+ + ErlEncoding treats params without values as empty rather than null.
+ + Accept public DTD for XmlConfiguration (old style still supported).
+ + Cleaned up non persistent connection close.
+ + Accept HTTP/1. as HTTP/1.0 (for netscape bug).
+ + Fixed thread name problem in ThreadPool
+
+Jetty-3.0.0.rc1 - 22 Oct 2000
+ + Added simple admin servlet.
+ + Added CGI to demo
+ + Added HashUserRealm and cleaned up security constraints
+ + Added Multipart request and response classes from Jetty2
+ + Moved and simplified ServletLoader to ContextLoader.
+ + Initialize JSP with classloader.
+ + All attributes in javax. java. and com.mortbay. name spaces to be set.
+ + Partial handling of 0.9 requests.
+ + removed Thread.destroy() calls.
+ + Cleaned up exception handling.
+
+Jetty-2.4.8 23 Oct 2000
+ + Fixed bug with 304 replies with bodies.
+ + Improved win32 make files.
+ + Fixed closing socket problem
+
+Jetty-3.0.B05 - 18 Oct 2000
+ + Improved null returns to get almost clean watchdog test.
+ + Cleaned up response committing and flushing
+ + Handler RFC2109 cookies (like any browser handles them!)
+ + Added default webapp servlet mapping /servlet/name/*
+ + Improved path spec interpretation by looking at 2.3 spec
+ + Implemented security-role-ref for servlets
+ + Protected servletConfig from downcast security problems
+ + Made test harnesses work with ant.
+ + improved ant documentation.
+ + Removed most deprecation warnings
+ + Fixed JarFileResource to handle jar files without directories.
+ + Implemented war file support
+ + Java2 style classloading
+ + Improved default log format for clarity.
+ + Separated context attributes and initParams.
+
+Jetty-3.0.B04 - 12 Oct 2000
+ + Restricted context mapping to simple model for servlets.
+ + Fixed problem with session ID in paths
+ + Added modified version of JasperB3.2 for JSP
+ + Moved FileBase to docroot
+ + Merged and renamed third party jars.
+ + Do not try multiple servlets for a request.
+ + Implemented Context.getContext(uri)
+ + Added webdefault.xml for web applications.
+ + Redirect to index files, so index.jsp works.
+ + Filthy hack to teach jasper JspServer Jetty classpath
+
+Jetty-3.0.B03 - 9th Oct 2000
+ + Expanded import package.*; lines
+ + Expanded leading tabs to spaces
+ + Improved Context to Handler contract.
+ + Parse but not handler startup ordering in web applications.
+ + Send request log via a LogSink
+ + Added append mode in RolloverFileLogSink
+ + Made LogSink a Lifecycle interface
+ + Improved handler toString
+ + Redirect context only paths.
+ + Pass object to LogSink
+ + Implemented request dispatching.
+ + Redo dynamic servlets handling
+ + Improved Log rollover.
+ + Simplified path translation and real path calculation.
+ + Catch stop and destroy exceptions in HttpServer.stop()
+ + Handle ignorable spaces in XmlConfiguration
+ + Handle ignorable spaces in WebApplication
+ + Warn about explicit sets of WebApplication
+ + Remove 411 checks as IE breaks this rule after redirect.
+ + Removed last remnants JDK 1.1 support
+ + Added release script
+
+Jetty-2.4.7 - 6th Oct 2000
+ + Allow Objects to be passed to LogSink
+ + Set content length on errors for keep alive.
+ + Added encode methods to URI
+ + Improved win32 build
+ + fixes to SSL doco
+ + Support key and keystore passwords
+ + Various improvements to  ServletDispatch, PropertyTree and
+associated classes.
+
+Jetty-3.0.B02 - 24st Aug 2000
+ + Fixed LineInput bug with SSL giving CR pause LF.
+ + Fixed HTTP/1.0 input close bug
+ + Fixed bug in TestRFC2616
+ + Improved ThreadedServer stop and destroy
+ + Use resources in WebApplication
+ + Added CGI servlet
+
+Jetty-3.0.B01 - 21st Aug 2000
+ + SSL implemented with JsseListener
+ + Partial implementation of webapp securitycontraints
+ + Implemented more webapp configuration
+ + Switched to the aelfred XML parser from microstar, which is
+only partially validating, but small and lightweight
+
+Jetty-2.4.6 - 16th Aug 2000
+ + Turn Linger off before closing sockets, to allow restart.
+ + JsseListener & SunJsseListener added and documented
+ + com.mortbay.Util.KeyPairTool added to handle openSSL SSL keys.
+ + Minor changes to compile with jikes.
+ + Added passive mode methods to FTP
+
+Jetty-3.0.A99 - 10 Aug 2000
+ + Implemented jetty.xml configuration
+ + Added Xmlconfiguration utility
+ + ServletLoader simplied and uses ResourcePath
+ + Replaced FileHandler with ResourceHandler
+ + Use SAX XML parsing instead of DOM for space saving.
+ + Removed FileBase. Now use ResourceBase instead
+ + Added Resource abstraction
+ + Make it compile cleanly with jikes.
+ + Re-added commented out imports for JDK-1.1 compile
+
+Jetty-3.0.A98 - 20 July 2000
+ + Implemented Jetty demos and Site as Web Application.
+ + Implemented WebApplicationContext
+ + Switched to JDK1.2 only
+ + ServletRequest.getServerPort() returns 80 rather than 0
+ + Fixed constructor to RolloverFileLogSink
+ + Improved synchronization on LogSink
+ + Allow HttpRequest.toString() handles bad requests.
+
+Jetty-3.0.A97 - 13 July 2000
+ + Tempory request log implementation
+ + Less verbose debug
+ + Better tuned SocketListener parameters
+ + Started RequestDispatcher implementation.
+ + Added WML mappings
+ + Fixed makefiles for BSD ls
+ + Fixed persistent commits with no content (eg redirect+keep-alive).
+ + Implemented servlet isSecure().
+ + Implemented servlet getLocale(s).
+ + Formatted version in server info string.
+ + Protect setContentLength from a late set in default servlet
+HEAD handling.
+ + Added error handling to LifeCycleThread
+ + implemented removeAttribute on requests
+
+Jetty-2.4.5 - 9th July 2000
+ + Don't mark a session invalid until after values unbound.
+ + Formatted version in server info.
+ + Added HtmlExpireFilter and removed response cache
+revention from HtmlFilter.
+ + Fixed transaction handling in JDBC wrappers
+
+Jetty-3.0.A96 - 27 June 2000
+ + Fixed bug with HTTP/1.1 Head reqests to servlets.
+ + Supressed un-needed chunking EOF indicators.
+
+Jetty-3.0.A95 - 24 June 2000
+ + Fixed getServletPath for default "/"
+ + Handle spaces in file names in FileHandler.
+
+Jetty-3.0.A94 - 19 June 2000
+ + Implemented Sessions.
+ + PathMap exact matches can terminate with ; or # for
+URL sessions and targets.
+ + Added HandlerContext to allow grouping of handlers into
+units with the same file, resource and class configurations.
+ + Cleaned up commit() and added complete() to HttpResponse
+ + Updated license to clarify that commercial usage IS OK!
+
+Jetty-3.0.A93 - 14 June 2000
+ + Major rethink! Moved to 2.2 servlet API
+ + Lots of changes and probably unstable
+
+Jetty-3.0.A92 - 7 June 2000
+ + Added HTML classes to jar
+ + Fixed redirection bug in FileHandler
+
+Jetty-2.4.4 - 3rd June 2000
+ + Many debug call optimizations
+ + Added RolloverFileLogSink
+ + Improved LogSink configuration
+ + Support System.property expansions in PropertyTrees.
+ + Added uk.org.gosnell.Servlets.CgiServlet to contrib
+ + HttpRequest.setRequestPath does not null pathInfo.
+ + BasicAuthHandler uses getResourcePath so it can be used
+behind request dispatching
+ + Added HTML.Composite.replace
+ + FileHandler implements IfModifiedSince on index files.
+ + Added build-win32.mak
+
+Jetty-3.0.A91 - 3 June 2000
+ + Improved LogSink mechanism
+ + Implemented realPath and getResource methods for servlets.
+ + Abstracted ServletHandler
+ + Simplified HttpServer configuration methods and arguments
+ + Simplified class loading
+ + Added HTML classes from Jetty2
+
+Jetty-3.0.A9 - 7 May 2000
+ + Improvided finally handling of output end game.
+ + Fixed double chunking bug in SocketListener.
+ + File handler checks modified headers on directory indexes.
+ + ServletLoader tries unix then platform separator for zip separator.
+
+Jetty-3.0.A8 4th May 2000
+ + Servlet2_1 class loading re-acrchitected. See README.
+ + Moved Sevlet2_1 handler to com.mortbay.Servlet2_1
+ + addCookie takes an int maxAge rather than a expires date.
+ + Added LogSink extensible log architecture.
+ + Code.ignore only outputs when debug is verbose.
+ + Added Tenlet class for reverse telnet.
+
+Jetty-2.4.3 - 4th May 2000 STABLE
+ + Pass Cookies with 0 max age to browser.
+ + Allow CRLF in UrlEncoded
+
+Jetty-2.4.2 - 23rd April 2000
+ + Added LogSink and FileLogSink classes to allow extensible
+Log handling.
+ + Handle nested RequestDispatcher includes.
+ + Modified GNUJSP to prevent close in nested requests.
+ + Added GNUJSP to JettyServer.prp file.
+
+Jetty-3.0.A7 - 15 Apr 2000
+ + Include java 1.2 source hierarchy
+ + removed excess ';' from source
+ + fixed flush problem with chunked output for IE5
+ + Added InetGateway to help debug IE5 problems
+ + added removeValue method to MultiMap
+
+Jetty-2.4.1 - 9th April 2000
+ + Removed debug println from ServletHolder.
+ + Set encoding before exception in FileHandler.
+ + Fixed bug in HtmlFilter for tags split between writes.
+
+Jetty-3.0.A6 - 9 Apr 2000
+ + Integrated skeleton 2.1 Servlet container
+ + Improved portability of Frame and Debug.
+ + Dates forced to use US locale
+ + Removed Converter utilities and InetGateway.
+ + added bin/useJava2Collections to convert to JDK1.2
+
+Jetty-2.4.0 - 24th March 2000
+ + Upgraded to gnujsp 1.0.0
+ + Added per servlet resourceBase configuration.
+ + Absolute URIs are returned by getRequestURI (if sent by browser).
+ + Improved parsing of stack trace in debug mode.
+ + Implemented full handling of cookie max age.
+ + Moved SetUID native code to contrib hierarchy
+ + Form parameters only decoded for POSTs
+ + RequestDispatcher handles URI parameters
+ + Fixed bug with RequestDispatcher.include()
+ + Fixed caste problem in UrlEncoded
+ + Fixed null pointer in ThreadedServer with stopAll
+ + Added VirtualHostHandler for virtual host handling
+ + Added doc directory with a small start
+
+Jetty-2.3.5 - 25th January 2000
+ + Fixed nasty bug with HTTP/1.1 redirects.
+ + ProxyHandler sends content for POSTs etc.
+ + Force locale of date formats to US.
+ + Fixed expires bug in Cookies
+ + Added configuration option to turn off Keep-Alive in HTTP/1.0
+ + Allow configured servlets to be auto reloaded.
+ + Allow properties to be configured for dynamic servlets.
+ + Added contrib/com/kiwiconsulting/jetty JSSE SSL adaptor to release.
+
+Jetty-2.3.4 - 18th January 2000
+ + include from linux rather than genunix for native builds
+ + Fixed IllegalStateException handling in DefaultExceptionHandler
+ + MethodTag.invoke() is now public.
+ + Improved HtmlFilter.activate header modifications.
+ + Cookie map keyed on domain as well as name and path.
+ + DictionaryConverter handles null values.
+ + URI decodes applies URL decoding to the path.
+ + Servlet properties allow objects to be stored.
+ + Fixed interaction with resourcePaths and proxy demo.
+
+Jetty-3.0.A5 - 19 Oct 1999
+ + Use ISO8859_1 instead of UTF8 for headers etc.
+ + Use char array in UrlEncoded.decode
+ + Do our own URL string encoding with 8859-1
+ + Replaced LF wait in LineInput with state boolean.
+
+Jetty-2.3.3 - 19th October 1999 STABLE
+ + Replaced UTF8 encoding with ISO-8859-1 for headers.
+ + Use UrlEncoded for form parameters.
+ + Do our own URL encoding with ISO-8859-1
+ + HTTP.HTML.EmbedUrl uses contents encoding.
+
+Jetty-2.3.2 - 17th October 1999
+ + Fixed getReader bug with HttpRequest.
+ + Updated UrlEncoded with Jetty3 version.
+
+Jetty-3.0.A4 - 16 Oct 1999
+ + Request attributes
+ + Basic Authentication Handler.
+ + Added LF wait after CR to LineInput.
+ + UTF8 in UrlDecoded.decodeString.
+
+Jetty-2.3.1 - 14th October 1999
+ + Force UTF8 for FTP commands
+ + Force UTF8 for HTML
+ + Changed demo servlets to use writers in preference to outputstreams
+ + NullHandler/Server default name.name.PROPERTIES to load
+prefix/name.name.properties
+ + Use UTF8 in HTTP headers
+ + Added Oracle DB adapter
+ + Added assert with no message to Code
+ + ThreadedServer calls setSoTimeout(_maxThreadIdleMs) on
+accepted sockets. Idle reads will timeout.
+ + Prevented thread churn on idle server.
+ + HTTP/1.0 Keep-Alive (about time!).
+ + Fixed GNUJSP 1.0 resource bug.
+
+Jetty-3.0.A3 - 14 Oct 1999
+ + Added LifeCycle interface to Utils implemented by
+ThreadPool, ThreadedServer, HttpListener & HttpHandler
+ + StartAll, stopAll and destroyAll methods added to HttpServer.
+ + MaxReadTimeMs added to ThreadedServer.
+ + Added service method to HttpConnection for specialization.
+
+Jetty-3.0.A2 - 13 Oct 1999
+ + UTF8 handling on raw output stream.
+ + Reduced flushing on writing response.
+ + Fixed LineInput problem with repeated CRs
+ + Cleaned up Util TestHarness.
+ + Prevent entity content for responses 100-199,203,304
+ + Added cookie support and demo.
+ + HTTP/1.0 Keep-alive (about time!)
+ + Virtual Hosts.
+ + NotFound Handler
+ + OPTION * Handling.
+ + TRACE handling.
+ + HEAD handling.
+
+Jetty-3.0.A1 - 12 Oct 1999
+ + LineInput uses own buffering and uses character encodings.
+ + Added MultiMap for common handling of multiple valued parameters.
+ + Added parameters to HttpRequest
+ + Quick port of FileHandler
+ + Setup demo pages.
+ + Added PathMap implementing mapping as defined in the 2.2 API
+specification (ie. /exact, /prefix/*, *.extention & default ).
+ + Added HttpHandler interface with start/stop/destroy lifecycle
+ + Updated HttpListener is start/stop/destroy lifecycle.
+ + Implemented simple extension architecture in HttpServer.
+
+Jetty-3.0.A0 - 9 Oct 1999
+ + Started fresh repository in CVS
+ + Moved com.mortbay.Base classes to com.mortbay.Util
+ + Cleanup of UrlEncoded, using 1.2 Collections.
+ + Cleanup of URI, using 1.2 Collections.
+ + Extended URI to handle absolute URLs
+ + Cleanup of LineInput, using 1.2 Collections.
+ + Moved HttpInput/OutputStream to ChunkableInput/OutputStream.
+ + Cleaned up chunking code to use LineInput and reduce buffering.
+ + Added support for transfer and content encoding filters.
+ + Added support for servlet 2.2 outbut buffer control.
+ + Generalized notification of outputStream events.
+ + Split HttpHeader into HttpFields and HttpMessage.
+ + HttpMessage supports chunked trailers.
+ + HttpMessage supports message states.
+ + Added generalized HTTP Connection.
+ + Cleanup of HttpRequest and decoupled from Servlet API
+ + Cleanup and abstraction of ThreadPool.
+ + ThreadedServer based on ThreadPool.
+ + Cleanup of HttpResponse and decoupled from Servlet API
+ + Created RFC2616 test harness.
+ + gzip and deflate request transfer encodings
+ + TE field coding and trailer handler
+ + HttpExceptions now produce error pages with specific detail
+of the exception.
+
+Jetty-2.3.0 - 5th October 1999
+ + Added SetUID class with native Unix call to set the
+effective User ID.
+ + FTP closes files after put/get.
+ + FTP uses InetAddress of command socket for data socket.
+
+Jetty-2.3.0A - 22 Sep 1999
+ + Added GNUJSP 1.0 for the JSP 1.0 API.
+ + Use javax.servlet classes from JWSDK1.0
+ + Added "Powered by Jetty" button.
+ + ServerContext available to HtmlFilters via context param
+ + Made session IDs less predictable and removed race.
+ + Added BuildJetty.java file.
+ + Expanded tabs to spaces in source.
+
+Jetty-2.2.8 - 15 Sep 1999
+ + Fixed bug in Element.attribute with empty string values.
+ + Made translation of getRequestURI() optional.
+ + Removed recursion from TranslationHandler
+ + Added disableLog() to turn off logging.
+ + Allow default table attributes to be overriden.
+ + Improved quoting in HTML element values
+
+Jetty-2.2.7 - 9 Sep 1999
+ + Reverted semantics of getRequestURI() to return untranslated URI.
+ + Added GzipFilter for content encoding.
+ + Added default row, head and cell elements to Table.
+ + FileHandler passes POST request through if the file does not exist.
+
+Jetty-2.2.6 - 5 Sep 1999
+ + New implementation of ThreadPool, avoids a thread leak problem.
+ + Fixed Cookie max age order of magnitude bug.
+ + Cookies always available from getCookies.
+ + Cookies parameter renamed to CookiesAsParameters
+ + HttpRequest.getSession() always returns a session as per
+the latest API spec.
+ + Added destroy() method on all HttpHandlers.
+ + ServletHandler.destroy destroys all servlets.
+ + FileHandler does not server files ending in '/'
+ + Ignore duplicate single valued headers, rather than
+reply with bad request, as IE4 breaks the rules.
+ + Allow the handling of getPathTranslated to
+be configured in ServletHandler.
+ + Removed JRUN options from ServletHandler configuration.
+ + Added ServletRunnerHandler to the contrib directories.
+ + Updated HTML package to better support CSS:
+- cssClass, cssID and style methods added to element.
+- SPAN added to Block
+- media added to Style
+- class StyleLink added.
+
+Jetty-2.2.5 - 19 Aug 1999
+ + Fixed bug with closing connections in ThreadedServer
+ + Made start and stop non final in ThreadedServer
+ + Better default handling of ServletExceptions
+ + Always close connection after a bad request.
+ + Set Expires header in HtmlFilter.
+ + Don't override the cookie as parameter option.
+ + Limited growth in MultiPartResponse boundary.
+ + Improved error messages from Jetty.Server.
+ + Close loaded class files so Win32 can overwrite
+them before GC (what a silly file system!).
+
+Jetty-2.2.4 - 2 Aug 1999
+ + ThreadedServer can use subclasses of Thread.
+ + Better help on Jetty.Server
+ + HttpRequests may be passed to HttpFilter constructors.
+ + HtmlFilter blanks IfModifiedSince headers on construction
+ + Fixed bugs in HtmlFilter parser and added TestHarness.
+ + Improved cfg RCS script.
+
+Jetty-2.2.3 - 27 July 1999
+ + Fixed parser bug in HtmlFilter
+ + Made setInitialize public in ServletHolder
+ + Improved performance of com.mortbay.HTML.Heading
+ + Added stop call to HttpServer, used by Exit Servlet.
+ + Simplified JDBC connection handling so that it works
+with Java1.2 - albeit less efficiently.
+ + FileHandler defaults to allowing directory access.
+ + JDBC tests modified to use cloudscape as DB.
+
+Jetty-2.2.2 - 22 July 1999
+ + Fixed bug in HtmlFilter that prevented single char buffers
+from being written.
+ + Implemented getResourceAsStream in FileJarServletLoader
+ + Fixed bug with CLASSPATH in FileJarServletLoader after attempt
+to load from a jar.
+ + Fixed bug in com.mortbay.Util.IO with thread routines.
+ + Moved more test harnesses out of classes.
+ + File handler passes through not allowed options for
+non existant files.
+ + NotFoundHandler can repond with SC_METHOD_NOT_ALLOWED.
+ + Improved com.mortbay.Base.Log handling of different JVMs
+ + Minor fixes to README
+
+Jetty-2.2.1 - 18 July 1999
+ + Comma separate header fields.
+ + Protect against duplicate single valued headers.
+ + Less verbose debug in PropertyTree
+ + Ignore IOException in ThreadedServer.run() when closing.
+ + Limit maximum line length in HttpInputStream.
+ + Response with SC_BAD_REQUEST rather than close in more
+circumstances
+ + Handle continuation lines in HttpHeader.
+ + HtmlFilter resets last-modified and content-length headers.
+ + Implemented com.mortbay.Util.IO as a ThreadPool
+ + Decoupled ExceptionHandler configuration from Handler stacks.
+Old config style will produce warning and Default behavior.
+See new config file format for changes.
+ + Added TerseExceptionHandler
+ + Added optional resourceBase property to HttpConfiguration. This
+is used as a URL prefix in the getResource API and was suggested
+by the JSERV and Tomcat implementors.
+
+Jetty-2.2.0 - 1 July 1999
+ + Improved feature description page.
+ + Added Protekt SSL HttpListener
+ + Moved GNUJSP and Protekt listener to a contrib hierarchy.
+ + ThreadedServer.stop() closes socket before interrupting threads.
+ + Exit servlet improved (a little).
+ + Fixed some of the javadoc formatting.
+
+Jetty-2.2.Beta4 - 29 June 1999
+ + FileHandler flushes files from cache in DELETE method.
+ + ThreadedServer.stop() now waits until all threads are stopped.
+ + Options "allowDir" added to FileHandler.
+ + Added getGlobalProperty to Jetty.Server and used this to
+configure default page type.
+ + Updated README.txt
+ + Restructured com.mortbay.Jetty.Server for better clarity and
+documentation.
+ + Added comments to configuration files.
+ + Made ServerSocket and accept call generic in ThreadedServer for
+SSL listeners.
+ + Altered meaning of * in PropertyTree to assist in abbreviated
+configuration files.
+ + Added JettyMinimalDemo.prp as an example of an abbreviated
+configuration.
+ + Expanded Mime.prp file
+ + Added property handling to ServletHandler to read JRUN
+servlet configuration files.
+
+Jetty-2.2.Beta3 - 22 June 1999
+ + Re-implemented ThreadedServer to improve and balance performance.
+ + Added file cache to FileHandler
+ + Implemented efficient version of
+ServletContext.getResourceAsStream() that does not open a
+new socket connection (as does getResource()).
+ + LookAndFeelServlet uses getResourceAsStream to get the file
+to wrap. This allows it to benefit from any caching done and
+to wrap arbitrary content (not just files).
+ + Restructure demo so that LookAndFeel content comes from simple
+handler stack.
+ + Fixed file and socket leaks in Include and Embed tags.
+ + Ran dos2unix on all text files
+ + Applied contributed patch of spelling and typo corrections
+ + Added alternate constructors to HTML.Include for InputStream.
+ + Server.shutdown() clears configuration so that server may
+be restarted in same virtual machine.
+ + Improved Block.write.
+ + Fixed bug in HttpResponse flush.
+
+Jetty-2.2.Beta2 - 12 June 1999
+ + Added all write methods to HttpOutputStream$SwitchOutputStream
+ + Added com.mortbay.Jetty.Server.shutdown() for gentler shutdown
+of server. Called from Exit servlet
+ + HttpRequest.getParameterNames() no longer alters the order
+returned by getQueryString().
+ + Handle  path info of a dynamic loaded servlets and
+correctly set the servlet path.
+ + Standardized date format in persistent cookies.
+
+Jetty-2.2.Beta1 - 7 June 1999
+ + Defined abstract ServletLoader, derivations of which can be
+specified in HttpConfiguration properties.
+ + Implemented all HttpServer attribute methods by mapping to the
+HttpConfiguration properties.  Dynamic reconfiguration is NOT
+supported by these methods (but we are thinking about it).
+ + Close files after use to avoid "file leak" under heavy load.
+ + Fixed missing copyright messages from some contributions
+ + Fixed incorrect version numbers in a few places.
+ + Improved ThreadPool synchronization and added minThreads.
+ + Allow configuration of MinListenerThreads, MaxListenerThreads,
+MaxListenerThreadIdleMs
+ + HtmlFilter optimized for being called by a buffered writer.
+ + Don't warn about IOExceptions unless Debug is on.
+ + Limit the job queue only grow to the max number of threads.
+ + Included GNUJSP 0.9.9
+ + Optional use of DateCache in log file format
+ + Fixed cache in FileJarServletLoader
+ + Destroy requests and responses to help garbage collector.
+ + Restructure ThreadedServer to reduce object creation.
+
+Jetty-2.2.Beta0 - 31 May 1999
+ + Servlet loader handles jar files with different files separator.
+ + ThreadedServer gently shuts down.
+ + Handle malformed % characters in URLs.
+ + Included and improved version of ThreadPool for significant
+performance improvement under high load.
+ + HttpRequest.getCookies returns empty array rather than null for no
+cookies.
+ + Added HttpResponse.requestHandled() method to avoid bug with
+servlet doHead method.
+ + Added Page.rewind() method to allow a page to be written multiple
+times
+ + Added "Initialize" attribute to servlet configuration to allow
+servlet to be initialized when loaded.
+ + LogHandler changed to support only a single outfile and optional
+append.
+ + Included contributed com.mortbay.Jetty.StressTester class
+ + Token effort to keep test files out of the jar
+ + Removed support for STF
+
+Jetty-2.2.Alpha1 - 7 May 1999
+ + ServletHolder can auto reload servlets
+ + Dynamic servlets can have autoReload configured
+ + Wait for requests to complete before reloading.
+ + Call destroy on old servlets when reloading.
+ + Made capitalization of config file more consistent(ish)
+ + Fixed bug in SessionDump
+
+Jetty-2.2.Alpha0 - 6 May 1999
+ + Improved PropertyTree implementation
+ + Old Jetty.Server class renamed to Jetty.Server21
+ + New Server class using PropertyTree for configuration
+ + HttpHandlers given setProperties method to configure via Properties.
+ + HttpListener class can be configured
+ + Mime suffix mapping can be configured.
+ + Removed historic API from sessions
+ + Improved SessionDump servlet
+ + Fixed date overflow in Cookies
+ + HttpResponse.sendError avoids IllegalStateException
+ + Added ServletLoader implementation if ClassLoader.
+ + Dynamic loading of servlets.
+ + Added reload method to ServletHolder, but no way to call it yet.
+ + Changed options for FileServer
+ + Implemented ServletServer
+ + Removed SimpleServletServer
+
+Jetty-2.1.7 - 22 April 1999
+ + Fixed showstopper bug with getReader and getWriter in
+requests and responses.
+ + HttpFilter uses package interface to get HttpOutputStream
+
+Jetty-2.1.6 - 21 April 1999
+ + Reduced initial size of most hashtables to reduce
+default memory overheads.
+ + Throw IllegalStateException as required from gets of
+input/output/reader/writer in requests/responses.
+ + New simpler version of PropertyTree
+ + Updated PropertyTreeEditor
+ + Return EOF from HttpInputStream that has a content length.
+ + Added additional date formats for HttpHeader.getDateHeader
+
+Jetty-2.1.5 - 15 April 1999
+ + Session URL encoding fixed for relative URLs.
+ + Reduced session memory overhead of sessions
+ + Form parameters protected against multiple decodes when redirected.
+ + Added setType methods to com.mortbay.FTP.Ftp
+ + Fixed bugs with invalid sessions
+ + Page factory requires response for session encoding
+ + Moved SessionHandler to front of stacks
+ + HtmlFilter now expands <!=SESSION> to the URL encoded session if
+required.
+ + Instrumented most of the demo to support URL session encoding.
+ + Implemented HttpRequest.getReader()
+ + Servlet log has been diverted to com.mortbay.Base.Log.event()
+Thus debug does not need to be turned on to see servlet logs.
+ + Fixed alignment bug in TableForm
+ + Removed RFCs from package
+ + Fixed bug in ServletDispatch for null pathInfo
+
+Jetty-2.1.4 - 26 March 1999
+ + Fixed problem compiling PathMap under some JDKs.
+ + Reduced HTML dependence in HTTP package to allow minimal configuration
+ + Tightened license agreement so that binary distributions are required
+to include the license file.
+ + HttpRequest attributes implemented.
+ + Session max idle time implemented.
+ + pathInfo returns null for zero length pathInfo (as per spec).
+Sorry if this breaks your servlets - it is a pain!
+ + fixed bug in getRealPath
+ + getPathTranslated now call getRealPath with pathInfo (as per spec).
+
+Jetty-2.1.3 - 19 March 1999
+ + Added support for suffixes to PathMap
+ + Included GNUJSP implementation of Java Server Pages
+ + Use Java2 javadoc
+
+Jetty-2.1.2 - 9 March 1999
+ + JSDK 2.1.1
+ + API documentation for JSDK 2.1.1
+ + Cascading style sheet HTML element added.
+ + Fixed trailing / bug in FileHandler (again!).
+ + Converted most servlets to HttpServlets using do Methods.
+
+Jetty-2.1.1 - 5 March 1999
+ + Reduced number of calls to getRemoteHost for optimization
+ + Faster version of HttpInputStream.readLine().
+ + com.mortbay.Base.DateCache class added and used to speed date handling.
+ + Handle '.' in configured paths (temp fix until PropertyTrees)
+ + Fast char buffer handling in HttpInputStream
+ + Faster version of HttpHeader.read()
+ + Faster version of HttpRequest
+ + Size all StringBuffers
+
+Jetty-2.1.0 - 22 February 1999
+ + Session URL Encoding
+ + PropertyTrees (see new Demo page)
+ + ServletDispatch (see new Demo page)
+ + image/jpg -> image/jpeg
+ + Deprecated com.mortbay.Util.STF
+ + getServlet methods return null.
+
+Jetty-2.1.B1 - 13 February 1999
+ + Fixed bug with if-modified-since in FileHandler
+ + Added video/quicktime to default MIME types.
+ + Fixed bug with MultipartRequest.
+ + Updated DefaultExceptionHandler.
+ + Updated InetAddrPort.
+ + Updated URI.
+ + Implemented Handler translations and getRealPath.
+ + Improved handling of File.separator in FileHandler.
+ + Implemented RequestDispatcher (NOT Tested!).
+ + Implemented getResource and getResourceAsStream (NOT Tested!).
+ + Replace package com.mortbay.Util.Gateway with
+class  com.mortbay.Util.InetGateway
+
+Jetty-2.1.B0 - 30 January 1999
+ + Uses JSDK2.1 API, but not all methods implemented.
+ + Added support for PUT, MOVE, DELETE in FileHandler
+ + FileHandler now sets content length.
+ + Added plug gateway classes com.mortbay.Util.Gateway
+ + Fixed command line bug with SimpleServletConfig
+ + Minor changes to support MS J++ and its non standard
+language extensions - MMMmmm should have left it unchanged!
+
+Jetty-2.0.5 - 15 December 1998
+ + Temp fix to getCharacterEncoding
+ + added getHeaderNoParams
+
+Jetty-2.0.4 - 10 December 1998
+ + Use real release of JSDK2.0 (rather than beta).
+ + Portability issues solved for Apple's
+ + Improved error code returns
+ + Removed MORTBAY_HOME support from Makefiles
+ + Improved default Makefile behaviour
+ + Implement getCharacterEncoding
+
+Jetty-2.0.3 - 13 November 1998
+ + Limit threads in ThreadedServer and low priority listener option
+greatly improve performance under worse case loads.
+ + Fix bug with index files for Jetty.Server. Previously servers
+configured with com.mortbay.Jetty.Server would not handle
+index.html files.  Need to make this configurable in the prp file.
+ + Fixed errors in README file: com.mortbay.Jetty.Server was called
+com.mortbay.HTTP.Server
+
+Jetty-2.0.2 - 1 November 1998
+ + Use JETTY_HOME rather than MORTBAY_HOME for build environment
+ + Add thread pool to threaded server for significant
+performance improvement.
+ + Buffer files during configuration
+ + Buffer HTTP Response headers.
+
+Jetty-2.0.1 - 27 October 1998
+ + Released under an Open Source license.
+
+Jetty-2.0.0 - 25 October 1998
+ + Removed exceptional case from FileHandler redirect.
+ + Removed Chat demo (too many netscape dependencies).
+ + Fixed Code.formatObject handling of null objects.
+ + Added multipart/form-data demo.
+
+Jetty-2.0.Beta3 - 29 Sep 1998
+ + Send 301 for directories without trailing / in FileHandler
+ + Ignore exception from HttpListener
+ + Properly implemented multiple listening addresses
+ + Added com.mortbay.Jetty.Server (see README.Jetty)
+ + Demo converted to an instance of com.mortbay.Jetty.Server
+ + Fixed Log Handler again.
+ + Added com.mortbay.HTTP.MultiPartRequest to handle file uploads
+
+Jetty-2.0Beta2 - July 1998
+ + Fixed Log Handler for HTTP/1.1
+ + Slight improvement in READMEEs
+
+Jetty-2.0Beta1 - June 1998
+ + Improved performance of Code.debug() calls, significantly
+in the case of non matching debug patterns.
+ + Fixed bug with calls to service during initialization of servlet
+ + Provided addSection on com.mortbay.HTML.Page
+ + Provided reset on com.mortbay.HTML.Composite.
+ + Proxy demo in different server instance
+ + Handle full URLs in HTTP requests (to some extent)
+ + Improved performance with special asciiToLowerCase
+ + Warn if MSIE used for multi part MIME.
+
+Jetty-2.0Alpha2 - May 1998
+ + JDK1.2 javax.servlet API
+ + Added date format to Log
+ + Added timezone to Log
+ + Handle params in getIntHeader and getDateHeader
+ + Removed HttpRequest.getByteContent
+ + Use javax.servlet.http.HttpUtils.parsePostData
+ + Use javax.servlet.http.Cookie
+ + Use javax.servlet.http.HttpSession
+ + Handle Single Threaded servlets with servlet pool
+
+Jetty-1.3.5 May 1998
+ + Fixed socket inet bug in FTP
+ + Debug triggers added to com.mortbay.Base.Code
+ + Added date format to Log
+ + Correct handling of multiple parameters
+
+Jetty-2.0Alpha1 Wed 8 April 1998
+ + Fixed forward bug with no port number
+ + Removed HttpRequestHeader class
+ + Debug triggers added to com.mortbay.Base.Code
+ + Handle HTTP/1.1 Host: header
+ + Correct formatting of Date HTTP headers
+ + HttpTests test harness
+ + Add HTTP/1.1 Date: header
+ + Handle file requests with If-Modified-Since: or If-Unmodified-Since:
+ + Handle HEAD properly
+ + Send Connection: close
+ + Requires Host: header for 1.1 requests
+ + Sends chunked data for 1.1 responses of unknown length.
+ + handle extra spaces in HTTP headers
+ + Really fixed handling of multiple parameters
+ + accept chunked data
+ + Send 100 Continue for HTTP/1.1 requests (concerned about push???)
+ + persistent connections
+
+Jetty-1.3.4 - Sun 15 Mar 1998
+ + Fixed handling of multiple parameters in query and form content.
+"?A=1%2C2&A=C%2CD" now returns two values ("1,2" & "C,D") rather
+than 4.
+ + ServletHandler now takes an optional file base directory
+name which is used to set the translated path for pathInfo in
+servlet requests.
+ + Dump servlet enhanced to exercise these changes.
+
+Jetty-1.3.3
+ + Fixed TableForm.addButtonArea bug.
+ + TableForm.extendRow() uses existing cell
+ + Closed exception window in HttpListener.java
+
+Jetty-1.3.2
+ + Fixed proxy bug with no port number
+ + Added per Table cell composite factories
+
+Jetty-1.3.1
+ + Minor fixes in SmtpMail
+ + ForwardHandler only forwards as http/1.0 (from Tobias.Miller)
+ + Improved parsing of stack traces
+ + Better handling of InvocationTargetException in debug
+ + Minor release adjustments for Tracker
+
+Jetty-1.3.0
+ + Added DbAdaptor to JDBC wrappers
+ + Beta release of Tracker
+
+Jetty-1.2.0
+ + Reintroduced STF
+ + Fixed install bug for nested classes
+ + Better Debug configuration
+ + DebugServlet
+ + Alternate look and feel for Jetty
+
+Jetty-1.1.1
+ + Improved documentation
+
+Jetty-1.1
+ + Improved connection caching in java.mortbay.JDBC
+ + Moved HttpCode to com.mortbay.Util
+
+Jetty-1.0.1
+ + Bug fixes
+
+Jetty-1.0
+ + First release in com.mortbay package structure
+ + Included Util, JDBC, HTML, HTTP, Jetty
+
+
+
+
+
+
+
diff --git a/solr/jetty/bin/Jetty-Service.exe b/solr/jetty/bin/Jetty-Service.exe
new file mode 100644
index 0000000000000000000000000000000000000000..b4cfc557c06380307967c2936c428cf29894eae8
Binary files /dev/null and b/solr/jetty/bin/Jetty-Service.exe differ
diff --git a/solr/jetty/bin/build_release_bundles.sh b/solr/jetty/bin/build_release_bundles.sh
new file mode 100644
index 0000000000000000000000000000000000000000..a9a2187026cb7184856c3c34331ce49bec3ee2d7
--- /dev/null
+++ b/solr/jetty/bin/build_release_bundles.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+[ $# -eq 1 ] || { echo "Usage - $0 jetty-dir" >&2 ; exit 1 ; }
+
+cd $1
+D=$(pwd)
+N=$(basename $D)
+D=$(dirname $D)
+cd $D
+
+ find $N -type f |\
+ egrep -v /\\.svn |\
+ egrep -v /target |\
+ egrep -v /\\. |\
+ egrep -v $N/start.jar |\
+ egrep -v $N/lib |\
+ egrep -v $N/logs |\
+ egrep -v $N/webapp |\
+ egrep -v $N/javadoc |\
+ xargs zip $D/$N-src.zip $N/logs
+
+ find $N -type f |\
+ egrep -v /\\.svn |\
+ egrep -v /target |\
+ egrep -v /\\. |\
+ egrep -v $N/logs |\
+ xargs zip $D/$N.zip $N/logs
diff --git a/solr/jetty/bin/change_version.sh b/solr/jetty/bin/change_version.sh
new file mode 100644
index 0000000000000000000000000000000000000000..8e55b2d796c66a25e8d9e1d8f262bc4f85abb9d5
--- /dev/null
+++ b/solr/jetty/bin/change_version.sh
@@ -0,0 +1,758 @@
+#!/bin/sh
+
+[ $# -eq 1 ] || { echo Usage - $0 new_version >&2 ; exit 1 ; }
+
+sed s/__JETTY_VERSION__/$1/g << "_EOF_" | patch -p0
+Index: pom.xml
+===================================================================
+--- pom.xml	(revision 2122)
++++ pom.xml	(working copy)
+@@ -4,7 +4,7 @@
+   <artifactId>project</artifactId>
+   <packaging>pom</packaging>
+   <name>Jetty Server Project</name>
+-  <version>6.1-SNAPSHOT</version>
++  <version>__JETTY_VERSION__</version>
+   <url>http://jetty.mortbay.org</url>
+   <issueManagement>
+     <system>jira</system>
+Index: project-website/project-site/src/site/site.xml
+===================================================================
+--- project-website/project-site/src/site/site.xml	(revision 2122)
++++ project-website/project-site/src/site/site.xml	(working copy)
+@@ -5,7 +5,7 @@
+   <skin>
+     <groupId>org.mortbay.jetty</groupId>
+     <artifactId>jetty-skin</artifactId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+   </skin>
+   <bannerLeft>
+     <name>Jetty</name>
+Index: project-website/project-site/pom.xml
+===================================================================
+--- project-website/project-site/pom.xml	(revision 2122)
++++ project-website/project-site/pom.xml	(working copy)
+@@ -3,7 +3,7 @@
+   <parent>
+     <artifactId>project-website</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+@@ -11,7 +11,7 @@
+   <artifactId>project-site</artifactId>
+   <packaging>pom</packaging>
+   <name>Jetty Site</name>
+-  <version>6.1-SNAPSHOT</version>
++  <version>__JETTY_VERSION__</version>
+   <build>
+     <plugins>
+       <plugin>
+Index: project-website/project-skin/pom.xml
+===================================================================
+--- project-website/project-skin/pom.xml	(revision 2122)
++++ project-website/project-skin/pom.xml	(working copy)
+@@ -7,7 +7,7 @@
+   </parent>
+   <groupId>org.mortbay.jetty</groupId>
+   <artifactId>jetty-skin</artifactId>
+-  <version>6.1-SNAPSHOT</version>
++  <version>__JETTY_VERSION__</version>
+   <name>Maven Jetty Site Skin</name>
+   <description>Maven Jetty Site Skin</description>
+ </project>
+Index: project-website/pom.xml
+===================================================================
+--- project-website/pom.xml	(revision 2122)
++++ project-website/pom.xml	(working copy)
+@@ -3,7 +3,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+@@ -11,7 +11,7 @@
+   <artifactId>project-website</artifactId>
+   <packaging>pom</packaging>
+   <name>Jetty WebSite</name>
+-  <version>6.1-SNAPSHOT</version>
++  <version>__JETTY_VERSION__</version>
+   <modules>
+     <module>project-skin</module>
+     <module>project-site</module>
+Index: extras/jboss/pom.xml
+===================================================================
+--- extras/jboss/pom.xml	(revision 2122)
++++ extras/jboss/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: extras/gwt/pom.xml
+===================================================================
+--- extras/gwt/pom.xml	(revision 2122)
++++ extras/gwt/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: extras/threadpool/pom.xml
+===================================================================
+--- extras/threadpool/pom.xml	(revision 2122)
++++ extras/threadpool/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: extras/spring/pom.xml
+===================================================================
+--- extras/spring/pom.xml	(revision 2122)
++++ extras/spring/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: extras/win32service/pom.xml
+===================================================================
+--- extras/win32service/pom.xml	(revision 2122)
++++ extras/win32service/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: extras/sslengine/pom.xml
+===================================================================
+--- extras/sslengine/pom.xml	(revision 2122)
++++ extras/sslengine/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: extras/servlet-tester/pom.xml
+===================================================================
+--- extras/servlet-tester/pom.xml	(revision 2122)
++++ extras/servlet-tester/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: extras/ajp/pom.xml
+===================================================================
+--- extras/ajp/pom.xml	(revision 2122)
++++ extras/ajp/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: extras/setuid/modules/java/pom.xml
+===================================================================
+--- extras/setuid/modules/java/pom.xml	(revision 2122)
++++ extras/setuid/modules/java/pom.xml	(working copy)
+@@ -3,7 +3,7 @@
+     <parent>
+         <artifactId>jetty-setuid</artifactId>
+         <groupId>org.mortbay.jetty</groupId>
+-        <version>6.1-SNAPSHOT</version>
++        <version>__JETTY_VERSION__</version>
+         <relativePath>../../pom.xml</relativePath>
+     </parent>
+     <modelVersion>4.0.0</modelVersion>
+Index: extras/setuid/modules/native/pom.xml
+===================================================================
+--- extras/setuid/modules/native/pom.xml	(revision 2122)
++++ extras/setuid/modules/native/pom.xml	(working copy)
+@@ -5,7 +5,7 @@
+     <parent>
+         <artifactId>jetty-setuid</artifactId>
+         <groupId>org.mortbay.jetty</groupId>
+-        <version>6.1-SNAPSHOT</version>
++        <version>__JETTY_VERSION__</version>
+         <relativePath>../../pom.xml</relativePath>
+     </parent>
+     <modelVersion>4.0.0</modelVersion>
+Index: extras/setuid/pom.xml
+===================================================================
+--- extras/setuid/pom.xml	(revision 2122)
++++ extras/setuid/pom.xml	(working copy)
+@@ -3,7 +3,7 @@
+     <parent>
+         <artifactId>project</artifactId>
+         <groupId>org.mortbay.jetty</groupId>
+-        <version>6.1-SNAPSHOT</version>
++        <version>__JETTY_VERSION__</version>
+         <relativePath>../../pom.xml</relativePath>
+     </parent>
+     <modelVersion>4.0.0</modelVersion>
+Index: extras/xbean/pom.xml
+===================================================================
+--- extras/xbean/pom.xml	(revision 2122)
++++ extras/xbean/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: extras/client/pom.xml
+===================================================================
+--- extras/client/pom.xml	(revision 2122)
++++ extras/client/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+   <groupId>org.mortbay.jetty</groupId>
+Index: modules/plus/pom.xml
+===================================================================
+--- modules/plus/pom.xml	(revision 2122)
++++ modules/plus/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: modules/jsp-2.0/pom.xml
+===================================================================
+--- modules/jsp-2.0/pom.xml	(revision 2122)
++++ modules/jsp-2.0/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: modules/jsp-2.1/pom.xml
+===================================================================
+--- modules/jsp-2.1/pom.xml	(revision 2122)
++++ modules/jsp-2.1/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: modules/annotations/pom.xml
+===================================================================
+--- modules/annotations/pom.xml	(revision 2122)
++++ modules/annotations/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: modules/servlet-api-2.5/pom.xml
+===================================================================
+--- modules/servlet-api-2.5/pom.xml	(revision 2122)
++++ modules/servlet-api-2.5/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: modules/start/pom.xml
+===================================================================
+--- modules/start/pom.xml	(revision 2122)
++++ modules/start/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: modules/jetty/pom.xml
+===================================================================
+--- modules/jetty/pom.xml	(revision 2122)
++++ modules/jetty/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: modules/jspc-maven-plugin/pom.xml
+===================================================================
+--- modules/jspc-maven-plugin/pom.xml	(revision 2122)
++++ modules/jspc-maven-plugin/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: modules/jsp-api-2.0/pom.xml
+===================================================================
+--- modules/jsp-api-2.0/pom.xml	(revision 2122)
++++ modules/jsp-api-2.0/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: modules/jsp-api-2.1/pom.xml
+===================================================================
+--- modules/jsp-api-2.1/pom.xml	(revision 2122)
++++ modules/jsp-api-2.1/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: modules/maven-plugin/pom.xml
+===================================================================
+--- modules/maven-plugin/pom.xml	(revision 2122)
++++ modules/maven-plugin/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: modules/html/pom.xml
+===================================================================
+--- modules/html/pom.xml	(revision 2122)
++++ modules/html/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: modules/naming/pom.xml
+===================================================================
+--- modules/naming/pom.xml	(revision 2122)
++++ modules/naming/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: modules/management/pom.xml
+===================================================================
+--- modules/management/pom.xml	(revision 2122)
++++ modules/management/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: modules/util/pom.xml
+===================================================================
+--- modules/util/pom.xml	(revision 2122)
++++ modules/util/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: examples/tests/pom.xml
+===================================================================
+--- examples/tests/pom.xml	(revision 2122)
++++ examples/tests/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: examples/spring-ebj3-demo/pom.xml
+===================================================================
+--- examples/spring-ebj3-demo/pom.xml	(revision 2122)
++++ examples/spring-ebj3-demo/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+   <groupId>org.mortbay.jetty</groupId>
+Index: examples/test-jaas-webapp/pom.xml
+===================================================================
+--- examples/test-jaas-webapp/pom.xml	(revision 2122)
++++ examples/test-jaas-webapp/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: examples/embedded/pom.xml
+===================================================================
+--- examples/embedded/pom.xml	(revision 2122)
++++ examples/embedded/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: examples/test-annotations/pom.xml
+===================================================================
+--- examples/test-annotations/pom.xml	(revision 2122)
++++ examples/test-annotations/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: examples/test-webapp/pom.xml
+===================================================================
+--- examples/test-webapp/pom.xml	(revision 2122)
++++ examples/test-webapp/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: examples/test-jndi-webapp/pom.xml
+===================================================================
+--- examples/test-jndi-webapp/pom.xml	(revision 2122)
++++ examples/test-jndi-webapp/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: contrib/jetty-ant/pom.xml
+===================================================================
+--- contrib/jetty-ant/pom.xml	(revision 505)
++++ contrib/jetty-ant/pom.xml	(working copy)
+@@ -3,7 +3,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+   </parent>
+ 	<modelVersion>4.0.0</modelVersion>
+   <groupId>org.mortbay.jetty</groupId>
+Index: contrib/jetty-ant-demo/build.xml
+===================================================================
+--- contrib/jetty-ant-demo/build.xml	(revision 505)
++++ contrib/jetty-ant-demo/build.xml	(working copy)
+@@ -1,9 +1,9 @@
+ <project name="Test application" basedir=".">
+   <property name="project.outputDirectory" value="target" />
+-  <property name="project.version" value="6.1-SNAPSHOT" />
++  <property name="project.version" value="__JETTY_VERSION__" />
+   <property name="M2_REPO" value="${user.home}/.m2/repository/" />
+ 
+-  <property name="jetty.version" value="6.1-SNAPSHOT" />
++  <property name="jetty.version" value="__JETTY_VERSION__" />
+ 
+   <path id="jetty.plugin.classpath">
+     <fileset dir="${M2_REPO}">
+Index: contrib/wadi/pom.xml
+===================================================================
+--- contrib/wadi/pom.xml	(revision 505)
++++ contrib/wadi/pom.xml	(working copy)
+@@ -2,13 +2,13 @@
+   <!--parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent-->
+   <modelVersion>4.0.0</modelVersion>
+   <groupId>org.mortbay.jetty</groupId>
+   <artifactId>jetty-wadi-session-manager</artifactId>
+-  <version>6.1-SNAPSHOT</version>
++  <version>__JETTY_VERSION__</version>
+   <name>Wadi - Jetty Session Cache</name>
+   <url>http://jetty.mortbay.org</url>
+   <licenses>
+Index: contrib/jetty-deb/modules/jetty-deb-package/pom.xml
+===================================================================
+--- contrib/jetty-deb/modules/jetty-deb-package/pom.xml	(revision 505)
++++ contrib/jetty-deb/modules/jetty-deb-package/pom.xml	(working copy)
+@@ -3,13 +3,13 @@
+     <parent>
+         <artifactId>project</artifactId>
+         <groupId>org.mortbay.jetty</groupId>
+-        <version>6.1-SNAPSHOT</version>
++        <version>__JETTY_VERSION__</version>
+         <relativePath>../../pom.xml</relativePath>
+     </parent>
+     <modelVersion>4.0.0</modelVersion>
+     <groupId>org.mortbay.jetty</groupId>
+     <artifactId>jetty-deb-package</artifactId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <name>Jetty Debian Package</name>
+     <packaging>pom</packaging>
+     <licenses>
+@@ -142,4 +142,4 @@
+     <properties>
+         <deb-install-root>/usr/local/jetty/jetty-${project.version}</deb-install-root>
+     </properties>
+-</project>
+\ No newline at end of file
++</project>
+Index: contrib/jetty-deb/modules/maven-deb-plugin/pom.xml
+===================================================================
+--- contrib/jetty-deb/modules/maven-deb-plugin/pom.xml	(revision 505)
++++ contrib/jetty-deb/modules/maven-deb-plugin/pom.xml	(working copy)
+@@ -5,7 +5,7 @@
+     <parent>
+         <artifactId>project</artifactId>
+         <groupId>org.mortbay.jetty</groupId>
+-        <version>6.1-SNAPSHOT</version>
++        <version>__JETTY_VERSION__</version>
+         <relativePath>../../pom.xml</relativePath>
+     </parent>
+ 
+Index: contrib/jetty-deb/pom.xml
+===================================================================
+--- contrib/jetty-deb/pom.xml	(revision 505)
++++ contrib/jetty-deb/pom.xml	(working copy)
+@@ -3,14 +3,14 @@
+     <parent>
+         <artifactId>project</artifactId>
+         <groupId>org.mortbay.jetty</groupId>
+-        <version>6.1-SNAPSHOT</version>
++        <version>__JETTY_VERSION__</version>
+         <relativePath>../../pom.xml</relativePath>
+     </parent>
+ 
+     <modelVersion>4.0.0</modelVersion>
+     <groupId>org.mortbay.jetty</groupId>
+     <artifactId>jetty-deb-package-parent</artifactId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <name>Jetty Deb Package-parent</name>
+     <packaging>pom</packaging>
+     <licenses>
+Index: contrib/terracotta/pom.xml
+===================================================================
+--- contrib/terracotta/pom.xml	(revision 505)
++++ contrib/terracotta/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+   </parent>
+ 
+   <modelVersion>4.0.0</modelVersion>
+Index: contrib/j2se6/pom.xml
+===================================================================
+--- contrib/j2se6/pom.xml	(revision 505)
++++ contrib/j2se6/pom.xml	(working copy)
+@@ -3,7 +3,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+   </parent>
+ 	<modelVersion>4.0.0</modelVersion>
+   <groupId>org.mortbay.jetty</groupId>
+Index: contrib/grizzly/pom.xml
+===================================================================
+--- contrib/grizzly/pom.xml	(revision 505)
++++ contrib/grizzly/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: contrib/cometd/demo/bin/runTerracottaNode.sh
+===================================================================
+--- contrib/cometd/demo/bin/runTerracottaNode.sh	(revision 505)
++++ contrib/cometd/demo/bin/runTerracottaNode.sh	(working copy)
+@@ -8,7 +8,7 @@
+ cd $(dirname $0)/..
+ DEMO_HOME=$(pwd)
+ JETTY_HOME=../..
+-JETTY_VERSION=6.1-SNAPSHOT
++JETTY_VERSION=__JETTY_VERSION__
+ 
+ TC_HOME=/java/terracotta-trunk
+ TC_BOOT_JAR=$TC_HOME/dso-boot-hotspot_linux_150_08.jar
+Index: contrib/cometd/demo/pom.xml
+===================================================================
+--- contrib/cometd/demo/pom.xml	(revision 505)
++++ contrib/cometd/demo/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>cometd</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: contrib/cometd/api/pom.xml
+===================================================================
+--- contrib/cometd/api/pom.xml	(revision 505)
++++ contrib/cometd/api/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>cometd</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+Index: contrib/cometd/pom.xml
+===================================================================
+--- contrib/cometd/pom.xml	(revision 505)
++++ contrib/cometd/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>project</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+   <groupId>org.mortbay.jetty</groupId>
+Index: contrib/cometd/bayeux/pom.xml
+===================================================================
+--- contrib/cometd/bayeux/pom.xml	(revision 505)
++++ contrib/cometd/bayeux/pom.xml	(working copy)
+@@ -2,7 +2,7 @@
+   <parent>
+     <artifactId>cometd</artifactId>
+     <groupId>org.mortbay.jetty</groupId>
+-    <version>6.1-SNAPSHOT</version>
++    <version>__JETTY_VERSION__</version>
+     <relativePath>../pom.xml</relativePath>
+   </parent>
+   <modelVersion>4.0.0</modelVersion>
+_EOF_
diff --git a/solr/jetty/bin/jetty-service.conf b/solr/jetty/bin/jetty-service.conf
new file mode 100644
index 0000000000000000000000000000000000000000..5f681f449aba8d6bdb50749b29f3a21a194e22d9
--- /dev/null
+++ b/solr/jetty/bin/jetty-service.conf
@@ -0,0 +1,27 @@
+wrapper.java.classpath.1=../lib/win32/*.jar
+wrapper.java.classpath.2=../lib/*.jar
+wrapper.java.classpath.3=../start.jar
+wrapper.java.library.path.1=../lib/win32/
+wrapper.java.additional.1=-Djetty.home=../
+wrapper.java.additional.2=-Djetty.logs=../logs
+wrapper.java.initmemory=3
+wrapper.java.maxmemory=64
+wrapper.java.mainclass=org.mortbay.jetty.win32service.JettyServiceWrapperListener
+wrapper.app.parameter.1=../etc/jetty.xml
+wrapper.console.format=PM
+wrapper.console.loglevel=INFO
+wrapper.logfile=../logs/jetty-service.log
+wrapper.logfile.format=LPTM
+wrapper.logfile.loglevel=INFO
+wrapper.logfile.maxsize=0
+wrapper.logfile.maxfiles=0
+wrapper.syslog.loglevel=NONE
+wrapper.ntservice.name=Jetty
+wrapper.ntservice.displayname=Jetty6-Service
+wrapper.ntservice.description=Jetty is an open-source, standards-based, full-featured web server implemented entirely in java
+wrapper.ntservice.starttype=AUTO_START
+wrapper.ntservice.interactive=false
+
+
+wrapper.filter.trigger.1=java.lang.OutOfMemoryError
+wrapper.filter.action.1=RESTART
diff --git a/solr/jetty/bin/jetty.sh b/solr/jetty/bin/jetty.sh
new file mode 100644
index 0000000000000000000000000000000000000000..6ad8d25318a691dfd3fb1b1c30efa78a4c30134f
--- /dev/null
+++ b/solr/jetty/bin/jetty.sh
@@ -0,0 +1,631 @@
+#!/bin/bash  
+#
+# Startup script for jetty under *nix systems (it works under NT/cygwin too).
+#
+# Configuration files
+#
+# /etc/default/jetty
+#   If it exists, this is read at the start of script. It may perform any 
+#   sequence of shell commands, like setting relevant environment variables.
+#
+# $HOME/.jettyrc
+#   If it exists, this is read at the start of script. It may perform any 
+#   sequence of shell commands, like setting relevant environment variables.
+#
+# /etc/jetty.conf
+#   If found, and no configurations were given on the command line,
+#   the file will be used as this script's configuration. 
+#   Each line in the file may contain:
+#     - A comment denoted by the pound (#) sign as first non-blank character.
+#     - The path to a regular file, which will be passed to jetty as a 
+#       config.xml file.
+#     - The path to a directory. Each *.xml file in the directory will be
+#       passed to jetty as a config.xml file.
+#
+#   The files will be checked for existence before being passed to jetty.
+#
+# $JETTY_HOME/etc/jetty.xml
+#   If found, used as this script's configuration file, but only if
+#   /etc/jetty.conf was not present. See above.
+#   
+# Configuration variables
+#
+# JAVA_HOME  
+#   Home of Java installation. 
+#
+# JAVA
+#   Command to invoke Java. If not set, $JAVA_HOME/bin/java will be
+#   used.
+#
+# JAVA_OPTIONS
+#   Extra options to pass to the JVM
+#
+# JETTY_HOME
+#   Where Jetty is installed. If not set, the script will try go
+#   guess it by first looking at the invocation path for the script,
+#   and then by looking in standard locations as $HOME/opt/jetty
+#   and /opt/jetty. The java system property "jetty.home" will be
+#   set to this value for use by configure.xml files, f.e.:
+#
+#    <Arg><SystemProperty name="jetty.home" default="."/>/webapps/jetty.war</Arg>
+#
+# JETTY_PORT
+#   Override the default port for Jetty servers. If not set then the
+#   default value in the xml configuration file will be used. The java
+#   system property "jetty.port" will be set to this value for use in
+#   configure.xml files. For example, the following idiom is widely
+#   used in the demo config files to respect this property in Listener
+#   configuration elements:
+#
+#    <Set name="Port"><SystemProperty name="jetty.port" default="8080"/></Set>
+#
+#   Note: that the config file could ignore this property simply by saying:
+#
+#    <Set name="Port">8080</Set>
+#
+# JETTY_RUN
+#   Where the jetty.pid file should be stored. It defaults to the
+#   first available of /var/run, /usr/var/run, and /tmp if not set.
+#  
+# JETTY_PID
+#   The Jetty PID file, defaults to $JETTY_RUN/jetty.pid
+#   
+# JETTY_ARGS
+#   The default arguments to pass to jetty.
+#
+# JETTY_USER
+#   if set, then used as a username to run the server as
+#
+
+usage()
+{
+    echo "Usage: $0 {start|stop|run|restart|check|supervise} [ CONFIGS ... ] "
+    exit 1
+}
+
+[ $# -gt 0 ] || usage
+
+
+##################################################
+# Some utility functions
+##################################################
+findDirectory()
+{
+    OP=$1
+    shift
+    for L in $* ; do
+        [ $OP $L ] || continue 
+        echo $L
+        break
+    done 
+}
+
+running()
+{
+    [ -f $1 ] || return 1
+    PID=$(cat $1)
+    ps -p $PID >/dev/null 2>/dev/null || return 1
+    return 0
+}
+
+
+
+
+
+
+
+##################################################
+# Get the action & configs
+##################################################
+
+ACTION=$1
+shift
+ARGS="$*"
+CONFIGS=""
+NO_START=0
+TMP=/tmp
+
+##################################################
+# See if there's a default configuration file
+##################################################
+if [ -f /etc/default/jetty6 ] ; then 
+  . /etc/default/jetty6
+elif [ -f /etc/default/jetty ] ; then 
+  . /etc/default/jetty
+fi
+
+
+##################################################
+# See if there's a user-specific configuration file
+##################################################
+if [ -f $HOME/.jettyrc ] ; then 
+  . $HOME/.jettyrc
+fi
+
+
+##################################################
+# Jetty's hallmark
+##################################################
+JETTY_INSTALL_TRACE_FILE="etc/jetty.xml"
+TMPJ=$TMP/j$$
+
+
+##################################################
+# Try to determine JETTY_HOME if not set
+##################################################
+if [ -z "$JETTY_HOME" ] 
+then
+  JETTY_HOME_1=`dirname "$0"`
+  JETTY_HOME_1=`dirname "$JETTY_HOME_1"`
+  if [ -f "${JETTY_HOME_1}/${JETTY_INSTALL_TRACE_FILE}" ] ; 
+  then 
+     JETTY_HOME=${JETTY_HOME_1} 
+  fi
+fi
+
+
+##################################################
+# if no JETTY_HOME, search likely locations.
+##################################################
+if [ "$JETTY_HOME" = "" ] ; then
+  STANDARD_LOCATIONS="           \
+        /usr/share               \
+        /usr/share/java          \
+        $HOME                    \
+        $HOME/src                \
+        ${HOME}/opt/             \
+        /opt                     \
+        /java                    \
+        /usr/local               \
+        /usr/local/share         \
+        /usr/local/share/java    \
+        /home                    \
+        "
+  JETTY_DIR_NAMES="              \
+        jetty-6                  \
+        jetty6                   \
+        jetty-6.*                \
+        jetty                    \
+        Jetty-6                  \
+        Jetty6                   \
+        Jetty-6.*                \
+        Jetty                    \
+        "
+        
+  JETTY_HOME=
+  for L in $STANDARD_LOCATIONS 
+  do
+     for N in $JETTY_DIR_NAMES 
+     do
+         if [ -d $L/$N ] && [ -f "$L/${N}/${JETTY_INSTALL_TRACE_FILE}" ] ; 
+         then 
+            JETTY_HOME="$L/$N"
+         fi
+     done
+     [ ! -z "$JETTY_HOME" ] && break
+  done
+fi
+
+
+##################################################
+# No JETTY_HOME yet? We're out of luck!
+##################################################
+if [ -z "$JETTY_HOME" ] ; then
+    echo "** ERROR: JETTY_HOME not set, you need to set it or install in a standard location" 
+    exit 1
+fi
+
+cd $JETTY_HOME
+JETTY_HOME=`pwd`
+
+
+#####################################################
+# Check that jetty is where we think it is
+#####################################################
+if [ ! -r $JETTY_HOME/$JETTY_INSTALL_TRACE_FILE ] 
+then
+   echo "** ERROR: Oops! Jetty doesn't appear to be installed in $JETTY_HOME"
+   echo "** ERROR:  $JETTY_HOME/$JETTY_INSTALL_TRACE_FILE is not readable!"
+   exit 1
+fi
+
+
+###########################################################
+# Get the list of config.xml files from the command line.
+###########################################################
+if [ ! -z "$ARGS" ] 
+then
+  for A in $ARGS 
+  do
+    if [ -f $A ] 
+    then
+       CONF="$A" 
+    elif [ -f $JETTY_HOME/etc/$A ] 
+    then
+       CONF="$JETTY_HOME/etc/$A" 
+    elif [ -f ${A}.xml ] 
+    then
+       CONF="${A}.xml" 
+    elif [ -f $JETTY_HOME/etc/${A}.xml ] 
+    then
+       CONF="$JETTY_HOME/etc/${A}.xml" 
+    else
+       echo "** ERROR: Cannot find configuration '$A' specified in the command line." 
+       exit 1
+    fi
+    if [ ! -r $CONF ] 
+    then
+       echo "** ERROR: Cannot read configuration '$A' specified in the command line." 
+       exit 1
+    fi
+    CONFIGS="$CONFIGS $CONF"
+  done
+fi
+
+
+##################################################
+# Try to find this script's configuration file,
+# but only if no configurations were given on the
+# command line.
+##################################################
+if [ -z "$JETTY_CONF" ] 
+then
+  if [ -f /etc/jetty.conf ]
+  then
+     JETTY_CONF=/etc/jetty.conf
+  elif [ -f "${JETTY_HOME}/etc/jetty.conf" ]
+  then
+     JETTY_CONF="${JETTY_HOME}/etc/jetty.conf"
+  fi
+fi
+
+##################################################
+# Read the configuration file if one exists
+##################################################
+CONFIG_LINES=
+if [ -z "$CONFIGS" ] && [ -f "$JETTY_CONF" ] && [ -r "$JETTY_CONF" ] 
+then
+  CONFIG_LINES=`cat $JETTY_CONF | grep -v "^[:space:]*#" | tr "\n" " "` 
+fi
+
+##################################################
+# Get the list of config.xml files from jetty.conf
+##################################################
+if [ ! -z "${CONFIG_LINES}" ] 
+then
+  for CONF in ${CONFIG_LINES} 
+  do
+    if [ ! -r "$CONF" ] 
+    then
+      echo "** WARNING: Cannot read '$CONF' specified in '$JETTY_CONF'" 
+    elif [ -f "$CONF" ] 
+    then
+      # assume it's a configure.xml file
+      CONFIGS="$CONFIGS $CONF" 
+    elif [ -d "$CONF" ] 
+    then
+      # assume it's a directory with configure.xml files
+      # for example: /etc/jetty.d/
+      # sort the files before adding them to the list of CONFIGS
+      XML_FILES=`ls ${CONF}/*.xml | sort | tr "\n" " "` 
+      for FILE in ${XML_FILES} 
+      do
+         if [ -r "$FILE" ] && [ -f "$FILE" ] 
+         then
+            CONFIGS="$CONFIGS $FILE" 
+         else
+           echo "** WARNING: Cannot read '$FILE' specified in '$JETTY_CONF'" 
+         fi
+      done
+    else
+      echo "** WARNING: Don''t know what to do with '$CONF' specified in '$JETTY_CONF'" 
+    fi
+  done
+fi
+
+#####################################################
+# Run the standard server if there's nothing else to run
+#####################################################
+if [ -z "$CONFIGS" ] 
+then
+    CONFIGS="${JETTY_HOME}/etc/jetty-logging.xml ${JETTY_HOME}/etc/jetty.xml"
+fi
+
+
+#####################################################
+# Find a location for the pid file
+#####################################################
+if [  -z "$JETTY_RUN" ] 
+then
+  JETTY_RUN=`findDirectory -w /var/run /usr/var/run /tmp`
+fi
+
+#####################################################
+# Find a PID for the pid file
+#####################################################
+if [  -z "$JETTY_PID" ] 
+then
+  JETTY_PID="$JETTY_RUN/jetty.pid"
+fi
+
+
+##################################################
+# Check for JAVA_HOME
+##################################################
+if [ -z "$JAVA_HOME" ]
+then
+    # If a java runtime is not defined, search the following
+    # directories for a JVM and sort by version. Use the highest
+    # version number.
+
+    # Java search path
+    JAVA_LOCATIONS="\
+        /usr/java \
+        /usr/bin \
+        /usr/local/bin \
+        /usr/local/java \
+        /usr/local/jdk \
+        /usr/local/jre \
+	/usr/lib/jvm \
+        /opt/java \
+        /opt/jdk \
+        /opt/jre \
+    " 
+    JAVA_NAMES="java jdk jre"
+    for N in $JAVA_NAMES ; do
+        for L in $JAVA_LOCATIONS ; do
+            [ -d $L ] || continue 
+            find $L -name "$N" ! -type d | grep -v threads | while read J ; do
+                [ -x $J ] || continue
+                VERSION=`eval $J -version 2>&1`       
+                [ $? = 0 ] || continue
+                VERSION=`expr "$VERSION" : '.*"\(1.[0-9\.]*\)["_]'`
+                [ "$VERSION" = "" ] && continue
+                expr $VERSION \< 1.2 >/dev/null && continue
+                echo $VERSION:$J
+            done
+        done
+    done | sort | tail -1 > $TMPJ
+    JAVA=`cat $TMPJ | cut -d: -f2`
+    JVERSION=`cat $TMPJ | cut -d: -f1`
+
+    JAVA_HOME=`dirname $JAVA`
+    while [ ! -z "$JAVA_HOME" -a "$JAVA_HOME" != "/" -a ! -f "$JAVA_HOME/lib/tools.jar" ] ; do
+        JAVA_HOME=`dirname $JAVA_HOME`
+    done
+    [ "$JAVA_HOME" = "" ] && JAVA_HOME=
+
+    echo "Found JAVA=$JAVA in JAVA_HOME=$JAVA_HOME"
+fi
+
+
+##################################################
+# Determine which JVM of version >1.2
+# Try to use JAVA_HOME
+##################################################
+if [ "$JAVA" = "" -a "$JAVA_HOME" != "" ]
+then
+  if [ ! -z "$JAVACMD" ] 
+  then
+     JAVA="$JAVACMD" 
+  else
+    [ -x $JAVA_HOME/bin/jre -a ! -d $JAVA_HOME/bin/jre ] && JAVA=$JAVA_HOME/bin/jre
+    [ -x $JAVA_HOME/bin/java -a ! -d $JAVA_HOME/bin/java ] && JAVA=$JAVA_HOME/bin/java
+  fi
+fi
+
+if [ "$JAVA" = "" ]
+then
+    echo "Cannot find a JRE or JDK. Please set JAVA_HOME to a >=1.2 JRE" 2>&2
+    exit 1
+fi
+
+JAVA_VERSION=`expr "$($JAVA -version 2>&1 | head -1)" : '.*1\.\([0-9]\)'`
+
+#####################################################
+# See if JETTY_PORT is defined
+#####################################################
+if [ "$JETTY_PORT" != "" ] 
+then
+  JAVA_OPTIONS="$JAVA_OPTIONS -Djetty.port=$JETTY_PORT"
+fi
+
+#####################################################
+# See if JETTY_LOGS is defined
+#####################################################
+if [ "$JETTY_LOGS" != "" ]
+then
+  JAVA_OPTIONS="$JAVA_OPTIONS -Djetty.logs=$JETTY_LOGS"
+fi
+
+#####################################################
+# Are we running on Windows? Could be, with Cygwin/NT.
+#####################################################
+case "`uname`" in
+CYGWIN*) PATH_SEPARATOR=";";;
+*) PATH_SEPARATOR=":";;
+esac
+
+
+#####################################################
+# Add jetty properties to Java VM options.
+#####################################################
+JAVA_OPTIONS="$JAVA_OPTIONS -Djetty.home=$JETTY_HOME -Djava.io.tmpdir=$TMP"
+
+[ -f $JETTY_HOME/etc/start.config ] && JAVA_OPTIONS="-DSTART=$JETTY_HOME/etc/start.config $JAVA_OPTIONS"
+
+#####################################################
+# This is how the Jetty server will be started
+#####################################################
+
+JETTY_START=$JETTY_HOME/start.jar
+[ ! -f $JETTY_START ] && JETTY_START=$JETTY_HOME/lib/start.jar
+
+RUN_ARGS="$JAVA_OPTIONS -jar $JETTY_START $JETTY_ARGS $CONFIGS"
+RUN_CMD="$JAVA $RUN_ARGS"
+
+#####################################################
+# Comment these out after you're happy with what 
+# the script is doing.
+#####################################################
+#echo "JETTY_HOME     =  $JETTY_HOME"
+#echo "JETTY_CONF     =  $JETTY_CONF"
+#echo "JETTY_RUN      =  $JETTY_RUN"
+#echo "JETTY_PID      =  $JETTY_PID"
+#echo "JETTY_ARGS     =  $JETTY_ARGS"
+#echo "CONFIGS        =  $CONFIGS"
+#echo "JAVA_OPTIONS   =  $JAVA_OPTIONS"
+#echo "JAVA           =  $JAVA"
+
+
+##################################################
+# Do the action
+##################################################
+case "$ACTION" in
+  start)
+        echo -n "Starting Jetty: "
+
+        if [ "$NO_START" = "1" ]; then 
+	  echo "Not starting jetty - NO_START=1 in /etc/default/jetty6";
+          exit 0;
+	fi
+
+
+	if which start-stop-daemon > /dev/null 2>&1 
+	then
+          [ x$JETTY_USER = x ] && JETTY_USER=$(whoami)
+	  [ $UID = 0 ] && CH_USER="-c $JETTY_USER"
+	  if start-stop-daemon -S -p$JETTY_PID $CH_USER -d $JETTY_HOME -b -m -a $JAVA -- $RUN_ARGS 
+	  then
+	      sleep 1
+	      if running $JETTY_PID
+	      then
+                  echo OK
+              else
+                  echo FAILED
+              fi
+	  fi
+
+	else
+
+          if [ -f $JETTY_PID ]
+          then
+            echo "Already Running!!"
+            exit 1
+          fi
+
+          if [ x$JETTY_USER != x ] 
+          then
+              touch $JETTY_PID
+              chown $JETTY_USER $JETTY_PID
+              su - $JETTY_USER -c "
+                $RUN_CMD &
+                PID=\$!
+                disown \$PID
+                echo \$PID > $JETTY_PID"
+          else
+              $RUN_CMD &
+              PID=$!
+              disown $PID
+              echo $PID > $JETTY_PID
+          fi
+
+          echo "STARTED Jetty `date`" 
+        fi
+
+        ;;
+
+  stop)
+        echo -n "Stopping Jetty: "
+	if which start-stop-daemon > /dev/null 2>&1; then
+	  start-stop-daemon -K -p $JETTY_PID -d $JETTY_HOME -a $JAVA -s HUP 
+	  sleep 1
+	  if running $JETTY_PID
+	  then
+	      sleep 3
+	      if running $JETTY_PID
+	      then
+		  sleep 30
+	          if running $JETTY_PID
+	          then
+	             start-stop-daemon -K -p $JETTY_PID -d $JETTY_HOME -a $JAVA -s KILL
+		  fi
+              fi
+	  fi
+
+	  rm -f $JETTY_PID
+          echo OK
+	else
+	  PID=`cat $JETTY_PID 2>/dev/null`
+          TIMEOUT=30
+          while running $JETTY_PID && [ $TIMEOUT -gt 0 ]
+          do
+            kill $PID 2>/dev/null
+            sleep 1
+            let TIMEOUT=$TIMEOUT-1
+          done
+          
+          [ $TIMEOUT -gt 0 ] || kill -9 $PID 2>/dev/null
+
+	  rm -f $JETTY_PID
+          echo OK
+	fi
+        ;;
+
+  restart)
+        $0 stop $*
+        sleep 5
+        $0 start $*
+        ;;
+
+  supervise)
+       #
+       # Under control of daemontools supervise monitor which
+       # handles restarts and shutdowns via the svc program.
+       #
+         exec $RUN_CMD
+         ;;
+
+  run|demo)
+        echo "Running Jetty: "
+
+        if [ -f $JETTY_PID ]
+        then
+            echo "Already Running!!"
+            exit 1
+        fi
+
+        exec $RUN_CMD
+        ;;
+
+  check)
+        echo "Checking arguments to Jetty: "
+        echo "JETTY_HOME     =  $JETTY_HOME"
+        echo "JETTY_CONF     =  $JETTY_CONF"
+        echo "JETTY_RUN      =  $JETTY_RUN"
+        echo "JETTY_PID      =  $JETTY_PID"
+        echo "JETTY_PORT     =  $JETTY_PORT"
+        echo "JETTY_LOGS     =  $JETTY_LOGS"
+        echo "CONFIGS        =  $CONFIGS"
+        echo "JAVA_OPTIONS   =  $JAVA_OPTIONS"
+        echo "JAVA           =  $JAVA"
+        echo "CLASSPATH      =  $CLASSPATH"
+        echo "RUN_CMD        =  $RUN_CMD"
+        echo
+        
+        if [ -f $JETTY_RUN/jetty.pid ]
+        then
+            echo "Jetty running pid="`cat $JETTY_RUN/jetty.pid`
+            exit 0
+        fi
+        exit 1
+        ;;
+
+*)
+        usage
+	;;
+esac
+
+exit 0
+
+
diff --git a/solr/jetty/etc/jetty-win32-service.xml b/solr/jetty/etc/jetty-win32-service.xml
new file mode 100644
index 0000000000000000000000000000000000000000..20287ce77228a94ab23fa2c9db35ffd870ad9180
--- /dev/null
+++ b/solr/jetty/etc/jetty-win32-service.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
+
+<!-- =============================================================== -->
+<!-- Configure the Jetty Server                                      -->
+<!--                                                                 -->
+<!-- Documentation of this file format can be found at:              -->
+<!-- http://docs.codehaus.org/display/JETTY/jetty.xml                -->
+<!--                                                                 -->
+<!-- =============================================================== -->
+
+
+<Configure id="Server" class="org.mortbay.jetty.Server">
+
+    
+    <Call name="addLifeCycle">
+      <Arg>
+        <New class="org.mortbay.jetty.win32service.Win32Service">
+          <Set name="server"><Ref id="Server"/></Set>
+        </New>
+      </Arg>
+    </Call>
+    
+    <Set name="stopAtShutdown">true</Set>
+    <!-- ensure/prevent Server: header being sent to browsers        -->
+    <Set name="sendServerVersion">true</Set>
+
+</Configure>
diff --git a/solr/jetty/etc/jetty.xml b/solr/jetty/etc/jetty.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f68a6fedb2bd8b91a488bc7753af8d2766d046e0
--- /dev/null
+++ b/solr/jetty/etc/jetty.xml
@@ -0,0 +1,206 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
+
+<!-- =============================================================== -->
+<!-- Configure the Jetty Server                                      -->
+<!--                                                                 -->
+<!-- Documentation of this file format can be found at:              -->
+<!-- http://docs.codehaus.org/display/JETTY/jetty.xml                -->
+<!--                                                                 -->
+<!-- =============================================================== -->
+
+
+<Configure id="Server" class="org.mortbay.jetty.Server">
+
+    <!-- =========================================================== -->
+    <!-- Server Thread Pool                                          -->
+    <!-- =========================================================== -->
+    <Set name="ThreadPool">
+
+      <New class="org.mortbay.thread.QueuedThreadPool">
+        <Set name="minThreads">10</Set>
+        <Set name="maxThreads">200</Set>
+        <Set name="lowThreads">20</Set>
+        <Set name="SpawnOrShrinkAt">2</Set>
+      </New>
+
+      <!-- Optional Java 5 bounded threadpool with job queue 
+      <New class="org.mortbay.thread.concurrent.ThreadPool">
+        <Set name="corePoolSize">50</Set>
+        <Set name="maximumPoolSize">50</Set>
+      </New>
+      -->
+    </Set>
+
+
+
+    <!-- =========================================================== -->
+    <!-- Set connectors                                              -->
+    <!-- =========================================================== -->
+    <!-- One of each type!                                           -->
+    <!-- =========================================================== -->
+
+    <!-- Use this connector for many frequently idle connections
+         and for threadless continuations.
+    -->    
+    <Call name="addConnector">
+      <Arg>
+          <New class="org.mortbay.jetty.nio.SelectChannelConnector">
+            <Set name="host"><SystemProperty name="jetty.host" /></Set>
+            <Set name="port"><SystemProperty name="jetty.port" default="8080"/></Set>
+            <Set name="maxIdleTime">30000</Set>
+            <Set name="Acceptors">2</Set>
+            <Set name="statsOn">false</Set>
+            <Set name="confidentialPort">8443</Set>
+	    <Set name="lowResourcesConnections">5000</Set>
+	    <Set name="lowResourcesMaxIdleTime">5000</Set>
+          </New>
+      </Arg>
+    </Call>
+
+    <!-- Use this connector if NIO is not available. 
+    <Call name="addConnector">
+      <Arg>
+          <New class="org.mortbay.jetty.bio.SocketConnector">
+            <Set name="port">8081</Set>
+            <Set name="maxIdleTime">50000</Set>
+            <Set name="lowResourceMaxIdleTime">1500</Set>
+          </New>
+      </Arg>
+    </Call>
+    -->
+
+    <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+    <!-- To add a HTTPS SSL listener                                     -->
+    <!-- see jetty-ssl.xml to add an ssl connector. use                  -->
+    <!-- java -jar start.jar etc/jetty.xml etc/jetty-ssl.xml             -->
+    <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+    
+    <!-- =========================================================== -->
+    <!-- Set up global session ID manager                            -->
+    <!-- =========================================================== -->
+    <!--
+    <Set name="sessionIdManager">
+      <New class="org.mortbay.jetty.servlet.HashSessionIdManager">
+        <Set name="workerName">node1</Set>
+      </New>
+    </Set>
+    -->
+
+    <!-- =========================================================== -->
+    <!-- Set handler Collection Structure                            --> 
+    <!-- =========================================================== -->
+    <Set name="handler">
+      <New id="Handlers" class="org.mortbay.jetty.handler.HandlerCollection">
+        <Set name="handlers">
+         <Array type="org.mortbay.jetty.Handler">
+           <Item>
+             <New id="Contexts" class="org.mortbay.jetty.handler.ContextHandlerCollection"/>
+           </Item>
+           <Item>
+             <New id="DefaultHandler" class="org.mortbay.jetty.handler.DefaultHandler"/>
+           </Item>
+           <Item>
+             <New id="RequestLog" class="org.mortbay.jetty.handler.RequestLogHandler"/>
+           </Item>
+         </Array>
+        </Set>
+      </New>
+    </Set>
+    
+    <!-- =========================================================== -->
+    <!-- Configure the context deployer                              -->
+    <!-- A context deployer will deploy contexts described in        -->
+    <!-- configuration files discovered in a directory.              -->
+    <!-- The configuration directory can be scanned for hot          -->
+    <!-- deployments at the configured scanInterval.                 -->
+    <!--                                                             -->
+    <!-- This deployer is configured to deploy contexts configured   -->
+    <!-- in the $JETTY_HOME/contexts directory                       -->
+    <!--                                                             -->
+    <!-- =========================================================== -->
+    <Call name="addLifeCycle">
+      <Arg>
+        <New class="org.mortbay.jetty.deployer.ContextDeployer">
+          <Set name="contexts"><Ref id="Contexts"/></Set>
+          <Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contexts</Set>
+          <Set name="scanInterval">1</Set>
+        </New>
+      </Arg>
+    </Call>
+
+    <!-- =========================================================== -->
+    <!-- Configure the webapp deployer.                              -->
+    <!-- A webapp  deployer will deploy standard webapps discovered  -->
+    <!-- in a directory at startup, without the need for additional  -->
+    <!-- configuration files.    It does not support hot deploy or   -->
+    <!-- non standard contexts (see ContextDeployer above).          -->
+    <!--                                                             -->
+    <!-- This deployer is configured to deploy webapps from the      -->
+    <!-- $JETTY_HOME/webapps directory                               -->
+    <!--                                                             -->
+    <!-- Normally only one type of deployer need be used.            -->
+    <!--                                                             -->
+    <!-- =========================================================== -->
+    <Call name="addLifeCycle">
+      <Arg>
+        <New class="org.mortbay.jetty.deployer.WebAppDeployer">
+          <Set name="contexts"><Ref id="Contexts"/></Set>
+          <Set name="webAppDir"><SystemProperty name="jetty.home" default="."/>/webapps</Set>
+	  <Set name="parentLoaderPriority">false</Set>
+	  <Set name="extract">true</Set>
+	  <Set name="allowDuplicates">false</Set>
+          <Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set>
+        </New>
+      </Arg>
+    </Call>
+
+    <!-- =========================================================== -->
+    <!-- Configure Authentication Realms                             -->
+    <!-- Realms may be configured for the entire server here, or     -->
+    <!-- they can be configured for a specific web app in a context  -->
+    <!-- configuration (see $(jetty.home)/contexts/test.xml for an   -->
+    <!-- example).                                                   -->
+    <!-- =========================================================== -->
+    <Set name="UserRealms">
+      <Array type="org.mortbay.jetty.security.UserRealm">
+        <Item>
+          <New class="org.mortbay.jetty.security.HashUserRealm">
+            <Set name="name">Test Realm</Set>
+            <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set>
+            <Set name="refreshInterval">0</Set>
+          </New>
+        </Item>
+      </Array>
+    </Set>
+
+    <!-- =========================================================== -->
+    <!-- Configure Request Log                                       -->
+    <!-- Request logs  may be configured for the entire server here, -->
+    <!-- or they can be configured for a specific web app in a       -->
+    <!-- contexts configuration (see $(jetty.home)/contexts/test.xml -->
+    <!-- for an example).                                            -->
+    <!-- =========================================================== -->
+    <Ref id="RequestLog">
+      <Set name="requestLog">
+        <New id="RequestLogImpl" class="org.mortbay.jetty.NCSARequestLog">
+          <Set name="filename"><SystemProperty name="jetty.logs" default="./logs"/>/yyyy_mm_dd.request.log</Set>
+          <Set name="filenameDateFormat">yyyy_MM_dd</Set>
+          <Set name="retainDays">90</Set>
+          <Set name="append">true</Set>
+          <Set name="extended">true</Set>
+          <Set name="logCookies">false</Set>
+          <Set name="LogTimeZone">GMT</Set>
+        </New>
+      </Set>
+    </Ref>
+
+    <!-- =========================================================== -->
+    <!-- extra options                                               -->
+    <!-- =========================================================== -->
+    <Set name="stopAtShutdown">true</Set>
+    <Set name="sendServerVersion">true</Set>
+    <Set name="sendDateHeader">true</Set>
+    <Set name="gracefulShutdown">1000</Set>
+
+</Configure>
diff --git a/solr/jetty/etc/realm.properties b/solr/jetty/etc/realm.properties
new file mode 100644
index 0000000000000000000000000000000000000000..f9e4e7fa3cc98993b87428c51606c514c3f51757
--- /dev/null
+++ b/solr/jetty/etc/realm.properties
@@ -0,0 +1,21 @@
+#
+# This file defines users passwords and roles for a HashUserRealm
+#
+# The format is
+#  <username>: <password>[,<rolename> ...]
+#
+# Passwords may be clear text, obfuscated or checksummed.  The class 
+# org.mortbay.util.Password should be used to generate obfuscated
+# passwords or password checksums
+#
+# If DIGEST Authentication is used, the password must be in a recoverable
+# format, either plain text or OBF:.
+#
+jetty: MD5:164c88b302622e17050af52c89945d44,user
+admin: CRYPT:ad1ks..kc.1Ug,server-administrator,content-administrator,admin
+other: OBF:1xmk1w261u9r1w1c1xmq
+plain: plain
+user: password
+
+# This entry is for digest auth.  The credential is a MD5 hash of username:realmname:password
+digest: MD5:6e120743ad67abfbc385bc2bb754e297
diff --git a/solr/jetty/etc/webdefault.xml b/solr/jetty/etc/webdefault.xml
new file mode 100644
index 0000000000000000000000000000000000000000..df9fa173931e1019a276ab6db27c81dd76412749
--- /dev/null
+++ b/solr/jetty/etc/webdefault.xml
@@ -0,0 +1,402 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!-- ===================================================================== -->
+<!-- This file contains the default descriptor for web applications.       -->
+<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+<!-- The intent of this descriptor is to include jetty specific or common  -->
+<!-- configuration for all webapps.   If a context has a webdefault.xml    -->
+<!-- descriptor, it is applied before the contexts own web.xml file        -->
+<!--                                                                       -->
+<!-- A context may be assigned a default descriptor by:                    -->
+<!--  + Calling WebApplicationContext.setDefaultsDescriptor                -->
+<!--  + Passed an arg to addWebApplications                                -->
+<!--                                                                       -->
+<!-- This file is used both as the resource within the jetty.jar (which is -->
+<!-- used as the default if no explicit defaults descriptor is set) and it -->
+<!-- is copied to the etc directory of the Jetty distro and explicitly     -->
+<!-- by the jetty.xml file.                                                -->
+<!--                                                                       -->
+<!-- ===================================================================== -->
+<web-app 
+   xmlns="http://java.sun.com/xml/ns/javaee" 
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
+   metadata-complete="true"
+   version="2.5"> 
+
+  <description>
+    Default web.xml file.  
+    This file is applied to a Web application before it's own WEB_INF/web.xml file
+  </description>
+
+
+  <!-- ==================================================================== -->
+  <!-- Context params to control Session Cookies                            -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <!-- UNCOMMENT TO ACTIVATE
+  <context-param>
+    <param-name>org.mortbay.jetty.servlet.SessionDomain</param-name>
+    <param-value>127.0.0.1</param-value>
+  </context-param>
+
+  <context-param>
+    <param-name>org.mortbay.jetty.servlet.SessionPath</param-name>
+    <param-value>/</param-value>
+  </context-param>
+
+  <context-param>
+    <param-name>org.mortbay.jetty.servlet.MaxAge</param-name>
+    <param-value>-1</param-value>
+  </context-param>
+  -->
+
+  <context-param>
+    <param-name>org.mortbay.jetty.webapp.NoTLDJarPattern</param-name>
+    <param-value>start.jar|ant-.*\.jar|dojo-.*\.jar|jetty-.*\.jar|jsp-api-.*\.jar|junit-.*\.jar|servlet-api-.*\.jar|dnsns\.jar|rt\.jar|jsse\.jar|tools\.jar|sunpkcs11\.jar|sunjce_provider\.jar|xerces.*\.jar</param-value>
+  </context-param>
+            
+
+
+  <!-- ==================================================================== -->
+  <!-- The default servlet.                                                 -->
+  <!-- This servlet, normally mapped to /, provides the handling for static -->
+  <!-- content, OPTIONS and TRACE methods for the context.                  -->
+  <!-- The following initParameters are supported:                          -->
+  <!--                                                                      -->
+  <!--   acceptRanges     If true, range requests and responses are         -->
+  <!--                    supported                                         -->
+  <!--                                                                      -->
+  <!--   dirAllowed       If true, directory listings are returned if no    -->
+  <!--                    welcome file is found. Else 403 Forbidden.        -->
+  <!--                                                                      -->
+  <!--   redirectWelcome  If true, redirect welcome file requests           -->
+  <!--                    else use request dispatcher forwards              -->
+  <!--                                                                      -->
+  <!--   gzip             If set to true, then static content will be served--> 
+  <!--                    as gzip content encoded if a matching resource is -->
+  <!--                    found ending with ".gz"                           -->
+  <!--                                                                      -->
+  <!--   resoureBase      Can be set to replace the context resource base   -->
+  <!--                                                                      -->
+  <!--   relativeResourceBase                                               -->
+  <!--                    Set with a pathname relative to the base of the   -->
+  <!--                    servlet context root. Useful for only serving     -->
+  <!--                    static content from only specific subdirectories. -->
+  <!--                                                                      -->
+  <!--   useFileMappedBuffer                                                -->
+  <!--                    If set to true (the default), a  memory mapped    -->
+  <!--                    file buffer will be used to serve static content  -->
+  <!--                    when using an NIO connector. Setting this value   -->
+  <!--                    to false means that a direct buffer will be used  -->
+  <!--                    instead. If you are having trouble with Windows   -->
+  <!--                    file locking, set this to false.                  -->
+  <!--                                                                      -->
+  <!--  cacheControl      If set, all static content will have this value   -->
+  <!--                    set as the cache-control header.                  -->
+  <!--                                                                      -->
+  <!--  maxCacheSize      Maximum size of the static resource cache         -->
+  <!--                                                                      -->
+  <!--  maxCachedFileSize Maximum size of any single file in the cache      -->
+  <!--                                                                      -->
+  <!--  maxCachedFiles    Maximum number of files in the cache              -->
+  <!--                                                                      -->
+  <!--  cacheType         "nio", "bio" or "both" to determine the type(s)   -->
+  <!--                    of resource cache. A bio cached buffer may be used-->
+  <!--                    by nio but is not as efficient as a nio buffer.   -->
+  <!--                    An nio cached buffer may not be used by bio.      -->
+  <!--                                                                      -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <servlet>
+    <servlet-name>default</servlet-name>
+    <servlet-class>org.mortbay.jetty.servlet.DefaultServlet</servlet-class>
+    <init-param>
+      <param-name>acceptRanges</param-name>
+      <param-value>true</param-value>
+    </init-param>
+    <init-param>
+      <param-name>dirAllowed</param-name>
+      <param-value>true</param-value>
+    </init-param>
+    <init-param>
+      <param-name>redirectWelcome</param-name>
+      <param-value>false</param-value>
+    </init-param>
+    <init-param>
+      <param-name>maxCacheSize</param-name>
+      <param-value>256000000</param-value>
+    </init-param>
+    <init-param>
+      <param-name>maxCachedFileSize</param-name>
+      <param-value>10000000</param-value>
+    </init-param>
+    <init-param>
+      <param-name>maxCachedFiles</param-name>
+      <param-value>1000</param-value>
+    </init-param>
+    <init-param>
+      <param-name>cacheType</param-name>
+      <param-value>both</param-value>
+    </init-param>
+    <init-param>
+      <param-name>gzip</param-name>
+      <param-value>true</param-value>
+    </init-param>
+    <init-param>
+      <param-name>useFileMappedBuffer</param-name>
+      <param-value>true</param-value>
+    </init-param>  
+    <!--
+    <init-param>
+      <param-name>cacheControl</param-name>
+      <param-value>max-age=3600,public</param-value>
+    </init-param>
+    -->
+    <load-on-startup>0</load-on-startup>
+  </servlet> 
+
+  <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
+  
+
+  <!-- ==================================================================== -->
+  <!-- JSP Servlet                                                          -->
+  <!-- This is the jasper JSP servlet from the jakarta project              -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <!-- The JSP page compiler and execution servlet, which is the mechanism  -->
+  <!-- used by Glassfish to support JSP pages.  Traditionally, this servlet -->
+  <!-- is mapped to URL patterh "*.jsp".  This servlet supports the         -->
+  <!-- following initialization parameters (default values are in square    -->
+  <!-- brackets):                                                           -->
+  <!--                                                                      -->
+  <!--   checkInterval       If development is false and reloading is true, -->
+  <!--                       background compiles are enabled. checkInterval -->
+  <!--                       is the time in seconds between checks to see   -->
+  <!--                       if a JSP page needs to be recompiled. [300]    -->
+  <!--                                                                      -->
+  <!--   compiler            Which compiler Ant should use to compile JSP   -->
+  <!--                       pages.  See the Ant documenation for more      -->
+  <!--                       information. [javac]                           -->
+  <!--                                                                      -->
+  <!--   classdebuginfo      Should the class file be compiled with         -->
+  <!--                       debugging information?  [true]                 -->
+  <!--                                                                      -->
+  <!--   classpath           What class path should I use while compiling   -->
+  <!--                       generated servlets?  [Created dynamically      -->
+  <!--                       based on the current web application]          -->
+  <!--                       Set to ? to make the container explicitly set  -->
+  <!--                       this parameter.                                -->
+  <!--                                                                      -->
+  <!--   development         Is Jasper used in development mode (will check -->
+  <!--                       for JSP modification on every access)?  [true] -->
+  <!--                                                                      -->
+  <!--   enablePooling       Determines whether tag handler pooling is      -->
+  <!--                       enabled  [true]                                -->
+  <!--                                                                      -->
+  <!--   fork                Tell Ant to fork compiles of JSP pages so that -->
+  <!--                       a separate JVM is used for JSP page compiles   -->
+  <!--                       from the one Tomcat is running in. [true]      -->
+  <!--                                                                      -->
+  <!--   ieClassId           The class-id value to be sent to Internet      -->
+  <!--                       Explorer when using <jsp:plugin> tags.         -->
+  <!--                       [clsid:8AD9C840-044E-11D1-B3E9-00805F499D93]   -->
+  <!--                                                                      -->
+  <!--   javaEncoding        Java file encoding to use for generating java  -->
+  <!--                       source files. [UTF-8]                          -->
+  <!--                                                                      -->
+  <!--   keepgenerated       Should we keep the generated Java source code  -->
+  <!--                       for each page instead of deleting it? [true]   -->
+  <!--                                                                      -->
+  <!--   logVerbosityLevel   The level of detailed messages to be produced  -->
+  <!--                       by this servlet.  Increasing levels cause the  -->
+  <!--                       generation of more messages.  Valid values are -->
+  <!--                       FATAL, ERROR, WARNING, INFORMATION, and DEBUG. -->
+  <!--                       [WARNING]                                      -->
+  <!--                                                                      -->
+  <!--   mappedfile          Should we generate static content with one     -->
+  <!--                       print statement per input line, to ease        -->
+  <!--                       debugging?  [false]                            -->
+  <!--                                                                      -->
+  <!--                                                                      -->
+  <!--   reloading           Should Jasper check for modified JSPs?  [true] -->
+  <!--                                                                      -->
+  <!--   suppressSmap        Should the generation of SMAP info for JSR45   -->
+  <!--                       debugging be suppressed?  [false]              -->
+  <!--                                                                      -->
+  <!--   dumpSmap            Should the SMAP info for JSR45 debugging be    -->
+  <!--                       dumped to a file? [false]                      -->
+  <!--                       False if suppressSmap is true                  -->
+  <!--                                                                      -->
+  <!--   scratchdir          What scratch directory should we use when      -->
+  <!--                       compiling JSP pages?  [default work directory  -->
+  <!--                       for the current web application]               -->
+  <!--                                                                      -->
+  <!--   tagpoolMaxSize      The maximum tag handler pool size  [5]         -->
+  <!--                                                                      -->
+  <!--   xpoweredBy          Determines whether X-Powered-By response       -->
+  <!--                       header is added by generated servlet  [false]  -->
+  <!--                                                                      -->
+  <!-- If you wish to use Jikes to compile JSP pages:                       -->
+  <!--   Set the init parameter "compiler" to "jikes".  Define              -->
+  <!--   the property "-Dbuild.compiler.emacs=true" when starting Jetty     -->
+  <!--   to cause Jikes to emit error messages in a format compatible with  -->
+  <!--   Jasper.                                                            -->
+  <!--   If you get an error reporting that jikes can't use UTF-8 encoding, -->
+  <!--   try setting the init parameter "javaEncoding" to "ISO-8859-1".     -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <servlet id="jsp">
+    <servlet-name>jsp</servlet-name>
+    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
+    <init-param>
+        <param-name>logVerbosityLevel</param-name>
+        <param-value>DEBUG</param-value>
+    </init-param>
+    <init-param>
+        <param-name>fork</param-name>
+        <param-value>false</param-value>
+    </init-param>
+    <init-param>
+        <param-name>xpoweredBy</param-name>
+        <param-value>false</param-value>
+    </init-param>
+    <!--  
+    <init-param>
+        <param-name>classpath</param-name>
+        <param-value>?</param-value>
+    </init-param>
+    -->
+    <load-on-startup>0</load-on-startup>
+  </servlet>
+
+  <servlet-mapping> 
+    <servlet-name>jsp</servlet-name> 
+    <url-pattern>*.jsp</url-pattern> 
+    <url-pattern>*.jspf</url-pattern>
+    <url-pattern>*.jspx</url-pattern>
+    <url-pattern>*.xsp</url-pattern>
+    <url-pattern>*.JSP</url-pattern> 
+    <url-pattern>*.JSPF</url-pattern>
+    <url-pattern>*.JSPX</url-pattern>
+    <url-pattern>*.XSP</url-pattern>
+  </servlet-mapping>
+  
+  <!-- ==================================================================== -->
+  <!-- Dynamic Servlet Invoker.                                             -->
+  <!-- This servlet invokes anonymous servlets that have not been defined   -->
+  <!-- in the web.xml or by other means. The first element of the pathInfo  -->
+  <!-- of a request passed to the envoker is treated as a servlet name for  -->
+  <!-- an existing servlet, or as a class name of a new servlet.            -->
+  <!-- This servlet is normally mapped to /servlet/*                        -->
+  <!-- This servlet support the following initParams:                       -->
+  <!--                                                                      -->
+  <!--  nonContextServlets       If false, the invoker can only load        -->
+  <!--                           servlets from the contexts classloader.    -->
+  <!--                           This is false by default and setting this  -->
+  <!--                           to true may have security implications.    -->
+  <!--                                                                      -->
+  <!--  verbose                  If true, log dynamic loads                 -->
+  <!--                                                                      -->
+  <!--  *                        All other parameters are copied to the     -->
+  <!--                           each dynamic servlet as init parameters    -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <!-- Uncomment for dynamic invocation
+  <servlet>
+    <servlet-name>invoker</servlet-name>
+    <servlet-class>org.mortbay.jetty.servlet.Invoker</servlet-class>
+    <init-param>
+      <param-name>verbose</param-name>
+      <param-value>false</param-value>
+    </init-param>
+    <init-param>
+      <param-name>nonContextServlets</param-name>
+      <param-value>false</param-value>
+    </init-param>
+    <init-param>
+      <param-name>dynamicParam</param-name>
+      <param-value>anyValue</param-value>
+    </init-param>
+    <load-on-startup>0</load-on-startup>
+  </servlet>
+
+  <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping>
+  -->
+
+
+
+  <!-- ==================================================================== -->
+  <session-config>
+    <session-timeout>30</session-timeout>
+  </session-config>
+
+  <!-- ==================================================================== -->
+  <!-- Default MIME mappings                                                -->
+  <!-- The default MIME mappings are provided by the mime.properties        -->
+  <!-- resource in the org.mortbay.jetty.jar file.  Additional or modified  -->
+  <!-- mappings may be specified here                                       -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <!-- UNCOMMENT TO ACTIVATE
+  <mime-mapping>
+    <extension>mysuffix</extension>
+    <mime-type>mymime/type</mime-type>
+  </mime-mapping>
+  -->
+
+  <!-- ==================================================================== -->
+  <welcome-file-list>
+    <welcome-file>index.html</welcome-file>
+    <welcome-file>index.htm</welcome-file>
+    <welcome-file>index.jsp</welcome-file>
+  </welcome-file-list>
+
+  <!-- ==================================================================== -->
+  <locale-encoding-mapping-list>
+    <locale-encoding-mapping><locale>ar</locale><encoding>ISO-8859-6</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>be</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>bg</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>ca</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>cs</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>da</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>de</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>el</locale><encoding>ISO-8859-7</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>en</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>es</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>et</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>fi</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>fr</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>hr</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>hu</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>is</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>it</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>iw</locale><encoding>ISO-8859-8</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>ja</locale><encoding>Shift_JIS</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>ko</locale><encoding>EUC-KR</encoding></locale-encoding-mapping>     
+    <locale-encoding-mapping><locale>lt</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>lv</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>mk</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>nl</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>no</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>pl</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>pt</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>ro</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>ru</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>sh</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>sk</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>sl</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>sq</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>sr</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>sv</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>tr</locale><encoding>ISO-8859-9</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>uk</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>zh</locale><encoding>GB2312</encoding></locale-encoding-mapping>
+    <locale-encoding-mapping><locale>zh_TW</locale><encoding>Big5</encoding></locale-encoding-mapping>   
+  </locale-encoding-mapping-list>
+  
+  <security-constraint>
+    <web-resource-collection>
+      <web-resource-name>Disable TRACE</web-resource-name>
+      <url-pattern>/</url-pattern>
+      <http-method>TRACE</http-method>
+    </web-resource-collection>
+    <auth-constraint/>
+  </security-constraint>
+  
+</web-app>
+
diff --git a/solr/jetty/lib/jetty-6.1.11.jar b/solr/jetty/lib/jetty-6.1.11.jar
new file mode 100644
index 0000000000000000000000000000000000000000..7dc9e093b40a557e0b64cf86264b6971b5dfc290
Binary files /dev/null and b/solr/jetty/lib/jetty-6.1.11.jar differ
diff --git a/solr/jetty/lib/jetty-util-6.1.11.jar b/solr/jetty/lib/jetty-util-6.1.11.jar
new file mode 100644
index 0000000000000000000000000000000000000000..dccbbe66a32e9d8d716267b472932a96cd12a905
Binary files /dev/null and b/solr/jetty/lib/jetty-util-6.1.11.jar differ
diff --git a/solr/jetty/lib/jsp-2.1/ant-1.6.5.jar b/solr/jetty/lib/jsp-2.1/ant-1.6.5.jar
new file mode 100644
index 0000000000000000000000000000000000000000..3beb3b802ffd7502ac4b4d47e0b2a75d08e30cc3
Binary files /dev/null and b/solr/jetty/lib/jsp-2.1/ant-1.6.5.jar differ
diff --git a/solr/jetty/lib/jsp-2.1/core-3.1.1.jar b/solr/jetty/lib/jsp-2.1/core-3.1.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..ae0b63586701efdc7bf03ffb0a840d50950d211c
Binary files /dev/null and b/solr/jetty/lib/jsp-2.1/core-3.1.1.jar differ
diff --git a/solr/jetty/lib/jsp-2.1/jsp-2.1.jar b/solr/jetty/lib/jsp-2.1/jsp-2.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..c6c2bc3f57c16e746e373ecfb7d092df1fddd22c
Binary files /dev/null and b/solr/jetty/lib/jsp-2.1/jsp-2.1.jar differ
diff --git a/solr/jetty/lib/jsp-2.1/jsp-api-2.1.jar b/solr/jetty/lib/jsp-2.1/jsp-api-2.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..3575aad282bad043d5ee34cef8a8e9a8cb554207
Binary files /dev/null and b/solr/jetty/lib/jsp-2.1/jsp-api-2.1.jar differ
diff --git a/solr/jetty/lib/servlet-api-2.5-6.1.11.jar b/solr/jetty/lib/servlet-api-2.5-6.1.11.jar
new file mode 100644
index 0000000000000000000000000000000000000000..221d34a7c27aa33936dc7d160848997f7820b84d
Binary files /dev/null and b/solr/jetty/lib/servlet-api-2.5-6.1.11.jar differ
diff --git a/solr/jetty/lib/win32/jetty-win32-service-java-6.1.11.jar b/solr/jetty/lib/win32/jetty-win32-service-java-6.1.11.jar
new file mode 100644
index 0000000000000000000000000000000000000000..b3e219c94ea80580a8a13bf682642c53c3c3f819
Binary files /dev/null and b/solr/jetty/lib/win32/jetty-win32-service-java-6.1.11.jar differ
diff --git a/solr/jetty/lib/win32/wrapper.dll b/solr/jetty/lib/win32/wrapper.dll
new file mode 100644
index 0000000000000000000000000000000000000000..cb553c12340ca6924776dde4961b17f0b6484271
Binary files /dev/null and b/solr/jetty/lib/win32/wrapper.dll differ
diff --git a/solr/jetty/lib/win32/wrapper.jar b/solr/jetty/lib/win32/wrapper.jar
new file mode 100644
index 0000000000000000000000000000000000000000..4db355bc3408cded7aa5380a7646bb6cb3e404ab
Binary files /dev/null and b/solr/jetty/lib/win32/wrapper.jar differ
diff --git a/solr/jetty/start.jar b/solr/jetty/start.jar
new file mode 100644
index 0000000000000000000000000000000000000000..ce65abfcdb1a810bc85777a1e6035b0b508660b5
Binary files /dev/null and b/solr/jetty/start.jar differ
diff --git a/solr/jetty/webapps/solr.war b/solr/jetty/webapps/solr.war
new file mode 100644
index 0000000000000000000000000000000000000000..3402d8be8c96629e58c6dd052965401e3e7232cd
Binary files /dev/null and b/solr/jetty/webapps/solr.war differ
diff --git a/solr/lib/apache-solr-analysis-extras-3.5.0.jar b/solr/lib/apache-solr-analysis-extras-3.5.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..998f4dec5ebbdc26f153ad5a98f33c58026a71be
Binary files /dev/null and b/solr/lib/apache-solr-analysis-extras-3.5.0.jar differ
diff --git a/solr/lib/browse-handler.jar b/solr/lib/browse-handler.jar
new file mode 100644
index 0000000000000000000000000000000000000000..7d01541861ab6d2c76afc80cf2afdcb81267a9d8
Binary files /dev/null and b/solr/lib/browse-handler.jar differ
diff --git a/solr/lib/icu4j-4_8_1_1.jar b/solr/lib/icu4j-4_8_1_1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a97d575b7d923c1c4f5deb5a735cd45fbc084230
Binary files /dev/null and b/solr/lib/icu4j-4_8_1_1.jar differ
diff --git a/solr/lib/icu4j-LICENSE-BSD_LIKE.txt b/solr/lib/icu4j-LICENSE-BSD_LIKE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6eab042334750ccaa61ac20d510ea04ef1323c89
--- /dev/null
+++ b/solr/lib/icu4j-LICENSE-BSD_LIKE.txt
@@ -0,0 +1,33 @@
+ICU License - ICU 1.8.1 and later
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1995-2008 International Business Machines Corporation and others
+
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, and/or sell copies of the
+Software, and to permit persons to whom the Software is furnished to do so,
+provided that the above copyright notice(s) and this permission notice appear
+in all copies of the Software and that both the above copyright notice(s) and
+this permission notice appear in supporting documentation.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE
+LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not
+be used in advertising or otherwise to promote the sale, use or other
+dealings in this Software without prior written authorization of the
+copyright holder.
+
+All trademarks and registered trademarks mentioned herein are the property of
+their respective owners.
diff --git a/solr/lib/icu4j-NOTICE.txt b/solr/lib/icu4j-NOTICE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..961e6510298072733d3d20a53e1d311ad74d7a16
--- /dev/null
+++ b/solr/lib/icu4j-NOTICE.txt
@@ -0,0 +1,3 @@
+ICU4J, (under contrib/icu) is licensed under an MIT styles license
+(contrib/icu/lib/ICU-LICENSE.txt) and Copyright (c) 1995-2008
+International Business Machines Corporation and others
diff --git a/solr/lib/lucene-icu-3.5.0.jar b/solr/lib/lucene-icu-3.5.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..b193d6b8437becae889fb87f218c0378d6937054
Binary files /dev/null and b/solr/lib/lucene-icu-3.5.0.jar differ
diff --git a/solr/lib/lucene-smartcn-3.5.0.jar b/solr/lib/lucene-smartcn-3.5.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..8835bd0dea2f7c427cd12b1281c408c555b30a1b
Binary files /dev/null and b/solr/lib/lucene-smartcn-3.5.0.jar differ
diff --git a/solr/lib/lucene-stempel-3.5.0.jar b/solr/lib/lucene-stempel-3.5.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..2ec86d415207e0cead52600bdebcc25cff123168
Binary files /dev/null and b/solr/lib/lucene-stempel-3.5.0.jar differ
diff --git a/solr/lib/sqlitejdbc-v053.jar b/solr/lib/sqlitejdbc-v053.jar
new file mode 100644
index 0000000000000000000000000000000000000000..776fbe311c008d29e1cf9fd1a53c9cf76cf4e7fc
Binary files /dev/null and b/solr/lib/sqlitejdbc-v053.jar differ
diff --git a/solr/reserves/conf/schema.xml b/solr/reserves/conf/schema.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ed7a1e174e4bf46ced871a03c18c1f4a1580799a
--- /dev/null
+++ b/solr/reserves/conf/schema.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" ?>
+<schema name="VuFind Course Reserves Index" version="1.2">
+  <types>
+    <fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
+    <fieldtype name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>
+    <fieldtype name="date" class="solr.DateField" sortMissingLast="true" omitNorms="true"/>
+    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
+      <analyzer type="index">
+        <tokenizer class="solr.ICUTokenizerFactory"/>
+        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
+        <filter class="solr.ICUFoldingFilterFactory"/>
+        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+      </analyzer>
+      <analyzer type="query">
+        <tokenizer class="solr.ICUTokenizerFactory"/>
+        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
+        <filter class="solr.ICUFoldingFilterFactory"/>
+        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+      </analyzer>
+    </fieldType>
+  </types>
+ <fields>
+   <field name="id" type="string" indexed="true" stored="true"/>
+   <field name="bib_id" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="course" type="text" indexed="true" stored="true"/>
+   <field name="course_id" type="string" indexed="true" stored="true"/>
+   <field name="course_str" type="string" indexed="true" stored="true"/>
+   <field name="instructor" type="text" indexed="true" stored="true"/>
+   <field name="instructor_id" type="string" indexed="true" stored="true"/>
+   <field name="instructor_str" type="string" indexed="true" stored="true"/>
+   <field name="department" type="text" indexed="true" stored="true"/>
+   <field name="department_id" type="string" indexed="true" stored="true"/>
+   <field name="department_str" type="string" indexed="true" stored="true"/>
+ </fields>
+ <uniqueKey>id</uniqueKey>
+ <defaultSearchField>course</defaultSearchField>
+ <copyField source="course"     dest="course_str"/>
+ <copyField source="instructor" dest="instructor_str"/>
+ <copyField source="department" dest="department_str"/>
+ <!-- Default Boolean Operator -->
+ <solrQueryParser defaultOperator="AND"/>
+</schema>
diff --git a/solr/reserves/conf/solrconfig.xml b/solr/reserves/conf/solrconfig.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a5c9dc0988cfaddca21d8792e372218fb99c1017
--- /dev/null
+++ b/solr/reserves/conf/solrconfig.xml
@@ -0,0 +1,639 @@
+<?xml version="1.0" ?>
+<!--
+ 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.
+-->
+
+<config>
+
+  <!-- Set this to 'false' if you want solr to continue working after it has
+    encountered an severe configuration error.  In a production environment,
+    you may want solr to keep working even if one handler is mis-configured.
+
+    You may also set this to false using by setting the system property:
+    -Dsolr.abortOnConfigurationError=false
+  -->
+  <abortOnConfigurationError>${solr.abortOnConfigurationError:true}</abortOnConfigurationError>
+
+  <!-- Controls what version of Lucene various components of Solr
+       adhere to.  Generally, you want to use the latest version to
+       get all bug fixes and improvements. It is highly recommended
+       that you fully re-index after changing this setting as it can
+       affect both how text is indexed and queried.
+    -->
+  <luceneMatchVersion>LUCENE_35</luceneMatchVersion>
+
+  <!-- Used to specify an alternate directory to hold all index data
+       other than the default ./data under the Solr home.
+       If replication is in use, this should match the replication configuration. -->
+  <dataDir>${solr.solr.home:./solr}/reserves</dataDir>
+
+  <indexDefaults>
+   <!-- Values here affect all index writers and act as a default unless overridden. -->
+    <useCompoundFile>false</useCompoundFile>
+    <mergeFactor>10</mergeFactor>
+    <!--
+      If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene will flush based on whichever limit is hit first.
+
+    -->
+    <!--<maxBufferedDocs>1000</maxBufferedDocs>-->
+    <!-- Tell Lucene when to flush documents to disk.
+      Giving Lucene more memory for indexing means faster indexing at the cost of more RAM
+
+      If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene will flush based on whichever limit is hit first.
+
+    -->
+    <ramBufferSizeMB>32</ramBufferSizeMB>
+    <maxMergeDocs>2147483647</maxMergeDocs>
+    <writeLockTimeout>1000</writeLockTimeout>
+    <commitLockTimeout>10000</commitLockTimeout>
+
+    <!--
+      Expert: Turn on Lucene's auto commit capability.
+
+      TODO: Add recommendations on why you would want to do this.
+
+      NOTE: Despite the name, this value does not have any relation to Solr's autoCommit functionality
+
+    -->
+    <!--<luceneAutoCommit>false</luceneAutoCommit>-->
+    <!--
+      Expert:
+      The Merge Policy in Lucene controls how merging is handled by Lucene.  The default in 2.3 is the LogByteSizeMergePolicy, previous
+      versions used LogDocMergePolicy.
+
+      LogByteSizeMergePolicy chooses segments to merge based on their size.  The Lucene 2.2 default, LogDocMergePolicy chose when
+      to merge based on number of documents
+
+      Other implementations of MergePolicy must have a no-argument constructor
+    -->
+    <!--<mergePolicy>org.apache.lucene.index.LogByteSizeMergePolicy</mergePolicy>-->
+
+    <!--
+      Expert:
+      The Merge Scheduler in Lucene controls how merges are performed.  The ConcurrentMergeScheduler (Lucene 2.3 default)
+      can perform merges in the background using separate threads.  The SerialMergeScheduler (Lucene 2.2 default) does not.
+    -->
+    <!--<mergeScheduler>org.apache.lucene.index.ConcurrentMergeScheduler</mergeScheduler>-->
+
+    <!--
+      As long as Solr is the only process modifying your index, it is
+      safe to use Lucene's in process locking mechanism.  But you may
+      specify one of the other Lucene LockFactory implementations in
+      the event that you have a custom situation.
+
+      none = NoLockFactory (typically only used with read only indexes)
+      single = SingleInstanceLockFactory (suggested)
+      native = NativeFSLockFactory
+      simple = SimpleFSLockFactory
+
+      ('simple' is the default for backwards compatibility with Solr 1.2)
+    -->
+    <lockType>single</lockType>
+
+    <!-- TODO: check if this are needed -->
+    <maxFieldLength>10000</maxFieldLength>
+
+  </indexDefaults>
+
+  <mainIndex>
+    <!-- options specific to the main on-disk lucene index -->
+    <useCompoundFile>false</useCompoundFile>
+    <ramBufferSizeMB>32</ramBufferSizeMB>
+    <mergeFactor>10</mergeFactor>
+    <maxMergeDocs>2147483647</maxMergeDocs>
+    <maxFieldLength>10000</maxFieldLength>
+
+    <!-- If true, unlock any held write or commit locks on startup.
+         This defeats the locking mechanism that allows multiple
+         processes to safely access a lucene index, and should be
+         used with care. -->
+    <unlockOnStartup>false</unlockOnStartup>
+  </mainIndex>
+
+  <!-- the default high-performance update handler -->
+  <updateHandler class="solr.DirectUpdateHandler2">
+
+    <!-- autocommit pending docs if certain criteria are met -->
+    <autoCommit>
+      <maxDocs>10000</maxDocs>
+      <maxTime>20000</maxTime>
+    </autoCommit>
+
+    <!-- The RunExecutableListener executes an external command.
+         exe - the name of the executable to run
+         dir - dir to use as the current working directory. default="."
+         wait - the calling thread waits until the executable returns. default="true"
+         args - the arguments to pass to the program.  default=nothing
+         env - environment variables to set.  default=nothing
+      -->
+    <!-- A postCommit event is fired after every commit or optimize command
+    <listener event="postCommit" class="solr.RunExecutableListener">
+      <str name="exe">snapshooter</str>
+      <str name="dir">solr/bin</str>
+      <bool name="wait">true</bool>
+      <arr name="args"> <str>arg1</str> <str>arg2</str> </arr>
+      <arr name="env"> <str>MYVAR=val1</str> </arr>
+    </listener>
+    -->
+    <!-- A postOptimize event is fired only after every optimize command, useful
+         in conjunction with index distribution to only distribute optimized indicies
+    <listener event="postOptimize" class="solr.RunExecutableListener">
+      <str name="exe">snapshooter</str>
+      <str name="dir">solr/bin</str>
+      <bool name="wait">true</bool>
+    </listener>
+    -->
+
+  </updateHandler>
+
+
+  <query>
+    <!-- Maximum number of clauses in a boolean query... can affect
+        range or prefix queries that expand to big boolean
+        queries.  An exception is thrown if exceeded.  -->
+    <maxBooleanClauses>1024</maxBooleanClauses>
+
+
+    <!-- Cache used by SolrIndexSearcher for filters (DocSets),
+         unordered sets of *all* documents that match a query.
+         When a new searcher is opened, its caches may be prepopulated
+         or "autowarmed" using data from caches in the old searcher.
+         autowarmCount is the number of items to prepopulate.  For LRUCache,
+         the autowarmed items will be the most recently accessed items.
+       Parameters:
+         class - the SolrCache implementation (currently only LRUCache)
+         size - the maximum number of entries in the cache
+         initialSize - the initial capacity (number of entries) of
+           the cache.  (seel java.util.HashMap)
+         autowarmCount - the number of entries to prepopulate from
+           and old cache.
+    <filterCache
+      class="solr.LRUCache"
+      size="512"
+      initialSize="512"
+      autowarmCount="256"/>
+         -->
+    <filterCache
+      class="solr.LRUCache"
+      size="300000"
+      initialSize="300000"
+      autowarmCount="50000"/>
+
+   <!-- queryResultCache caches results of searches - ordered lists of
+         document ids (DocList) based on a query, a sort, and the range
+         of documents requested.
+    <queryResultCache
+      class="solr.LRUCache"
+      size="512"
+      initialSize="512"
+      autowarmCount="256"/>
+  -->
+    <queryResultCache
+      class="solr.LRUCache"
+      size="100000"
+      initialSize="5000"
+      autowarmCount="5000"/>
+
+  <!-- documentCache caches Lucene Document objects (the stored fields for each document).
+       Since Lucene internal document ids are transient, this cache will not be autowarmed.  -->
+    <documentCache
+      class="solr.LRUCache"
+      size="50000"
+      initialSize="50000"
+      autowarmCount="10000"/>
+
+    <!-- If true, stored fields that are not requested will be loaded lazily.
+    -->
+    <enableLazyFieldLoading>false</enableLazyFieldLoading>
+
+    <!-- Example of a generic cache.  These caches may be accessed by name
+         through SolrIndexSearcher.getCache(),cacheLookup(), and cacheInsert().
+         The purpose is to enable easy caching of user/application level data.
+         The regenerator argument should be specified as an implementation
+         of solr.search.CacheRegenerator if autowarming is desired.  -->
+    <!--
+    <cache name="myUserCache"
+      class="solr.LRUCache"
+      size="4096"
+      initialSize="1024"
+      autowarmCount="1024"
+      regenerator="org.mycompany.mypackage.MyRegenerator"
+      />
+    -->
+
+   <!-- An optimization that attempts to use a filter to satisfy a search.
+         If the requested sort does not include score, then the filterCache
+         will be checked for a filter matching the query. If found, the filter
+         will be used as the source of document ids, and then the sort will be
+         applied to that.  -->
+    <useFilterForSortedQuery>true</useFilterForSortedQuery>
+
+   <!-- An optimization for use with the queryResultCache.  When a search
+         is requested, a superset of the requested number of document ids
+         are collected.  For example, if a search for a particular query
+         requests matching documents 10 through 19, and queryWindowSize is 50,
+         then documents 0 through 50 will be collected and cached.  Any further
+         requests in that range can be satisfied via the cache.  -->
+    <queryResultWindowSize>50</queryResultWindowSize>
+
+    <!-- Maximum number of documents to cache for any entry in the
+      queryResultCache. -->
+    <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
+
+    <!-- This entry enables an int hash representation for filters (DocSets)
+         when the number of items in the set is less than maxSize.  For smaller
+         sets, this representation is more memory efficient, more efficient to
+         iterate over, and faster to take intersections.  -->
+    <HashDocSet maxSize="3000" loadFactor="0.75"/>
+
+    <!-- a newSearcher event is fired whenever a new searcher is being prepared
+         and there is a current searcher handling requests (aka registered). -->
+    <!-- QuerySenderListener takes an array of NamedList and executes a
+         local query request for each NamedList in sequence. -->
+    <!--
+    <listener event="newSearcher" class="solr.QuerySenderListener">
+      <arr name="queries">
+        <lst> <str name="q">solr</str> <str name="start">0</str> <str name="rows">10</str> </lst>
+        <lst> <str name="q">rocks</str> <str name="start">0</str> <str name="rows">10</str> </lst>
+      </arr>
+    </listener>
+    -->
+
+    <!-- a firstSearcher event is fired whenever a new searcher is being
+         prepared but there is no current registered searcher to handle
+         requests or to gain autowarming data from. -->
+    <!--
+    <listener event="firstSearcher" class="solr.QuerySenderListener">
+      <arr name="queries">
+        <lst> <str name="q">fast_warm</str> <str name="start">0</str> <str name="rows">10</str> </lst>
+      </arr>
+    </listener>
+    -->
+
+    <!-- If a search request comes in and there is no current registered searcher,
+      then immediately register the still warming searcher and use it.  If
+      "false" then all requests will block until the first searcher is done
+      warming. -->
+    <useColdSearcher>false</useColdSearcher>
+
+    <!-- Maximum number of searchers that may be warming in the background
+      concurrently.  An error is returned if this limit is exceeded. Recommend
+      1-2 for read-only slaves, higher for masters w/o cache warming. -->
+    <maxWarmingSearchers>4</maxWarmingSearchers>
+
+  </query>
+
+  <!--
+    Let the dispatch filter handler /select?qt=XXX
+    handleSelect=true will use consistent error handling for /select and /update
+    handleSelect=false will use solr1.1 style error formatting
+  -->
+  <requestDispatcher handleSelect="true" >
+    <!--Make sure your system has some authentication before enabling remote streaming!  -->
+    <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" />
+
+    <!-- Set HTTP caching related parameters (for proxy caches and clients).
+
+      To get the behaviour of Solr 1.2 (ie: no caching related headers)
+      use the never304="true" option and do not specify a value for
+      <cacheControl>
+    -->
+    <!-- <httpCaching never304="true"> -->
+    <httpCaching lastModifiedFrom="openTime"
+      etagSeed="Solr">
+      <!-- lastModFrom="openTime" is the default, the Last-Modified value
+        (and validation against If-Modified-Since requests) will all be
+        relative to when the current Searcher was opened.
+        You can change it to lastModFrom="dirLastMod" if you want the
+        value to exactly corrispond to when the physical index was last
+        modified.
+
+        etagSeed="..." is an option you can change to force the ETag
+        header (and validation against If-None-Match requests) to be
+        differnet even if the index has not changed (ie: when making
+        significant changes to your config file)
+
+        lastModifiedFrom and etagSeed are both ignored if you use the
+        never304="true" option.
+      -->
+      <!-- If you include a <cacheControl> directive, it will be used to
+        generate a Cache-Control header, as well as an Expires header
+        if the value contains "max-age="
+
+        By default, no Cache-Control header is generated.
+
+        You can use the <cacheControl> option even if you have set
+        never304="true"
+      -->
+      <!-- <cacheControl>max-age=30, public</cacheControl> -->
+    </httpCaching>
+  </requestDispatcher>
+
+  <!-- requestHandler plugins... incoming queries will be dispatched to the
+     correct handler based on the qt (query type) param matching the
+     name of registered handlers.
+     The "standard" request handler is the default and will be used if qt
+     is not specified in the request.
+  -->
+  <requestHandler name="standard" class="solr.StandardRequestHandler" default="true">
+    <!-- default values for query parameters may optionally be defined here
+     <lst name="defaults">
+       <int name="rows">10</int>
+       <str name="fl">*</str>
+       <str name="version">2.1</str>
+     <lst>
+    -->
+    <lst name="defaults">
+      <str name="echoParam">explicit</str>
+    </lst>
+  </requestHandler>
+
+  <!-- DisMaxRequestHandler is an example of a request handler that
+       supports optional parameters which are passed to
+       its init() method.
+   -->
+  <requestHandler name="dismax" class="solr.DisMaxRequestHandler" >
+    <lst name="defaults">
+     <float name="tie">0.01</float>
+     <str name="qf">
+        text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
+     </str>
+     <str name="pf">
+        text^0.2 features^1.1 name^1.5 manu^1.4 manu_exact^1.9
+     </str>
+     <str name="bf">
+        ord(poplarity)^0.5 recip(rord(price),1,1000,1000)^0.3
+     </str>
+     <str name="fl">
+        id,name,price,score
+     </str>
+     <str name="mm">
+        2&lt;-1 5&lt;-2 6&lt;90%
+     </str>
+     <int name="ps">100</int>
+    </lst>
+  </requestHandler>
+  <!-- Note how you can register the same handler multiple times with
+       different names (and different init parameters)
+    -->
+  <requestHandler name="partitioned" class="solr.DisMaxRequestHandler" >
+    <lst name="defaults">
+     <str name="qf">text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0</str>
+     <str name="mm">2&lt;-1 5&lt;-2 6&lt;90%</str>
+     <!-- This is an example of using Date Math to specify a constantly
+          moving date range in a config...
+       -->
+     <str name="bq">incubationdate_dt:[* TO NOW/DAY-1MONTH]^2.2</str>
+    </lst>
+    <!-- In addition to defaults, "appends" params can be specified
+         to identify values which should be appended to the list of
+         multi-val params from the query (or the existing "defaults").
+
+         In this example, the param "fq=instock:true" will be appended to
+         any query time fq params the user may specify, as a mechanism for
+         partitioning the index, independent of any user selected filtering
+         that may also be desired (perhaps as a result of faceted searching).
+
+         NOTE: there is *absolutely* nothing a client can do to prevent these
+         "appends" values from being used, so don't use this mechanism
+         unless you are sure you always want it.
+      -->
+    <lst name="appends">
+      <str name="fq">inStock:true</str>
+    </lst>
+    <!-- "invariants" are a way of letting the Solr maintainer lock down
+         the options available to Solr clients.  Any params values
+         specified here are used regardless of what values may be specified
+         in either the query, the "defaults", or the "appends" params.
+
+         In this example, the facet.field and facet.query params are fixed,
+         limiting the facets clients can use.  Faceting is not turned on by
+         default - but if the client does specify facet=true in the request,
+         these are the only facets they will be able to see counts for;
+         regardless of what other facet.field or facet.query params they
+         may specify.
+
+         NOTE: there is *absolutely* nothing a client can do to prevent these
+         "invariants" values from being used, so don't use this mechanism
+         unless you are sure you always want it.
+      -->
+    <lst name="invariants">
+      <str name="facet.field">cat</str>
+      <str name="facet.field">manu_exact</str>
+      <str name="facet.query">price:[* TO 500]</str>
+      <str name="facet.query">price:[500 TO *]</str>
+    </lst>
+  </requestHandler>
+
+    <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
+      <lst name="defaults">
+        <str name="mlt.fl">manu,cat</str>
+        <int name="mlt.mindf">1</int>
+      </lst>
+    </requestHandler>
+
+    <!-- Search component for extracting terms -->
+    <searchComponent name="term" class="org.apache.solr.handler.component.TermsComponent">
+    </searchComponent>
+
+    <!--
+
+      Search components are registered to SolrCore and used by Search Handlers
+
+      By default, the following components are avaliable:
+
+      <searchComponent name="query"     class="org.apache.solr.handler.component.QueryComponent" />
+      <searchComponent name="facet"     class="org.apache.solr.handler.component.FacetComponent" />
+      <searchComponent name="mlt"       class="org.apache.solr.handler.component.MoreLikeThisComponent" />
+      <searchComponent name="highlight" class="org.apache.solr.handler.component.HighlightComponent" />
+      <searchComponent name="debug"     class="org.apache.solr.handler.component.DebugComponent" />
+
+      If you register a searchComponent to one of the standard names, that will be used instead.
+
+    -->
+
+    <requestHandler name="/search" class="org.apache.solr.handler.component.SearchHandler">
+      <lst name="defaults">
+        <str name="echoParams">explicit</str>
+      </lst>
+      <!--
+        By default, this will register the following components:
+
+        <arr name="components">
+        <str>query</str>
+        <str>facet</str>
+        <str>mlt</str>
+        <str>highlight</str>
+        <str>debug</str>
+        </arr>
+
+        To insert handlers before or after the 'standard' components, use:
+
+        <arr name="first-components">
+        <str>first</str>
+        </arr>
+
+        <arr name="last-components">
+        <str>last</str>
+        </arr>
+
+      -->
+    </requestHandler>
+
+    <!-- Request handler to extract terms -->
+    <requestHandler name="/term" class="org.apache.solr.handler.component.SearchHandler">
+      <arr name="components">
+        <str>term</str>
+      </arr>
+    </requestHandler>
+
+    <!-- Update request handler.
+
+      Note: Since solr1.1 requestHandlers requires a valid content type header if posted in
+      the body. For example, curl now requires: -H 'Content-type:text/xml; charset=utf-8'
+      The response format differs from solr1.1 formatting and returns a standard error code.
+
+      To enable solr1.1 behavior, remove the /update handler or change its path
+
+      "update.processor.class" is the class name for the UpdateRequestProcessor.  It is initalized
+      only once.  This can not be changed for each request.
+    -->
+    <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" >
+      <!--
+        <str name="update.processor.class">org.apache.solr.handler.UpdateRequestProcessor</str>
+      -->
+    </requestHandler>
+
+    <!--
+      Analysis request handler.  Since Solr 1.3.  Use to returnhow a document is analyzed.  Useful
+      for debugging and as a token server for other types of applications
+    -->
+    <requestHandler name="/analysis" class="solr.AnalysisRequestHandler" >
+      <!--
+        <str name="update.processor.class">org.apache.solr.handler.UpdateRequestProcessor</str>
+      -->
+    </requestHandler>
+
+    <!-- CSV update handler, loaded on demand -->
+    <requestHandler name="/update/csv" class="solr.CSVRequestHandler" startup="lazy" />
+
+
+    <!--
+      Admin Handlers - This will register all the standard admin RequestHandlers.  Adding
+      this single handler is equivolent to registering:
+
+      <requestHandler name="/admin/luke"       class="org.apache.solr.handler.admin.LukeRequestHandler" />
+      <requestHandler name="/admin/system"     class="org.apache.solr.handler.admin.SystemInfoHandler" />
+      <requestHandler name="/admin/plugins"    class="org.apache.solr.handler.admin.PluginInfoHandler" />
+      <requestHandler name="/admin/threads"    class="org.apache.solr.handler.admin.ThreadDumpHandler" />
+      <requestHandler name="/admin/properties" class="org.apache.solr.handler.admin.PropertiesRequestHandler" />
+      <requestHandler name="/admin/file"       class="org.apache.solr.handler.admin.ShowFileRequestHandler" >
+
+      If you wish to hide files under ${solr.home}/conf, explicitly register the ShowFileRequestHandler using:
+      <requestHandler name="/admin/file" class="org.apache.solr.handler.admin.ShowFileRequestHandler" >
+      <lst name="invariants">
+      <str name="hidden">synonyms.txt</str>
+      <str name="hidden">anotherfile.txt</str>
+      </lst>
+      </requestHandler>
+    -->
+    <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
+
+    <!-- ping/healthcheck -->
+    <requestHandler name="/admin/ping" class="PingRequestHandler">
+      <lst name="defaults">
+        <str name="qt">standard</str>
+        <str name="q">solrpingquery</str>
+        <str name="echoParams">all</str>
+      </lst>
+    </requestHandler>
+
+    <!-- Echo the request contents back to the client -->
+    <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
+      <lst name="defaults">
+        <str name="echoParams">explicit</str> <!-- for all params (including the default etc) use: 'all' -->
+        <str name="echoHandler">true</str>
+      </lst>
+    </requestHandler>
+
+    <searchComponent class="solr.HighlightComponent" name="highlight">
+      <highlighting>
+        <!-- Configure the standard fragmenter -->
+        <!-- This could most likely be commented out in the "default" case -->
+        <fragmenter name="gap" class="org.apache.solr.highlight.GapFragmenter" default="true">
+          <lst name="defaults">
+            <int name="hl.fragsize">100</int>
+          </lst>
+        </fragmenter>
+
+        <!-- A regular-expression-based fragmenter (f.i., for sentence extraction) -->
+        <fragmenter name="regex" class="org.apache.solr.highlight.RegexFragmenter">
+          <lst name="defaults">
+            <!-- slightly smaller fragsizes work better because of slop -->
+            <int name="hl.fragsize">70</int>
+            <!-- allow 50% slop on fragment sizes -->
+            <float name="hl.regex.slop">0.5</float>
+            <!-- a basic sentence pattern -->
+            <str name="hl.regex.pattern">[-\w ,/\n\"']{20,200}</str>
+          </lst>
+        </fragmenter>
+
+        <!-- Configure the standard formatter -->
+        <formatter name="html" class="org.apache.solr.highlight.HtmlFormatter" default="true">
+          <lst name="defaults">
+            <str name="hl.simple.pre"><![CDATA[<em>]]></str>
+            <str name="hl.simple.post"><![CDATA[</em>]]></str>
+          </lst>
+        </formatter>
+      </highlighting>
+    </searchComponent>
+
+  <!-- queryResponseWriter plugins... query responses will be written using the
+    writer specified by the 'wt' request parameter matching the name of a registered
+    writer.
+    The "standard" writer is the default and will be used if 'wt' is not specified
+    in the request. XMLResponseWriter will be used if nothing is specified here.
+    The json, python, and ruby writers are also available by default.
+
+    <queryResponseWriter name="standard" class="org.apache.solr.request.XMLResponseWriter"/>
+    <queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
+    <queryResponseWriter name="python" class="org.apache.solr.request.PythonResponseWriter"/>
+    <queryResponseWriter name="ruby" class="org.apache.solr.request.RubyResponseWriter"/>
+
+    <queryResponseWriter name="custom" class="com.example.MyResponseWriter"/>
+  -->
+<!--
+    XSLT response writer (SOLR-49)
+    Changes to XSLT transforms are taken into account every xsltCacheLifetimeSeconds at most.
+   -->
+  <queryResponseWriter
+    name="xslt"
+    class="org.apache.solr.response.XSLTResponseWriter"
+   >
+     <int name="xsltCacheLifetimeSeconds">5</int>
+   </queryResponseWriter>
+
+  <!-- config for the admin interface -->
+  <admin>
+    <defaultQuery>shakespeare</defaultQuery>
+
+    <!-- configure a healthcheck file for servers behind a loadbalancer
+    <healthcheck type="file">server-enabled</healthcheck>
+    -->
+  </admin>
+
+</config>
+
diff --git a/solr/solr.xml b/solr/solr.xml
new file mode 100644
index 0000000000000000000000000000000000000000..694a3c36eb67ea450f6a98ab8a9b5e31a19872a3
--- /dev/null
+++ b/solr/solr.xml
@@ -0,0 +1,8 @@
+<solr persistent="true" sharedLib="lib">
+  <cores adminPath="/admin/multicore">
+    <core name="biblio" instanceDir="biblio"/>
+    <core name="authority" instanceDir="authority"/>
+    <core name="stats" instanceDir="stats"/>
+    <!-- uncomment to enable reserves core: <core name="reserves" instanceDir="reserves"/> -->
+  </cores>
+</solr>
diff --git a/solr/stats/conf/schema.xml b/solr/stats/conf/schema.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de2a60669c4ae7208870179f1076bf85d3ae23c2
--- /dev/null
+++ b/solr/stats/conf/schema.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" ?>
+<schema name="VuFind Usage Statistics Index" version="1.1">
+  <types>
+    <fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
+    <fieldtype name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>
+    <fieldtype name="date" class="solr.DateField" sortMissingLast="true" omitNorms="true"/>
+  </types>
+  <fields>
+   <!-- Core Fields  -->
+   <field name="id" type="string" indexed="true" stored="true"/>
+   <field name="datestamp" type="date" indexed="true" stored="true"/>
+
+   <!-- Institutional Fields -->
+   <field name="institution" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="collection" type="string" indexed="true" stored="true" multiValued="true"/>
+
+   <!-- User fields -->
+   <field name="browser" type="string" indexed="true" stored="true"/>
+   <field name="browserVersion" type="string" indexed="true" stored="true"/>
+   <field name="ipaddress" type="string" indexed="true" stored="true"/>
+   <field name="referrer" type="string" indexed="true" stored="true"/>
+   <field name="session" type="string" indexed="true" stored="true"/>
+   <field name="url" type="string" indexed="true"/>
+   
+   <!-- Search fields -->
+   <field name="noresults" type="boolean" indexed="true" stored="true"/>
+   <field name="phrase" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="resultCount" type="string" indexed="true" stored="true"/>
+   <field name="type" type="string" indexed="true" stored="true" multiValued="true"/>
+   <field name="searchSource" type="string" indexed="true" stored="true"/>   
+   
+   <!-- Record fields -->
+   <field name="recordId" type="string" indexed="true" stored="true"/>
+   <field name="recordSource" type="string" indexed="true" stored="true"/>
+ </fields>
+
+ <uniqueKey>id</uniqueKey>
+
+ <defaultSearchField>id</defaultSearchField>
+
+ <!-- Default Boolean Operator -->
+ <solrQueryParser defaultOperator="OR"/>
+</schema>
diff --git a/solr/stats/conf/solrconfig.xml b/solr/stats/conf/solrconfig.xml
new file mode 100644
index 0000000000000000000000000000000000000000..08e2e3a2fbbdb0d69762bc316abb3d428287a3a6
--- /dev/null
+++ b/solr/stats/conf/solrconfig.xml
@@ -0,0 +1,628 @@
+<?xml version="1.0" ?>
+<!--
+ 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.
+-->
+
+<config>
+
+  <!-- Set this to 'false' if you want solr to continue working after it has
+    encountered an severe configuration error.  In a production environment,
+    you may want solr to keep working even if one handler is mis-configured.
+
+    You may also set this to false using by setting the system property:
+    -Dsolr.abortOnConfigurationError=false
+  -->
+  <abortOnConfigurationError>${solr.abortOnConfigurationError:true}</abortOnConfigurationError>
+
+  <!-- Controls what version of Lucene various components of Solr
+       adhere to.  Generally, you want to use the latest version to
+       get all bug fixes and improvements. It is highly recommended
+       that you fully re-index after changing this setting as it can
+       affect both how text is indexed and queried.
+    -->
+  <luceneMatchVersion>LUCENE_35</luceneMatchVersion>
+
+  <!-- Used to specify an alternate directory to hold all index data
+       other than the default ./data under the Solr home.
+       If replication is in use, this should match the replication configuration. -->
+  <dataDir>${solr.solr.home:./solr}/stats</dataDir>
+
+  <indexDefaults>
+   <!-- Values here affect all index writers and act as a default unless overridden. -->
+    <useCompoundFile>false</useCompoundFile>
+    <mergeFactor>10</mergeFactor>
+    <!--
+      If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene will flush based on whichever limit is hit first.
+
+    -->
+    <!--<maxBufferedDocs>1000</maxBufferedDocs>-->
+    <!-- Tell Lucene when to flush documents to disk.
+      Giving Lucene more memory for indexing means faster indexing at the cost of more RAM
+
+      If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene will flush based on whichever limit is hit first.
+
+    -->
+    <ramBufferSizeMB>32</ramBufferSizeMB>
+    <maxMergeDocs>2147483647</maxMergeDocs>
+    <writeLockTimeout>1000</writeLockTimeout>
+    <commitLockTimeout>10000</commitLockTimeout>
+
+    <!--
+      Expert: Turn on Lucene's auto commit capability.
+
+      TODO: Add recommendations on why you would want to do this.
+
+      NOTE: Despite the name, this value does not have any relation to Solr's autoCommit functionality
+
+    -->
+    <!--<luceneAutoCommit>false</luceneAutoCommit>-->
+    <!--
+      Expert:
+      The Merge Policy in Lucene controls how merging is handled by Lucene.  The default in 2.3 is the LogByteSizeMergePolicy, previous
+      versions used LogDocMergePolicy.
+
+      LogByteSizeMergePolicy chooses segments to merge based on their size.  The Lucene 2.2 default, LogDocMergePolicy chose when
+      to merge based on number of documents
+
+      Other implementations of MergePolicy must have a no-argument constructor
+    -->
+    <!--<mergePolicy>org.apache.lucene.index.LogByteSizeMergePolicy</mergePolicy>-->
+
+    <!--
+      Expert:
+      The Merge Scheduler in Lucene controls how merges are performed.  The ConcurrentMergeScheduler (Lucene 2.3 default)
+      can perform merges in the background using separate threads.  The SerialMergeScheduler (Lucene 2.2 default) does not.
+    -->
+    <!--<mergeScheduler>org.apache.lucene.index.ConcurrentMergeScheduler</mergeScheduler>-->
+
+    <!--
+      As long as Solr is the only process modifying your index, it is
+      safe to use Lucene's in process locking mechanism.  But you may
+      specify one of the other Lucene LockFactory implementations in
+      the event that you have a custom situation.
+
+      none = NoLockFactory (typically only used with read only indexes)
+      single = SingleInstanceLockFactory (suggested)
+      native = NativeFSLockFactory
+      simple = SimpleFSLockFactory
+
+      ('simple' is the default for backwards compatibility with Solr 1.2)
+    -->
+    <lockType>single</lockType>
+
+    <!-- TODO: check if this are needed -->
+    <maxFieldLength>10000</maxFieldLength>
+
+  </indexDefaults>
+
+  <mainIndex>
+    <!-- options specific to the main on-disk lucene index -->
+    <useCompoundFile>false</useCompoundFile>
+    <ramBufferSizeMB>32</ramBufferSizeMB>
+    <mergeFactor>10</mergeFactor>
+    <maxMergeDocs>2147483647</maxMergeDocs>
+    <maxFieldLength>10000</maxFieldLength>
+
+    <!-- If true, unlock any held write or commit locks on startup.
+         This defeats the locking mechanism that allows multiple
+         processes to safely access a lucene index, and should be
+         used with care. -->
+    <unlockOnStartup>false</unlockOnStartup>
+  </mainIndex>
+
+  <!-- the default high-performance update handler -->
+  <updateHandler class="solr.DirectUpdateHandler2">
+
+    <!-- autocommit pending docs if certain criteria are met -->
+    <autoCommit>
+      <maxDocs>10000</maxDocs>
+      <maxTime>20000</maxTime>
+    </autoCommit>
+
+    <!-- The RunExecutableListener executes an external command.
+         exe - the name of the executable to run
+         dir - dir to use as the current working directory. default="."
+         wait - the calling thread waits until the executable returns. default="true"
+         args - the arguments to pass to the program.  default=nothing
+         env - environment variables to set.  default=nothing
+      -->
+    <!-- A postCommit event is fired after every commit or optimize command
+    <listener event="postCommit" class="solr.RunExecutableListener">
+      <str name="exe">snapshooter</str>
+      <str name="dir">solr/bin</str>
+      <bool name="wait">true</bool>
+      <arr name="args"> <str>arg1</str> <str>arg2</str> </arr>
+      <arr name="env"> <str>MYVAR=val1</str> </arr>
+    </listener>
+    -->
+    <!-- A postOptimize event is fired only after every optimize command, useful
+         in conjunction with index distribution to only distribute optimized indicies
+    <listener event="postOptimize" class="solr.RunExecutableListener">
+      <str name="exe">snapshooter</str>
+      <str name="dir">solr/bin</str>
+      <bool name="wait">true</bool>
+    </listener>
+    -->
+
+  </updateHandler>
+
+
+  <query>
+    <!-- Maximum number of clauses in a boolean query... can affect
+        range or prefix queries that expand to big boolean
+        queries.  An exception is thrown if exceeded.  -->
+    <maxBooleanClauses>1024</maxBooleanClauses>
+
+
+    <!-- Cache used by SolrIndexSearcher for filters (DocSets),
+         unordered sets of *all* documents that match a query.
+         When a new searcher is opened, its caches may be prepopulated
+         or "autowarmed" using data from caches in the old searcher.
+         autowarmCount is the number of items to prepopulate.  For LRUCache,
+         the autowarmed items will be the most recently accessed items.
+       Parameters:
+         class - the SolrCache implementation (currently only LRUCache)
+         size - the maximum number of entries in the cache
+         initialSize - the initial capacity (number of entries) of
+           the cache.  (seel java.util.HashMap)
+         autowarmCount - the number of entries to prepopulate from
+           and old cache.
+    <filterCache
+      class="solr.LRUCache"
+      size="512"
+      initialSize="512"
+      autowarmCount="256"/>
+         -->
+    <filterCache
+      class="solr.LRUCache"
+      size="300000"
+      initialSize="300000"
+      autowarmCount="50000"/>
+
+   <!-- queryResultCache caches results of searches - ordered lists of
+         document ids (DocList) based on a query, a sort, and the range
+         of documents requested.
+    <queryResultCache
+      class="solr.LRUCache"
+      size="512"
+      initialSize="512"
+      autowarmCount="256"/>
+  -->
+    <queryResultCache
+      class="solr.LRUCache"
+      size="100000"
+      initialSize="5000"
+      autowarmCount="5000"/>
+
+  <!-- documentCache caches Lucene Document objects (the stored fields for each document).
+       Since Lucene internal document ids are transient, this cache will not be autowarmed.  -->
+    <documentCache
+      class="solr.LRUCache"
+      size="50000"
+      initialSize="50000"
+      autowarmCount="10000"/>
+
+    <!-- If true, stored fields that are not requested will be loaded lazily.
+    -->
+    <enableLazyFieldLoading>false</enableLazyFieldLoading>
+
+    <!-- Example of a generic cache.  These caches may be accessed by name
+         through SolrIndexSearcher.getCache(),cacheLookup(), and cacheInsert().
+         The purpose is to enable easy caching of user/application level data.
+         The regenerator argument should be specified as an implementation
+         of solr.search.CacheRegenerator if autowarming is desired.  -->
+    <!--
+    <cache name="myUserCache"
+      class="solr.LRUCache"
+      size="4096"
+      initialSize="1024"
+      autowarmCount="1024"
+      regenerator="org.mycompany.mypackage.MyRegenerator"
+      />
+    -->
+
+   <!-- An optimization that attempts to use a filter to satisfy a search.
+         If the requested sort does not include score, then the filterCache
+         will be checked for a filter matching the query. If found, the filter
+         will be used as the source of document ids, and then the sort will be
+         applied to that.  -->
+    <useFilterForSortedQuery>true</useFilterForSortedQuery>
+
+   <!-- An optimization for use with the queryResultCache.  When a search
+         is requested, a superset of the requested number of document ids
+         are collected.  For example, if a search for a particular query
+         requests matching documents 10 through 19, and queryWindowSize is 50,
+         then documents 0 through 50 will be collected and cached.  Any further
+         requests in that range can be satisfied via the cache.  -->
+    <queryResultWindowSize>50</queryResultWindowSize>
+
+    <!-- Maximum number of documents to cache for any entry in the
+      queryResultCache. -->
+    <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
+
+    <!-- This entry enables an int hash representation for filters (DocSets)
+         when the number of items in the set is less than maxSize.  For smaller
+         sets, this representation is more memory efficient, more efficient to
+         iterate over, and faster to take intersections.  -->
+    <HashDocSet maxSize="3000" loadFactor="0.75"/>
+
+    <!-- a newSearcher event is fired whenever a new searcher is being prepared
+         and there is a current searcher handling requests (aka registered). -->
+    <!-- QuerySenderListener takes an array of NamedList and executes a
+         local query request for each NamedList in sequence. -->
+    <!--
+    <listener event="newSearcher" class="solr.QuerySenderListener">
+      <arr name="queries">
+        <lst> <str name="q">solr</str> <str name="start">0</str> <str name="rows">10</str> </lst>
+        <lst> <str name="q">rocks</str> <str name="start">0</str> <str name="rows">10</str> </lst>
+      </arr>
+    </listener>
+    -->
+
+    <!-- a firstSearcher event is fired whenever a new searcher is being
+         prepared but there is no current registered searcher to handle
+         requests or to gain autowarming data from. -->
+    <!--
+    <listener event="firstSearcher" class="solr.QuerySenderListener">
+      <arr name="queries">
+        <lst> <str name="q">fast_warm</str> <str name="start">0</str> <str name="rows">10</str> </lst>
+      </arr>
+    </listener>
+    -->
+
+    <!-- If a search request comes in and there is no current registered searcher,
+      then immediately register the still warming searcher and use it.  If
+      "false" then all requests will block until the first searcher is done
+      warming. -->
+    <useColdSearcher>false</useColdSearcher>
+
+    <!-- Maximum number of searchers that may be warming in the background
+      concurrently.  An error is returned if this limit is exceeded. Recommend
+      1-2 for read-only slaves, higher for masters w/o cache warming. -->
+    <maxWarmingSearchers>4</maxWarmingSearchers>
+
+  </query>
+
+  <!--
+    Let the dispatch filter handler /select?qt=XXX
+    handleSelect=true will use consistent error handling for /select and /update
+    handleSelect=false will use solr1.1 style error formatting
+  -->
+  <requestDispatcher handleSelect="true" >
+    <!--Make sure your system has some authentication before enabling remote streaming!  -->
+    <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" />
+
+    <!-- Set HTTP caching related parameters (for proxy caches and clients).
+
+      To get the behaviour of Solr 1.2 (ie: no caching related headers)
+      use the never304="true" option and do not specify a value for
+      <cacheControl>
+    -->
+    <!-- <httpCaching never304="true"> -->
+    <httpCaching lastModifiedFrom="openTime"
+      etagSeed="Solr">
+      <!-- lastModFrom="openTime" is the default, the Last-Modified value
+        (and validation against If-Modified-Since requests) will all be
+        relative to when the current Searcher was opened.
+        You can change it to lastModFrom="dirLastMod" if you want the
+        value to exactly corrispond to when the physical index was last
+        modified.
+
+        etagSeed="..." is an option you can change to force the ETag
+        header (and validation against If-None-Match requests) to be
+        differnet even if the index has not changed (ie: when making
+        significant changes to your config file)
+
+        lastModifiedFrom and etagSeed are both ignored if you use the
+        never304="true" option.
+      -->
+      <!-- If you include a <cacheControl> directive, it will be used to
+        generate a Cache-Control header, as well as an Expires header
+        if the value contains "max-age="
+
+        By default, no Cache-Control header is generated.
+
+        You can use the <cacheControl> option even if you have set
+        never304="true"
+      -->
+      <!-- <cacheControl>max-age=30, public</cacheControl> -->
+    </httpCaching>
+  </requestDispatcher>
+
+  <!-- requestHandler plugins... incoming queries will be dispatched to the
+     correct handler based on the qt (query type) param matching the
+     name of registered handlers.
+     The "standard" request handler is the default and will be used if qt
+     is not specified in the request.
+  -->
+  <requestHandler name="standard" class="solr.StandardRequestHandler" default="true">
+    <!-- default values for query parameters may optionally be defined here
+     <lst name="defaults">
+       <int name="rows">10</int>
+       <str name="fl">*</str>
+       <str name="version">2.1</str>
+     <lst>
+    -->
+    <lst name="defaults">
+      <str name="echoParam">explicit</str>
+    </lst>
+  </requestHandler>
+
+  <!-- DisMaxRequestHandler is an example of a request handler that
+       supports optional parameters which are passed to
+       its init() method.
+   -->
+  <requestHandler name="dismax" class="solr.DisMaxRequestHandler" >
+    <lst name="defaults">
+     <float name="tie">0.01</float>
+     <str name="qf">
+        text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
+     </str>
+     <str name="pf">
+        text^0.2 features^1.1 name^1.5 manu^1.4 manu_exact^1.9
+     </str>
+     <str name="bf">
+        ord(poplarity)^0.5 recip(rord(price),1,1000,1000)^0.3
+     </str>
+     <str name="fl">
+        id,name,price,score
+     </str>
+     <str name="mm">
+        2&lt;-1 5&lt;-2 6&lt;90%
+     </str>
+     <int name="ps">100</int>
+    </lst>
+  </requestHandler>
+  <!-- Note how you can register the same handler multiple times with
+       different names (and different init parameters)
+    -->
+  <requestHandler name="partitioned" class="solr.DisMaxRequestHandler" >
+    <lst name="defaults">
+     <str name="qf">text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0</str>
+     <str name="mm">2&lt;-1 5&lt;-2 6&lt;90%</str>
+     <!-- This is an example of using Date Math to specify a constantly
+          moving date range in a config...
+       -->
+     <str name="bq">incubationdate_dt:[* TO NOW/DAY-1MONTH]^2.2</str>
+    </lst>
+    <!-- In addition to defaults, "appends" params can be specified
+         to identify values which should be appended to the list of
+         multi-val params from the query (or the existing "defaults").
+
+         In this example, the param "fq=instock:true" will be appended to
+         any query time fq params the user may specify, as a mechanism for
+         partitioning the index, independent of any user selected filtering
+         that may also be desired (perhaps as a result of faceted searching).
+
+         NOTE: there is *absolutely* nothing a client can do to prevent these
+         "appends" values from being used, so don't use this mechanism
+         unless you are sure you always want it.
+      -->
+    <lst name="appends">
+      <str name="fq">inStock:true</str>
+    </lst>
+    <!-- "invariants" are a way of letting the Solr maintainer lock down
+         the options available to Solr clients.  Any params values
+         specified here are used regardless of what values may be specified
+         in either the query, the "defaults", or the "appends" params.
+
+         In this example, the facet.field and facet.query params are fixed,
+         limiting the facets clients can use.  Faceting is not turned on by
+         default - but if the client does specify facet=true in the request,
+         these are the only facets they will be able to see counts for;
+         regardless of what other facet.field or facet.query params they
+         may specify.
+
+         NOTE: there is *absolutely* nothing a client can do to prevent these
+         "invariants" values from being used, so don't use this mechanism
+         unless you are sure you always want it.
+      -->
+    <lst name="invariants">
+      <str name="facet.field">cat</str>
+      <str name="facet.field">manu_exact</str>
+      <str name="facet.query">price:[* TO 500]</str>
+      <str name="facet.query">price:[500 TO *]</str>
+    </lst>
+  </requestHandler>
+
+    <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
+      <lst name="defaults">
+        <str name="mlt.fl">manu,cat</str>
+        <int name="mlt.mindf">1</int>
+      </lst>
+    </requestHandler>
+
+    <!--
+
+      Search components are registered to SolrCore and used by Search Handlers
+
+      By default, the following components are avaliable:
+
+      <searchComponent name="query"     class="org.apache.solr.handler.component.QueryComponent" />
+      <searchComponent name="facet"     class="org.apache.solr.handler.component.FacetComponent" />
+      <searchComponent name="mlt"       class="org.apache.solr.handler.component.MoreLikeThisComponent" />
+      <searchComponent name="highlight" class="org.apache.solr.handler.component.HighlightComponent" />
+      <searchComponent name="debug"     class="org.apache.solr.handler.component.DebugComponent" />
+
+      If you register a searchComponent to one of the standard names, that will be used instead.
+
+    -->
+
+    <requestHandler name="/search" class="org.apache.solr.handler.component.SearchHandler">
+      <lst name="defaults">
+        <str name="echoParams">explicit</str>
+      </lst>
+      <!--
+        By default, this will register the following components:
+
+        <arr name="components">
+        <str>query</str>
+        <str>facet</str>
+        <str>mlt</str>
+        <str>highlight</str>
+        <str>debug</str>
+        </arr>
+
+        To insert handlers before or after the 'standard' components, use:
+
+        <arr name="first-components">
+        <str>first</str>
+        </arr>
+
+        <arr name="last-components">
+        <str>last</str>
+        </arr>
+
+      -->
+    </requestHandler>
+
+    <!-- Update request handler.
+
+      Note: Since solr1.1 requestHandlers requires a valid content type header if posted in
+      the body. For example, curl now requires: -H 'Content-type:text/xml; charset=utf-8'
+      The response format differs from solr1.1 formatting and returns a standard error code.
+
+      To enable solr1.1 behavior, remove the /update handler or change its path
+
+      "update.processor.class" is the class name for the UpdateRequestProcessor.  It is initalized
+      only once.  This can not be changed for each request.
+    -->
+    <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" >
+      <!--
+        <str name="update.processor.class">org.apache.solr.handler.UpdateRequestProcessor</str>
+      -->
+    </requestHandler>
+
+    <!--
+      Analysis request handler.  Since Solr 1.3.  Use to returnhow a document is analyzed.  Useful
+      for debugging and as a token server for other types of applications
+    -->
+    <requestHandler name="/analysis" class="solr.AnalysisRequestHandler" >
+      <!--
+        <str name="update.processor.class">org.apache.solr.handler.UpdateRequestProcessor</str>
+      -->
+    </requestHandler>
+
+    <!-- CSV update handler, loaded on demand -->
+    <requestHandler name="/update/csv" class="solr.CSVRequestHandler" startup="lazy" />
+
+
+    <!--
+      Admin Handlers - This will register all the standard admin RequestHandlers.  Adding
+      this single handler is equivolent to registering:
+
+      <requestHandler name="/admin/luke"       class="org.apache.solr.handler.admin.LukeRequestHandler" />
+      <requestHandler name="/admin/system"     class="org.apache.solr.handler.admin.SystemInfoHandler" />
+      <requestHandler name="/admin/plugins"    class="org.apache.solr.handler.admin.PluginInfoHandler" />
+      <requestHandler name="/admin/threads"    class="org.apache.solr.handler.admin.ThreadDumpHandler" />
+      <requestHandler name="/admin/properties" class="org.apache.solr.handler.admin.PropertiesRequestHandler" />
+      <requestHandler name="/admin/file"       class="org.apache.solr.handler.admin.ShowFileRequestHandler" >
+
+      If you wish to hide files under ${solr.home}/conf, explicitly register the ShowFileRequestHandler using:
+      <requestHandler name="/admin/file" class="org.apache.solr.handler.admin.ShowFileRequestHandler" >
+      <lst name="invariants">
+      <str name="hidden">synonyms.txt</str>
+      <str name="hidden">anotherfile.txt</str>
+      </lst>
+      </requestHandler>
+    -->
+    <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
+
+    <!-- ping/healthcheck -->
+    <requestHandler name="/admin/ping" class="PingRequestHandler">
+      <lst name="defaults">
+        <str name="qt">standard</str>
+        <str name="q">solrpingquery</str>
+        <str name="echoParams">all</str>
+      </lst>
+    </requestHandler>
+
+    <!-- Echo the request contents back to the client -->
+    <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
+      <lst name="defaults">
+        <str name="echoParams">explicit</str> <!-- for all params (including the default etc) use: 'all' -->
+        <str name="echoHandler">true</str>
+      </lst>
+    </requestHandler>
+
+    <searchComponent class="solr.HighlightComponent" name="highlight">
+      <highlighting>
+        <!-- Configure the standard fragmenter -->
+        <!-- This could most likely be commented out in the "default" case -->
+        <fragmenter name="gap" class="org.apache.solr.highlight.GapFragmenter" default="true">
+          <lst name="defaults">
+            <int name="hl.fragsize">100</int>
+          </lst>
+        </fragmenter>
+
+        <!-- A regular-expression-based fragmenter (f.i., for sentence extraction) -->
+        <fragmenter name="regex" class="org.apache.solr.highlight.RegexFragmenter">
+          <lst name="defaults">
+            <!-- slightly smaller fragsizes work better because of slop -->
+            <int name="hl.fragsize">70</int>
+            <!-- allow 50% slop on fragment sizes -->
+            <float name="hl.regex.slop">0.5</float>
+            <!-- a basic sentence pattern -->
+            <str name="hl.regex.pattern">[-\w ,/\n\"']{20,200}</str>
+          </lst>
+        </fragmenter>
+
+        <!-- Configure the standard formatter -->
+        <formatter name="html" class="org.apache.solr.highlight.HtmlFormatter" default="true">
+          <lst name="defaults">
+            <str name="hl.simple.pre"><![CDATA[<em>]]></str>
+            <str name="hl.simple.post"><![CDATA[</em>]]></str>
+          </lst>
+        </formatter>
+      </highlighting>
+    </searchComponent>
+
+  <!-- queryResponseWriter plugins... query responses will be written using the
+    writer specified by the 'wt' request parameter matching the name of a registered
+    writer.
+    The "standard" writer is the default and will be used if 'wt' is not specified
+    in the request. XMLResponseWriter will be used if nothing is specified here.
+    The json, python, and ruby writers are also available by default.
+
+    <queryResponseWriter name="standard" class="org.apache.solr.request.XMLResponseWriter"/>
+    <queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
+    <queryResponseWriter name="python" class="org.apache.solr.request.PythonResponseWriter"/>
+    <queryResponseWriter name="ruby" class="org.apache.solr.request.RubyResponseWriter"/>
+
+    <queryResponseWriter name="custom" class="com.example.MyResponseWriter"/>
+  -->
+<!--
+    XSLT response writer (SOLR-49)
+    Changes to XSLT transforms are taken into account every xsltCacheLifetimeSeconds at most.
+   -->
+  <queryResponseWriter
+    name="xslt"
+    class="org.apache.solr.response.XSLTResponseWriter"
+   >
+     <int name="xsltCacheLifetimeSeconds">5</int>
+   </queryResponseWriter>
+
+  <!-- config for the admin interface -->
+  <admin>
+    <defaultQuery>shakespeare</defaultQuery>
+
+    <!-- configure a healthcheck file for servers behind a loadbalancer
+    <healthcheck type="file">server-enabled</healthcheck>
+    -->
+  </admin>
+
+</config>
+