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

<document>
  <properties>
    <title>Java Caching System</title>
    <author email="pete@kazmier.com">Pete Kazmier</author>
    <author email="asmuts@apache.org">Aaron Smuts</author>
  </properties>

  <body>
    <section name="Java Caching System">
      <p>
        JCS is a distributed caching system written in java.  It is intended to speed up
        applications by providing a means to manage cached
        data of various dynamic natures.  Like any caching system, the
        JCS is most useful for high read, low put applications.  Dynamic
        content and reporting systems can benefit most.  However, any
        site that repeatedly constructs pages, dropdowns, or common
        search results from a database that is updated at intervals
        (rather than across categories continuously) can improve
        performance and scalability by implementing caching. Latency
        times drop sharply and bottlenecks move away from the database
        in an effectively cached system.
      </p>
      <p>
        The JCS goes beyond simply caching objects in memory.  It
        provides several important features, necessary for any
        Enterprise level caching system:
      </p>
      <ul>
        <li>Memory management</li>
        <li>Disk overflow (and defragmentation)</li>
        <li>Thread pool controls</li>
        <li>Element grouping</li>
        <li>Quick nested categorical removal</li>
        <li>Data expiration (idle time and max life)</li>
        <li>Extensible framework</li>
        <li>Fully configurable runtime parameters</li>
        <li>Region data separation and configuration</li>
        <li>Fine grained element configuration options</li>
        <li>Remote synchronization</li>
        <li>Remote store recovery</li>
        <li>Non-blocking "zombie" (balking facade) pattern</li>
        <li>Lateral distribution of elements via HTTP, TCP, or
          UDP</li>
        <li>UDP Discovery of other caches</li>
        <li>Element event handling</li>
        <li>Remote server chaining (or clustering) and failover</li>
      </ul>
    </section>
  </body>
</document>

