<!--
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.
-->
<HTML>
<BODY>

<P>GemFire allows users to share application data across multiple Java
Virtual Machine using familiar Java classes and programming
constructs.</P>

<H1>GemFire Distributed Object Caching</H1>

<P>GemFire's distributed caching allows application access to
distributed and cached data across multiple physical machines.
GemFire's main API for accessing distributed data is the {@linkplain
org.apache.geode.cache.Region}

<P>GemFire provides a flexible and powerful API for distributed object
caching.  The API is particularly well-suited for caching application
data and contains classes for receiving data events, reading and
writing data to and from external sources, querying cached data using
OQL, performing transactional operations, and active monitoring of
data and data VMs.</P>

<P>A discussion of the Distributed Caching API and GemFire's
implementation of it can be found {@linkplain
org.apache.geode.cache here}.</P>

</BODY>
</HTML>
