---
title: "&lt;cache&gt; Element Reference"
---

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

This section documents the `cache.xml` sub-elements used for <%=vars.product_name%> server configuration. All elements are sub-elements of the `<cache>` element.

For <%=vars.product_name%> client configuration, see [&lt;client-cache&gt; Element Reference](client-cache.html).

**API**:`org.apache.geode.cache.CacheFactory`

**&lt;cache&gt; Attributes**

<table>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>copy-on-read</td>
<td><p>Boolean indicating whether entry value retrieval methods return direct references to the entry value objects in the cache (false) or copies of the objects (true).</p></td>
<td>False</td>
</tr>
<tr class="even">
<td>is-server</td>
<td><p>Boolean indicating whether this member is a cache server.</p></td>
<td>False</td>
</tr>
<tr class="odd">
<td>lock-timeout</td>
<td><p>The timeout, in seconds, for implicit object lock requests. This setting affects automatic locking only, and does not apply to manual locking. If a lock request does not return before the specified timeout period, it is cancelled and returns with a failure.</p></td>
<td>60</td>
</tr>
<tr class="even">
<td>lock-lease</td>
<td><p>The timeout, in seconds, for implicit and explicit object lock leases. This affects both automatic locking and manual locking. Once a lock is obtained, it can remain in force for the lock lease time period before being automatically cleared by the system.</p></td>
<td>120</td>
</tr>
<tr class="odd">
<td>message-sync-interval</td>
<td><p>Used for client subscription queue synchronization when this member acts as a server to clients and server redundancy is used. Sets the frequency (in seconds) at which the primary server sends messages to its secondary servers to remove queued events that have already been processed by the clients.</p></td>
<td>1</td>
</tr>
<tr class="even">
<td>search-timeout</td>
<td><p>How many seconds a <code class="ph codeph">netSearch</code> operation can wait for data before timing out. You may want to change this based on your knowledge of the network load or other factors.</p></td>
<td>300</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<cache>
  <cache-server port="40404" />
  <region name="root">
    <region-attributes refid="REPLICATE"/>
    <region name="cs_region" refid="REPLICATE">
      <region-attributes>
        <cache-loader>
          <class-name>cacheRunner.StringLoader</class-name>
        </cache-loader>
          <cache-listener>
          <class-name>cacheRunner.LoggingCacheListener</class-name>
        </cache-listener>
      </region-attributes>
    </region>
  </region>
</cache>
```

## <a id="cache-transaction-manager" class="no-quick-link"></a>&lt;cache-transaction-manager&gt;

Specifies a transaction listener.

**API:** `CacheTransactionManager`

**Example:**

``` pre
<cache search-timeout="60">
   <cache-transaction-manager>
     <transaction-listener>
       <class-name>com.company.data.MyTransactionListener</class-name>
       <parameter name="URL">
         <string>jdbc:cloudscape:rmi:MyData</string>
       </parameter>
     </transaction-listener>
     <transaction-listener>... </transaction-listener> 
     <transaction-writer>
       <class-name>com.company.data.MyTransactionWriter</class-name>
       <parameter name="URL">
         <string>jdbc:cloudscape:rmi:MyData</string>
       </parameter>
       <parameter>
     </transaction-writer>
   </cache-transaction-manager> .. .
</cache>
```

## <a id="transaction-listener" class="no-quick-link"></a>&lt;transaction-listener&gt;

When a transaction ends, its thread calls the TransactionListener to perform the appropriate follow-up for successful commits, failed commits, or voluntary rollbacks.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

## <a id="transaction-writer" class="no-quick-link"></a>&lt;transaction-writer&gt;

When you commit a transaction, a TransactionWriter can perform additional tasks, including aborting the transaction.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

## <a id="dynamic-region-factory" class="no-quick-link"></a>&lt;dynamic-region-factory&gt;

The `<dynamic-region-factory>` element configures a dynamic region factory for this cache. You can use this element to dynamically create regions in your application code. Use the `createDynamicRegion()` method of the `org.apache.geode.cache.DynamicRegionFactory` class in your Java code to dynamically create regions.

**Note:**
You cannot use this element to dynamically create *partitioned* regions.

**Note:** Use of the `DynamicRegionFactory` class and the `<dynamic-region-factory>` element are deprecated in favor of the `org.apache.geode.cache.execute.FunctionService` class and the [`<function-service>`](#function-service) element.

We recommend that you use functions to dynamically create regions. See [Creating Regions Dynamically](../../developing/region_options/dynamic_region_creation.html).

The optional `<disk-dir>` sub-element specifies the directory to store the persistent files that are used for dynamic region bookkeeping. It defaults to the current directory.

Set the `pool-name` attribute to set the name of the connection pool used by client applications in a client/server cache configuration. Do not specify the `pool-name` attribute in servers or peers.

**API:** `org.apache.geode.cache.DynamicRegionFactory`

**&lt;dynamic-region-factory&gt; Attributes**


| Attribute                 | Description                                                                                                                    | Default |
|---------------------------|--------------------------------------------------------------------------------------------------------------------------------|---------|
| disable-persist-backup    | When set to false, the factory is persisted on disk.                                                                           | false   |
| disable-register-interest | When set to false, client regions created by the factory register interest in all keys in a corresponding server cache region. | false   |
| pool-name                 | The name of a connection pool used by the client factory to communicate with the server-side factory.                          | none    |

**Example:**

``` pre
<dynamic-region-factory 
     pool-name=myPool>
     <disk-dir>/home/gemfire/myDiskdir</disk-dir>
</dynamic-region-factory>
```

## <a id="id_utn_c3p_wk" class="no-quick-link"></a>&lt;disk-dir&gt;

Specifies a region or disk store's disk directory.

**&lt;disk-dir&gt; Attributes**

| Attribute                 | Description                                                                              | Default                  |
|---------------------------|------------------------------------------------------------------------------------------|--------------------------|
| dir-size                  | Maximum amount of space to use for the disk store, in megabytes.                         | 214748364 (2 petabytes)  |

**Example:**

``` pre
<disk-dir 
    dir-size="20480">/host3/users/gf/memberA_DStore</disk-dir> 
```

## <a id="gateway-sender" class="no-quick-link"></a>&lt;gateway-sender&gt;

Configures a gateway sender to distribute region events to another <%=vars.product_name%> site. See [Configuring a Multi-site (WAN) System](../../topologies_and_comm/multi_site_configuration/setting_up_a_multisite_system.html#setting_up_a_multisite_system).

**API:** `GatewaySender`

**&lt;gateway-sender&gt; Attributes**
<table>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>parallel</td>
<td>Value of &quot;true&quot; or &quot;false&quot; that specifies the type of gateway sender that <%=vars.product_name%> creates.</td>
<td>false</td>
</tr>
<tr class="even">
<td>dispatcher-threads</td>
<td>Number of dispatcher threads that are used to process region events from a gateway sender queue or asynchronous event queue.</td>
<td>5</td>
</tr>
<tr class="odd">
<td>order-policy</td>
<td>When the <code class="ph codeph">dispatcher-threads</code> attribute is greater than 1, <code class="ph codeph">order-policy</code> configures the way in which multiple dispatcher threads process region events from a serial gateway queue or serial asynchronous event queue. This attribute can have one of the following values:
<ul>
<li><strong>key</strong>. When distributing region events from the local queue, multiple dispatcher threads preserve the order of key updates.</li>
<li><strong>thread</strong>. When distributing region events from the local queue, multiple dispatcher threads preserve the order in which a given thread added region events to the queue.</li>
<li><strong>partition</strong>. This option is valid for parallel event queues. When distributing region events from the local queue, multiple dispatcher threads preserve the order in which region events were added to the local queue. For a partitioned region, this means that all region events delivered to a specific partition are delivered in the same order to the remote <%=vars.product_name%> site. For a distributed region, this means that all key updates delivered to the local queue are distributed to the remote site in the same order.</li>
</ul>
<p>You cannot configure the <code class="ph codeph">order-policy</code> for a parallel event queue, because parallel queues cannot preserve event ordering for regions. Only the ordering of events for a given partition (or in a given queue of a distributed region) can be preserved.</p></td>
<td>key</td>
</tr>
<tr class="even">
<td>id</td>
<td>Unique identifier for the gateway sender, usually an identifier associated with a physical location. This attribute is required.</td>
<td>null</td>
</tr>
<tr class="odd">
<td>remote-distributed-system-id</td>
<td>Integer that uniquely identifies the remote <%=vars.product_name%> cluster to which this gateway sender will send region events. This value corresponds to the <code class="ph codeph">distributed-system-id</code> property specified in locators for the remote cluster. This attribute is required.</td>
<td>null</td>
</tr>
<tr class="even">
<td>manual-start</td>
<td><b>Deprecated.</b> Boolean value that specifies whether you need to manually start the gateway sender. If you supply a null value, the default value of false is used, and the gateway sender attempts to start automatically. <em>A manual start is likely to cause data loss, so manual start should never be used in a production system.</em></td>
<td>false</td>
</tr>
<tr class="odd">
<td>socket-buffer-size</td>
<td>Size of the socket buffer that sends messages to remote sites. This size should match the size of the <code class="ph codeph">socket-buffer-size</code> attribute of remote gateway receivers that process region events.</td>
<td>32768</td>
</tr>
<tr class="even">
<td>socket-read-timeout</td>
<td>Amount of time in milliseconds that the gateway sender will wait to receive an acknowledgment from a remote site. By default this is set to 0, which means there is no timeout. If you do set this timeout, you must set it to a minimum of 30000 (milliseconds). Setting it to a lower number will generate an error message and reset the value to the default of 0.</td>
<td>0</td>
</tr>
<tr class="odd">
<td>enable-batch-conflation</td>
<td>Boolean value that determines whether <%=vars.product_name%> should conflate messages.</td>
<td>false</td>
</tr>
<tr class="even">
<td>batch-size</td>
<td>Maximum number of messages that a batch can contain.</td>
<td>100</td>
</tr>
<tr class="odd">
<td>batch-time-interval</td>
<td>Maximum number of milliseconds that can elapse between sending batches.</td>
<td>1000</td>
</tr>
<tr class="even">
<td>enable-persistence</td>
<td>Boolean value that determines whether <%=vars.product_name%> persists the gateway queue.</td>
<td>false</td>
</tr>
<tr class="odd">
<td>disk-store-name</td>
<td>Named disk store to use for storing the queue overflow, or for persisting the queue. If you specify a value, the named disk store must exist. If you specify a null value, <%=vars.product_name%> uses the default disk store for overflow and queue persistence.</td>
<td> </td>
</tr>
<tr class="even">
<td>disk-synchronous</td>
<td>For regions that write to disk, boolean that specifies whether disk writes are done synchronously for the region.</td>
<td>true</td>
</tr>
<tr class="odd">
<td>maximum-queue-memory</td>
<td>Maximum amount of memory in megabytes that the queue can consume before overflowing to disk.</td>
<td>100 MB</td>
</tr>
<tr class="even">
<td>alert-threshold</td>
<td>Maximum number of milliseconds that a region event can remain in the gateway sender queue before <%=vars.product_name%> logs an alert.</td>
<td>0</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<cache>
  
  <gateway-sender 
    id="remoteA" 
    parallel="true" 
    remote-distributed-system-id="1"> 
    <gateway-event-filter>
      <class-name>org.apache.geode.util.SampleEventFilter</class-name>
      <parameter 
       name="param1">
        <string>"value1"</string>
      </parameter>
    </gateway-event-filter>
    <gateway-transport-filter>
      <class-name>org.apache.geode.util.SampleTransportFilter</class-name>
      <parameter 
       name="param1">
        <string>"value1"</string>
      </parameter>
    </gateway-transport-filter>
  </gateway-sender> 
  ...
</cache>
```

## <a id="gateway-event-filter" class="no-quick-link"></a>&lt;gateway-event-filter&gt;

A GatewayEventFilter implementation determines whether a region event is placed in a gateway sender queue and/or whether an event in a gateway queue is distributed to a remote site. You can optionally add one or more GatewayEventFilter implementations to a gateway sender, either in the cache.xml configuration file or using the Java API.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**Example:**

``` pre
<gateway-event-filter>
      <class-name>org.apache.geode.util.SampleEventFilter</class-name>
      <parameter name="param1">
        <string>"value1"</string>
      </parameter>
</gateway-event-filter>
```

## <a id="gateway-event-substitution-filter" class="no-quick-link"></a>&lt;gateway-event-substitution-filter&gt;

A GatewayEventSubstitutionFilter provides a way to specify a substitute value to be stored in the GatewayQueueEvent and enqueued in the RegionQueue. You can optionally add one GatewayEventSubstitutionFilter implementation to a gateway sender.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**Example:**

``` pre
<gateway-event-substitution-filter>
      <class-name>org.apache.geode.util.SampleEventSubstitutionFilter</class-name>
      <parameter name="param1">
        <string>"value1"</string>
      </parameter>
</gateway-event-substitution-filter>
```

## <a id="gateway-transport-filter" class="no-quick-link"></a>&lt;gateway-transport-filter&gt;

Use a GatewayTransportFilter implementation to process the TCP stream that sends a batch of events that is distributed from one <%=vars.product_name%> cluster to another over a WAN. A GatewayTransportFilter is typically used to perform encryption or compression on the data that distributed. You install the same GatewayTransportFilter implementation on both a gateway sender and gateway receiver.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**Example:**

``` pre
<gateway-transport-filter>
      <class-name>org.apache.geode.util.SampleTransportFilter</class-name>
      <parameter 
       name="param1">
        <string>"value1"</string>
      </parameter>
</gateway-transport-filter>
```

## <a id="gateway-receiver" class="no-quick-link"></a>&lt;gateway-receiver&gt;

Configures a gateway receiver to receive and apply region events that were distributed from another <%=vars.product_name%> site. You can only specify one gateway receiver on a member. See [Configuring a Multi-site (WAN) System](../../topologies_and_comm/multi_site_configuration/setting_up_a_multisite_system.html#setting_up_a_multisite_system).

**API:** `GatewayReceiverFactory`, `GatewayTransportFilter`

**&lt;gateway-receiver&gt; Attributes**

<table>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>start-port</td>
<td><p>Starting port number to use when specifying the range of possible port numbers this gateway receiver will use to connects to gateway senders in other sites. <%=vars.product_name%> chooses an unused port number in the specified port number range to start the receiver. If no port numbers in the range are available, an exception is thrown.</p>
<p>The <code class="ph codeph">STARTPORT</code> value is inclusive while the <code class="ph codeph">ENDPORT</code> value is exclusive. For example, if you specify <code class="ph codeph">STARTPORT=&quot;50510&quot;</code> and <code class="ph codeph">ENDPOINT=&quot;50520&quot;</code>, <%=vars.product_name%> chooses a port value from 50510 to 50519.</p></td>
<td>5000</td>
</tr>
<tr class="even">
<td>end-port</td>
<td><p>Defines the upper bound port number to use when specifying the range of possible port numbers this gateway receiver will use to for connections from gateway senders in other sites. <%=vars.product_name%> chooses an unused port number in the specified port number range to start the receiver. If no port numbers in the range are available, an exception is thrown.</p>
<p>The <code class="ph codeph">ENDPORT</code> value is exclusive while the <code class="ph codeph">STARTPORT</code> value is inclusive. For example, if you specify <code class="ph codeph">STARTPORT=&quot;50510&quot;</code> and <code class="ph codeph">ENDPOINT=&quot;50520&quot;</code>, <%=vars.product_name%> chooses a port value from 50510 to 50519.</p></td>
<td>5500</td>
</tr>
<tr class="odd">
<td>bind-address</td>
<td>Network address for connections from gateway senders in other sites. Specify the address as a literal string value.</td>
<td> </td>
</tr>
<tr class="even">
<td>hostname-for-senders</td>
<td>Attribute where you can specify an IP address or hostname for gateway sender connections. If you configure hostname-for-senders, locators will use the provided hostname or IP address when instructing gateway senders on how to connect to gateway receivers. If you provide &quot;&quot; or null as the value, by default the gateway receiver's bind-address will be sent to clients.</td>
<td> </td>
</tr>
<tr class="odd">
<td>manual-start</td>
<td>When set to false, the gateway receiver will automatically start when the receiver is created. If set to true, you must manually start the receiver.</td>
<td>true</td>
</tr>
<tr class="even">
<td>maximum-time-between-pings</td>
<td>Integer value that specifies the time interval (in milliseconds) to use between pings to connected WAN sites. This value determines the maximum amount of time that can elapse before a remote WAN site is considered offline.</td>
<td>60000</td>
</tr>
<tr class="odd">
<td>socket-buffer-size</td>
<td>An integer value that sets the buffer size (in bytes) of the socket connection for this gateway receiver. This value should match the <code class="ph codeph">socket-buffer-size</code> setting of gateway senders that connect to this receiver.</td>
<td>32768</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<cache>
     <gateway-receiver start-port="1530" end-port="1551"> 
    <gateway-transport-filter>>
      <class-name>org.apache.geode.util.SampleTransportFilter</class-name>
      <parameter 
       name="param1">
        <string>"value1"</string>
      </parameter>
    </gateway-transport-filter>
  </gateway-receiver>
</cache>
```

## <a id="gateway-receiver_gateway-transport-filter" class="no-quick-link"></a>&lt;gateway-transport-filter&gt;

Use a GatewayTransportFilter implementation to process the TCP stream that sends a batch of events that is distributed from one <%=vars.product_name%> cluster to another over a WAN. A GatewayTransportFilter is typically used to perform encryption or compression on the data that distributed. You install the same GatewayTransportFilter implementation on both a gateway sender and gateway receiver.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**Example:**

``` pre
<gateway-transport-filter>
      <class-name>org.apache.geode.util.SampleTransportFilter</class-name>
      <parameter 
       name="param1">
        <string>"value1"</string>
      </parameter>
</gateway-transport-filter>
```

## <a id="gateway-conflict-resolver" class="no-quick-link"></a>&lt;gateway-conflict-resolver&gt;

An event-handler plug-in that is called in order to determine whether a potentially conflicting WAN update should be applied to the local cache. A GatewayConflictResolver is invoked if the current value in a cache entry was established by a different cluster (with a different distributed-system-id) than an event that is attempting to modify the entry. It is not invoked if the event has the same distributed system ID as the event that last changed the entry. See [Resolving Conflicting Events](../../developing/events/resolving_multisite_conflicts.html#topic_E97BB68748F14987916CD1A50E4B4542)

Specify the Java class for the gateway conflict resolver plug-in and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**API:** `org.apache.geode.cache.util.GatewayConflictResolver`

**Example:**

``` pre
<gateway-conflict-resolver>
    <class-name>
     myPackage.MyConflictResolver
    </class-name>
  </gateway-conflict-resolver>
```

## <a id="async-event-queue" class="no-quick-link"></a>&lt;async-event-queue&gt;

Configures a queue for sending region events to an AsyncEventListener implementation (for example, for write-behind event handling).

**API:** `org.apache.geode.cache.asyncqueue.AsyncEventQueue`

**&lt;async-event-queue&gt; Attributes**

<table>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>id</td>
<td>Unique identifier for the queue. This attribute is required.</td>
<td>null</td>
</tr>
<tr class="even">
<td>parallel</td>
<td>Value of &quot;true&quot; or &quot;false&quot; that specifies the type of queue that <%=vars.product_name%> creates.</td>
<td>false</td>
</tr>
<tr class="odd">
<td>batch-size</td>
<td>Maximum number of messages that a batch can contain.</td>
<td>100</td>
</tr>
<tr class="even">
<td>batch-time-interval</td>
<td>Maximum number of milliseconds that can elapse between sending batches.</td>
<td>5</td>
</tr>
<tr class="odd">
<td>enable-batch-conflation</td>
<td>Boolean value that determines whether <%=vars.product_name%> should conflate messages.</td>
<td>false</td>
</tr>
<tr class="even">
<td>disk-store-name</td>
<td>Named disk store to use for storing queue overflow, or for persisting the queue. If you specify a value, the named disk store must exist. If you specify a null value, <%=vars.product_name%> uses the default disk store for overflow and queue persistence.</td>
<td>null specifies the default disk store</td>
</tr>
<tr class="odd">
<td>disk-synchronous</td>
<td>For regions that write to disk, boolean that specifies whether disk writes are done synchronously for the region.</td>
<td>true</td>
</tr>
<tr class="even">
<td>dispatcher-threads</td>
<td>Number of dispatcher threads that are used to process region events from the queue.</td>
<td>5</td>
</tr>
<tr class="odd">
<td>forward-expiration-destroy</td>
<td>When true, forwards expiration destroy operations to AsyncEventListener.</td>
<td>false</td>
</tr>
<tr class="even">
<td>maximum-queue-memory</td>
<td>Maximum amount of memory in megabytes that the queue can consume before overflowing to disk.</td>
<td>100 mb</td>
</tr>
<tr class="odd">
<td>order-policy</td>
<td>When the <code class="ph codeph">dispatcher-threads</code> attribute is greater than 1, <code class="ph codeph">order-policy</code> configures the way in which multiple dispatcher threads process region events from the queue. This attribute can have one of the following values:
<ul>
<li><strong>key</strong>. When distributing region events from the local queue, multiple dispatcher threads preserve the order of key updates.</li>
<li><strong>thread</strong>. When distributing region events from the local queue, multiple dispatcher threads preserve the order in which a given thread added region events to the queue.</li>
<li><strong>partition</strong>. This option is valid for parallel event queues. When distributing region events from the local queue, multiple dispatcher threads preserve the order in which region events were added to the local queue. For a partitioned region, this means that all region events delivered to a specific partition are delivered in the same order to the remote <%=vars.product_name%> site. For a distributed region, this means that all key updates delivered to the local queue are distributed to the remote site in the same order.</li>
</ul>
<p>You cannot configure the <code class="ph codeph">order-policy</code> for a parallel event queue, because parallel queues cannot preserve event ordering for regions. Only the ordering of events for a given partition (or in a given queue of a distributed region) can be preserved.</p></td>
<td>key</td>
</tr>
<tr class="even">
<td>pause-event-processing</td>
<td>When true, event dispatching from the queue to the listener(s) will be paused when the AsyncEventQueue is started.</td>
<td>false</td>
</tr>
<tr class="odd">
<td>persistent</td>
<td>Boolean value that determines whether <%=vars.product_name%> persists this queue.</td>
<td>False</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<cache>
   <async-event-queue 
    id="sampleQueue" 
    persistent="true"
    disk-store-name="exampleStore" 
    parallel="false">
      <async-event-listener>
         <class-name>MyAsyncEventListener</class-name>
         <parameter name="url"> 
           <string>jdbc:db2:SAMPLE</string> 
         </parameter> 
         <parameter name="username"> 
           <string>gfeadmin</string> 
         </parameter> 
         <parameter name="password"> 
           <string>admin1</string> 
         </parameter>
      </async-event-listener>
   </async-event-queue>
    ...
</cache>
```

## <a id="async-event-listener" class="no-quick-link"></a>&lt;async-event-listener&gt;

An AsyncEventListener receives callbacks for events that change region data. You can use an AsyncEventListener implementation as a write-behind cache event handler to synchronize region updates with a database.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**API:** `org.apache.geode.cache.asyncqueue.AsyncEventListener`

**Example:**

``` pre
...
    <async-event-listener>
         <class-name>MyAsyncEventListener</class-name>
         <parameter name="url"> 
           <string>jdbc:db2:SAMPLE</string> 
         </parameter> 
         <parameter name="username"> 
           <string>gfeadmin</string> 
         </parameter> 
         <parameter name="password"> 
           <string>admin1</string> 
         </parameter> 
    </async-event-listener>
...
```

## <a id="cache-server" class="no-quick-link"></a>&lt;cache-server&gt;

Configures the cache to serve region data to clients in a client/server caching system. This element indicates the port the server listens on for client communication.

The `cacheserver` process uses only `cache.xml` configuration. For application servers, you can set the same configuration properties using the `org.apache.geode.cache.server.CacheServer` and `org.apache.geode.cache.Cache` interfaces. For detailed information, see the online Java API documentation.

**API:** `org.apache.geode.cache.server.CacheServer`

**&lt;cache-server&gt; Attributes**

<table>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default Value</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>bind-address</td>
<td>Hostname or IP address that the server is to listen on for client connections. If null, the server listens on the machine’s default address.</td>
<td>null</td>
</tr>
<tr class="even">
<td>hostname-for-clients</td>
<td>Hostname or IP address to pass to the client as the location where the server is listening. When the server connects to the locator it tells the locator the host and port where it is listening for client connections. If the host the server uses by default is one that the client can’t translate into an IP address, the client will have no route to the server’s host and won’t be able to find the server. For this situation, you must supply the server’s alternate hostname for the locator to pass to the client. If null, the server’s <code class="ph codeph">bind-address</code> setting is used.</td>
<td>null</td>
</tr>
<tr class="odd">
<td>load-poll-interval</td>
<td>Frequency, in milliseconds, to poll the load probe for load information on the server.</td>
<td>5000
<p>(5 seconds)</p></td>
</tr>
<tr class="even">
<td>max-connections</td>
<td>Maximum number of client connections for the server. When the maximum is reached, the server refuses additional client connections.
<p>
<b>Note:</b>
Set this at least as high as max-threads.</p></td>
<td>800</td>
</tr>
<tr class="odd">
<td>max-threads</td>
<td>Maximum number of threads allowed in this server to service client connections. When the limit is reached, server threads begin servicing multiple connections. A zero setting causes the server to use a thread for every client connection.
<p>
<b>Note:</b>
Set this no higher than max-connections.</p></td>
<td>0</td>
</tr>
<tr class="even">
<td>maximum-message-count</td>
<td>Maximum number of messages allowed in a subscription queue. When the queue reaches this limit, messages block.
<p>
<b>Note:</b>
Used only if <code class="ph codeph">client-subscription</code> is not configured.</p></td>
<td>230000</td>
</tr>
<tr class="odd">
<td>maximum-time-between-pings</td>
<td>Maximum time, in milliseconds, the server allows to pass between messages or pings indicating a client is healthy.
<p>
<b>Note:</b>
A setting of 0 or a negative number turns off client health monitoring. Be careful not to do this accidentally.</p></td>
<td>60000
<p>(1 minute)</p></td>
</tr>
<tr class="even">
<td>message-time-to-live</td>
<td>Setting used for highly available subscription queues. The expiration time, in seconds, for non-durable messages in the secondary server’s client subscription queue. The system removes non-durable messages that have been in the queue beyond this time. If set to 0 (zero), the messages are never removed.
<p>
<b>Note:</b>
Set this high enough to avoid removing messages that are still valid, to aovid losing messages during server failover.</p></td>
<td>180
<p>(3 minutes)</p></td>
</tr>
<tr class="odd">
<td>port</td>
<td>Port that the server listens on for client communication.</td>
<td>40404</td>
</tr>
<tr class="even">
<td>socket-buffer-size</td>
<td>Size for socket buffers used for server-to-client communication.</td>
<td>32768</td>
</tr>
<tr class="odd">
<td>tcp-no-delay</td>
<td>When set to true, enables TCP_NODELAY for <%=vars.product_name%> server connections to clients.</td>
<td>false</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<cache>
    <cache-server 
     port="40404" 
      />
   ...
</cache>
```

## <a id="client-subscription" class="no-quick-link"></a>&lt;client-subscription&gt;

Overflow specification for client subscription queues. Sets a capacity limit on the in-memory queue and specifies where to overflow when capacity is reached. By default no overflow is used. Specified in three parts:

**Default:** no overflow

**API:** `org.apache.geode.cache.server.ClientSubscriptionConfig`

**&lt;client-subscription&gt; Attributes**

| Attribute          | Description                                                                                                                                                                     | Default            |
|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------|
| eviction-policy    | How the capacity is calculated. The options are mem for memory use, entry for message count, and null for no overflow.                                                          | null               |
| capacity           | Used if eviction-policy is not null. Specified in megabytes for mem and as a positive integer for entry.                                                                        | 1                  |
| disk-store-name    | Used if eviction-policy is not null. Default: default disk store. If specified, the disk-store-name must specify a disk store that is already defined in the cache.             | default disk store |

**Example:**

``` pre
<cache>
 <cache-server port=4444>
   <client-subscription eviction-policy="entry | mem" capacity=35 overflow-directory="OverflowDir"></client-subscription>
   ...
 </cache-server>
</cache>
```

## <a id="custom-load-probe" class="no-quick-link"></a>&lt;custom-load-probe&gt;

Application plug-in used to provide current and predicted server load information to the server locators.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**Default:** If this is not defined, the default <%=vars.product_name%> load probe is used.

**API:** `org.apache.geode.cache.server.setLoadProbe`

**Example:**

``` pre
<custom-load-probe>
    <class-name>
     myPackage.MyLoadProbe
    </class-name>
  </custom-load-probe>
```

## <a id="pool" class="no-quick-link"></a>&lt;pool&gt;

Use for client caches. Defines a client's server pool used to communicate with servers running in a different cluster.

**API:** `org.apache.geode.cache.client.PoolFactory`

**&lt;pool&gt; Attributes**

<table>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>free-connection-timeout</td>
<td>Amount of time a thread will wait to get a pool connection before timing out with an exception. This timeout keeps threads from waiting indefinitely when the pool’s <code class="ph codeph">max-connections</code> has been reached and all connections in the pool are in use by other threads.</td>
<td>10000</td>
</tr>
<tr class="even">
<td>idle-timeout</td>
<td>Maximum time, in milliseconds, a pool connection can stay open without being used when there are more than <code class="ph codeph">min-connections</code> in the pool. Pings over the connection do not count as connection use. If set to -1, there is no idle timeout.</td>
<td>5000</td>
</tr>
<tr class="odd">
<td>load-conditioning-interval</td>
<td>Amount of time, in milliseconds, a pool connection can remain open before being eligible for silent replacement to a less-loaded server.</td>
<td>300000
<p>(5 minutes)</p></td>
</tr>
<tr class="even">
<td>max-connections</td>
<td>Maximum number of pool connections the pool can create. If the maximum connections are in use, an operation requiring a client-to-server connection blocks until a connection becomes available or the <code class="ph codeph">free-connection-timeout</code> is reached. If set to -1, there is no maximum. The setting must indicate a cap greater than <code class="ph codeph">min-connections</code>.
<p>
<b>Note:</b>
If you need to use this to cap your pool connections, you should disable the pool attribute <code class="ph codeph">pr-single-hop-enabled</code>. Leaving single hop enabled can increase thrashing and lower performance.</p></td>
<td>-1</td>
</tr>
<tr class="odd">
<td>min-connections</td>
<td>Minimum number of pool connections to keep available at all times. Used to establish the initial connection pool. If set to 0 (zero), no connection is created until an operation requires it. This number is the starting point, with more connections added later as needed, up to the <code class="ph codeph">max-connection</code> setting. The setting must be an integer greater than or equal to 0.</td>
<td>1</td>
</tr>
<tr class="even">
<td>multiuser-authentication</td>
<td>Used for installations with security where you want to accommodate multiple users within a single client. If set to true, the pool provides authorization for multiple user instances in the same client application, and each user accesses the cache through its own <code class="ph codeph">RegionService</code> instance. If false, the client either uses no authorization or just provides credentials for the single client process.</td>
<td>false</td>
</tr>
<tr class="odd">
<td>name</td>
<td>Name of this pool. Used in the client region pool-name to assign this pool to a region in the client cache.
<p>
<b>Note:</b>
This is a required property with no default setting.</p></td>
<td>none</td>
</tr>
<tr class="even">
<td>ping-interval</td>
<td>How often to communicate with the server to show the client is alive, set in milliseconds. Pings are only sent when the ping-interval elapses between normal client messages.
<p>
<b>Note:</b>
Set this lower than the server’s <code class="ph codeph">maximum-time-between-pings</code>.</p></td>
<td>10000</td>
</tr>
<tr class="odd">
<td>pr-single-hop-enabled</td>
<td>Setting used to improve access to partitioned region data in the servers. Indicates whether to use metadata about the partitioned region data storage locations to decide where to send some data requests. This allows a client to send a data operation directly to the server hosting the key. Without this, the client contacts any available server and that server contacts the data store. This is used only for operations that can be carried out on a server-by-server basis, like put, get, and destroy.</td>
<td>true</td>
</tr>
<tr class="even">
<td>read-timeout</td>
<td>Maximum time, in milliseconds, for the client to wait for a response from a server.</td>
<td>10000</td>
</tr>
<tr class="odd">
<td>retry-attempts</td>
<td>Number of times to retry a client request before giving up. If one server fails, the pool moves to the next, and so on until it is successful or it hits this limit. If the available servers are fewer than this setting, the pool will retry servers that have already failed until it reaches the limit. If this is set to -1, the pool tries every available server once.</td>
<td>-1</td>
</tr>
<tr class="even">
<td>server-group</td>
<td>Logical named server group to use from the pool. A null value uses the global server group to which all servers belong.
<p>
<b>Note:</b>
This is only used when the <code class="ph codeph">locator</code> list is defined.</p></td>
<td>null</td>
</tr>
<tr class="odd">
<td>socket-buffer-size</td>
<td>Size for socket buffers from the client to the server. Default: 32768.</td>
<td>32768</td>
</tr>
<tr class="even">
<td>statistic-interval</td>
<td>Interval, in milliseconds, at which to send client statistics to the server. If set to -1, statistics are not sent.</td>
<td>-1</td>
</tr>
<tr class="odd">
<td>subscription-ack-interval</td>
<td>Time, in milliseconds, between messages to the primary server to acknowledge event receipt.
<p>
<b>Note:</b>
Used only when <code class="ph codeph">subscription-redundancy</code> is not ‘0’ (zero).</p></td>
<td>100</td>
</tr>
<tr class="even">
<td>subscription-enabled</td>
<td>Boolean indicating whether the server should connect back to the client and automatically sends server-side cache update information. Any bind address information for the client is automatically passed to the server for use in the callbacks.</td>
<td>false</td>
</tr>
<tr class="odd">
<td>subscription-message-
<p>tracking-timeout</p></td>
<td>Time-to-live, in milliseconds, for entries in the client’s message tracking list.</td>
<td>900000
<p>(15 minutes)</p></td>
</tr>
<tr class="even">
<td>subscription-redundancy</td>
<td>Number of servers to use as backup to the primary for highly available subscription queue management. If set to 0, none are used. If set to -1, all available servers are used.</td>
<td>0</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<pool 
   name="publisher" 
   subscription-enabled="true">
     <locator 
       host="myLocatorAddress1" 
       port="12345"/>
     <locator 
       host="myLocatorAddress2" 
       port="45678"/>
</pool>
```

## <a id="locator" class="no-quick-link"></a>&lt;locator&gt;

Addresses and ports of the locators to connect to. You can define multiple locators for the pool.

**Note:**
Provide a locator list or `server` list, but not both.

**API:** `org.apache.geode.distributed.LocatorLauncher`

**&lt;locator&gt; Attributes**

| Attribute | Description                | Default |
|-----------|----------------------------|---------|
| host      | Hostname of the locator    |         |
| port      | Port number of the locator |         |

**Example:**

``` pre
<pool ...>
<locator 
       host="myLocatorHost" 
       port="12345"/>
```

## <a id="server" class="no-quick-link"></a>&lt;server&gt;

Addresses and ports of the servers to connect to.

**Note:**
Provide a server list or `locator` list, but not both.

**Default:**

**API:** `org.apache.geode.distributed.ServerLauncher`

**&lt;server&gt; Attributes**

| Attribute | Description               | Default |
|-----------|---------------------------|---------|
| host      | Hostname of the server    |         |
| port      | Port number of the server |         |

**Example:**

``` pre
<pool ...>
   <server 
       host="myServerHost" 
       port="123456"/>
</pool>
```

## <a id="disk-store" class="no-quick-link"></a>&lt;disk-store&gt;

Defines a pool of one or more disk stores, which can be used by regions, and client subscription queues.

**Default:** The cache default disk store, named "DEFAULT", is used when disk is used but no disk store is named.

**API:** `org.apache.geode.cache.DiskStore`

**&lt;disk-store&gt; Attributes**

<table>
<caption><span class="tablecap">Table 10. &lt;disk-store&gt; Attributes</span></caption>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>name</td>
<td>The name of the Disk Store.</td>
<td> </td>
</tr>
<tr class="even">
<td>auto-compact</td>
<td>Set to true to automatically compact the disk files.</td>
<td> </td>
</tr>
<tr class="odd">
<td>compaction-threshold</td>
<td>The threshold at which an oplog will become compactable. Until it reaches this threshold the oplog will not be compacted.
<p>The threshold is a percentage in the range 0 to 100.</p></td>
<td> </td>
</tr>
<tr class="even">
<td>allow-force-compaction</td>
<td>Set to true to allow disk compaction to be forced on this disk store.</td>
<td> </td>
</tr>
<tr class="odd">
<td>max-oplog-size</td>
<td>The maximum size, in megabytes, of an oplog (operation log) file.</td>
<td> </td>
</tr>
<tr class="even">
<td>time-interval</td>
<td>The number of milliseconds that can elapse before unwritten data is written to disk.</td>
<td> </td>
</tr>
<tr class="odd">
<td>write-buffer-size</td>
<td>The size of the write buffer that this disk store uses when writing data to disk. Larger values may increase performance but use more memory. The disk store allocates one direct memory buffer of this size.</td>
<td> </td>
</tr>
<tr class="even">
<td>queue-size</td>
<td>Maximum number of operations that can be asynchronously queued to be written to disk.</td>
<td> </td>
</tr>
<tr class="odd">
<td>disk-usage-warning-percentage</td>
<td>Disk usage above this threshold generates a warning message. For example, if the threshold is set to 90%, then on a 1 TB drive falling under 100 GB of free disk space generates the warning.
<p>Set to &quot;0&quot; (zero) to disable.</p></td>
<td>90</td>
</tr>
<tr class="even">
<td>disk-usage-critical-percentage</td>
<td>Disk usage above this threshold generates an error message and shuts down the member's cache. For example, if the threshold is set to 99%, then falling under 10 GB of free disk space on a 1 TB drive generates the error and shuts down the cache.
<p>Set to &quot;0&quot; (zero) to disable.</p></td>
<td>99</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<disk-store 
    name="DEFAULT" 
    allow-force-compaction="true">
     <disk-dirs>
        <disk-dir>/export/thor/customerData</disk-dir>
        <disk-dir>/export/odin/customerData</disk-dir>
        <disk-dir>/export/embla/customerData</disk-dir>
     </disk-dirs>
</disk-store>
```

## <a id="disk-dirs" class="no-quick-link"></a>&lt;disk-dirs&gt;

An element of a disk store that defines a set of `<disk-dir>` elements.

## <a id="disk-dir" class="no-quick-link"></a>&lt;disk-dir&gt;

Specifies a region or disk store's disk directory.

**&lt;disk-dir&gt; Attributes**

<table>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>dir-size</td>
<td>Maximum amount of space to use for the disk store, in megabytes.</td>
<td>214748364
<p>(2 petabytes)</p></td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<disk-dir 
    dir-size="20480">/host3/users/gf/memberA_DStore</disk-dir> 
```

## <a id="pdx" class="no-quick-link"></a>&lt;pdx&gt;

Specifies the configuration for the Portable Data eXchange (PDX) method of serialization.

**API:** `org.apache.geode.cache.CacheFactory.setPdxReadSerialized`, `setPdxDiskStore`, `setPdxPersistent`, `setPdxIgnoreUnreadFields` and `org.apache.geode.cache.ClientCacheFactory.setPdxReadSerialized`, `setPdxDiskStore`, `setPdxPersistent`, `setPdxIgnoreUnreadFields`

**&lt;pdx&gt; Attributes**

| Attribute            | Description                                                                                                                                                                                                | Default |
|----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|
| read-serialized      | Set it to true if you want PDX deserialization to produce a PdxInstance instead of an instance of the domain class.                                                                                        |         |
| ignore-unread-fields | Set it to true if you do not want unread PDX fields to be preserved during deserialization. You can use this option to save memory. Set to true only in members that are only reading data from the cache. |         |
| persistent           | Set to true if you are using persistent regions. This causes the PDX type information to be written to disk.                                                                                               |         |
| disk-store-name      | If using persistence, this attribute allows you to configure the disk store that the PDX type data will be stored in. By default, the default disk store is used.                                          |         |

**Example:**

``` pre
<cache>
  <pdx persistent="true" disk-store-name="myDiskStore">
    <pdx-serializer>
      <class-name>
       org.apache.geode.pdx.ReflectionBasedAutoSerializer
      </class-name>
    <parameter name="classes">
      <string>com.company.domain.DomainObject</string>>
    </parameter>
  </pdx-serializer>
 </pdx>
  ...
</cache>
```

## <a id="pdx-serializer_24898989679" class="no-quick-link"></a>&lt;pdx-serializer&gt;

Allows you to configure the PdxSerializer for this <%=vars.product_name%> member.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**Default:**

**API:** `org.apache.geode.cache.CacheFactory.setPdxSerializer`

**Example:**

``` pre
<cache>
  <pdx>
    <pdx-serializer>
     <class-name>com.company.ExamplePdxSerializer</class-name>
    </pdx-serializer>
  </pdx> 
  ...
</cache>
```

## <a id="region-attributes" class="no-quick-link"></a>&lt;region-attributes&gt;

Specifies a region attributes template that can be named (by `id`) and referenced (by `refid`) later in the `cache.xml` and through the API.

**API:** `org.apache.geode.cache.RegionFactory` or `org.apache.geode.cache.ClientRegionFactory`

**&lt;region-attributes&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>concurrency-level</td>
<td>Gives an estimate of the maximum number of application threads that will concurrently access a region entry at one time. This attribute does not apply to partitioned regions. This attribute helps <%=vars.product_name%> optimize the use of system resources and reduce thread contention. This sets an initial parameter on the underlying <code class="ph codeph">java.util.ConcurrentHashMap</code> used for storing region entries.
<p>
<b>Note:</b>
Before you modify this, read the concurrency level description, then see the Java API documentation for <code class="ph codeph">java.util.ConcurrentHashMap</code>.</p>
<p><strong>API:</strong> <code class="ph codeph">setConcurrencyLevel</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  concurrency-level=&quot;10&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>16 (threads)</td>
</tr>
<tr class="even">
<td>data-policy</td>
<td><p>Specifies how the local cache handles data for a region. This setting controls behavior such as local data storage and region initialization.</p>
<p>
<b>Note:</b>
Configure the most common options using the region shortcuts, <code class="ph codeph">RegionShortcut</code> and <code class="ph codeph">ClientRegionShortcut</code>. The default <code class="ph codeph">data-policy</code> of <code class="ph codeph">normal</code> specifies local cache storage. The empty policy specifies no local storage. In the region shortcuts, empty corresponds to the settings with the string <code class="ph codeph">PROXY</code>. You can use an empty region for event delivery to and from the local cache without the memory overhead of data storage.</p>
<p>You can specify the following data policies:</p>
<div class="p">
<table>
<tbody>
<tr class="odd">
<td>empty</td>
<td>No data storage in the local cache. The region always appears empty. Use this for event delivery to and from the local cache without the memory overhead of data storage - zero-footprint producers that only distribute data to others and zero-footprint consumers that only see events. To receive events with this, set the region's <code class="ph codeph">subscription-attributes</code> <code class="ph codeph">interest-policy</code> to all.</td>
</tr>
<tr class="even">
<td>normal</td>
<td>Data used locally (accessed with <code class="ph codeph">get</code>, stored with <code class="ph codeph">put</code>, etc.) is stored in the local cache. This policy allows the contents in the cache to differ from other caches.</td>
</tr>
<tr class="odd">
<td>partition</td>
<td>Data is partitioned across local and remote caches using the automatic data distribution behavior of partitioned regions. Additional configuration is done in the <code class="ph codeph">partition-attributes</code>.</td>
</tr>
<tr class="even">
<td>replicate</td>
<td>The region is initialized with the data from other caches. After initialization, all events for the distributed region are automatically copied into the local region, maintaining a replica of the entire distributed region in the local cache. Operations that would cause the contents to differ with other caches are not allowed. This is compatible with local <code class="ph codeph">scope</code>, behaving the same as for normal.</td>
</tr>
<tr class="odd">
<td>persistent-partition</td>
<td>Behaves the same as <code class="ph codeph">partition</code> and also persists data to disk.</td>
</tr>
<tr class="even">
<td>persistent-replicate</td>
<td>Behaves the same as <code class="ph codeph">replicate</code> and also persists data to disk.</td>
</tr>
<tr class="odd">
<td>preloaded</td>
<td>Initializes like a replicated region, then, once initialized, behaves like a normal region.</td>
</tr>
</tbody>
</table>
<strong>API:</strong> <code class="ph codeph">setDataPolicy</code>
</div>
<p><strong>Example</strong>:</p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  data-policy=&quot;replicate&quot;&gt; 
&lt;/region-attributes&gt;</code></pre>
<p>This is similar to using a region shortcut with<code class="ph codeph">refid</code>, however when you use the REPLICATE region shortcut, it automatically sets the region's scope to <code class="ph codeph">distributed-ack</code>.</p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  refid=&quot;REPLICATE&quot;&gt; 
&lt;/region-attributes&gt;</code></pre>
<p>If you use <code class="ph codeph">data-policy</code>, you must set the scope explicitly.</p></td>
<td>normal</td>
</tr>
<tr class="odd">
<td>enable-async-conflation</td>
<td><p>For TCP/IP distributions between peers, specifies whether to allow aggregation of asynchronous messages sent by the producer member for the region. This is a special-purpose voolean attribute that applies only when asynchronous queues are used for slow consumers. A false value disables conflation so that all asynchronous messages are sent individually. This special-purpose attribute gives you extra control over peer-to-peer communication between distributed regions using TCP/IP. This attribute does not apply to client/server communication or to communication using the UDP unicast or IP multicast protocols.</p>
<p>
<b>Note:</b>
To use this attribute, the <code class="ph codeph">multicast-enabled</code> region attribute <code class="ph codeph">disable-tcp</code> in <code class="ph codeph">gemfire.properties</code> must be false (the default for both). In addition, asynchronous queues must be enabled for slow consumers, specified with the <code class="ph codeph">async</code>* gemfire properties.</p>
<p><strong>API:</strong> <code class="ph codeph">setEnableAsyncConflation</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  enable-async-conflation=&quot;false&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>true</td>
</tr>
<tr class="odd">
<td>enable-subscription-conflation</td>
<td><p>Boolean for server regions that specifies whether the server can conflate its messages to the client. A true value enables conflation.</p>
<p>
<b>Note:</b>
<p>The client can override this setting with the <code class="ph codeph">conflate-events</code> property in its <code class="ph codeph">gemfire.properties</code>.</p>
<p><strong>API:</strong> <code class="ph codeph">setEnableSubscriptionConflation</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
 enable-subscription-conflation=&quot;true&quot;&gt;
 &lt;/region-attributes&gt;</code></pre></td>
<td>false</td>
</tr>
<tr class="even">
<td>gateway-sender-ids</td>
<td><p>Specifies one or more gateway sender IDs to use for distributing region events to remote <%=vars.product_name%> sites. Specify multiple IDs as a comma-separated list.</p>
<p><strong>API:</strong> <code class="ph codeph">addGatewaySenderId</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  gateway-sender-ids=&quot;nwsender,swsender&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>not set</td>
</tr>
<tr class="odd">
<td>async-event-queue-ids</td>
<td>Specifies one or more asynchronous event queues to use for distributing region events an <code class="ph codeph">AsyncEventListener</code> implementation (for example, for write-behind cache event handling). Specify multiple IDs as a comma-separated list.
<p><strong>API</strong>: <code class="ph codeph">addAsyncEventQueueId</code></p>
<strong>Example</strong>:
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  async-event-queue-ids=&quot;customerqueue,ordersqueue&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>not set</td>
</tr>
<tr class="even">
<td>hub-id</td>
<td><p>If the <code class="ph codeph">enable-gateway</code> attribute is set to true, a comma-separated list of gateway hub IDs that receive events from the region.</p>
<p>Used only with GemFire version 6.x gateway configurations. For GemFire 7.0 configuration, see the <code class="ph codeph">gateway-sender-id</code> attribute of the <code class="ph codeph">&lt;region-attributes&gt;</code> element.</p></td>
<td>null</td>
</tr>
<tr class="odd">
<td>id</td>
<td><p>Stores the region attribute settings in the cache with this identifier. Once stored, the attributes can be retrieved using the region attribute <code class="ph codeph">refid</code>.</p>
<p><strong>API:</strong> <code class="ph codeph">setId</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  id=&quot;persistent-replicated&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>not set</td>
</tr>
<tr class="even">
<td>ignore-jta</td>
<td><p>Boolean that determines whether operations on this region participate in active JTA transactions or ignore them and operate outside of the transactions. This is primarily used in cache loaders, writers, and listeners that need to perform non-transactional operations on a region, such as caching a result set.</p>
<p><strong>API:</strong> <code class="ph codeph">setIgnoreJTA</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  ignore-jta=&quot;true&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>false</td>
</tr>
<tr class="odd">
<td>index-update-type</td>
<td><p>Specifies whether region indexes are maintained synchronously with region modifications, or asynchronously in a background thread. In the <code class="ph codeph">cache.xml</code> file, this is set as a value, asynchronous or synchronous, assigned to the <code class="ph codeph">index-update-type</code> region attribute. Set this through the API by passing a boolean to the <code class="ph codeph">setIndexMaintenanceSynchronous</code> method.</p>
<p><strong>API:</strong> <code class="ph codeph">setIndexMaintenanceSynchronous</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  index-update-type=&quot;asynchronous&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>synchronous updates</td>
</tr>
<tr class="even">
<td>initial-capacity</td>
<td><p>Together with the <code class="ph codeph">load-factor</code> region attribute, sets the initial parameters on the underlying <code class="ph codeph">java.util.ConcurrentHashMap</code> used for storing region entries.</p>
<p><strong>API:</strong> <code class="ph codeph">setInitialCapacity</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  initial-capacity=&quot;20&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>16</td>
</tr>
<tr class="odd">
<td>is-lock-grantor</td>
<td><p>Determines whether this member defines itself as the lock grantor for the region at region creation time. This only specifies whether the member becomes lock grantor at creation and does not reflect the current state of the member’s lock grantor status. The member’s lock grantor status may change if another member subsequently defines the region with <code class="ph codeph">is-lock-grantor</code> set to true. This attribute is only relevant for regions with <code class="ph codeph">global</code> <code class="ph codeph">scope</code>, as only they allow locking. It affects implicit and explicit locking.</p>
<p><strong>API:</strong> <code class="ph codeph">setLockGrantor</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  is-lock-grantor=&quot;true&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>false</td>
</tr>
<tr class="even">
<td>load-factor</td>
<td><p>Together with the initial-capacity region attribute, sets the initial parameters on the underlying <code class="ph codeph">java.util.ConcurrentHashMap</code> used for storing region entries. This must be a floating point number between 0 and 1, inclusive.</p>
<p>
<b>Note:</b>
<p>Before you set this attribute, read the discussion of initial capacity and load factor, then see the Java API documentation for <code class="ph codeph">java.util.ConcurrentHashMap</code>.</p>
<p><strong>API:</strong> <code class="ph codeph">setLoadFactor</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  load-factor=&quot;0.85&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>.75</td>
</tr>
<tr class="odd">
<td>mirror-type</td>
<td>Deprecated</td>
<td> </td>
</tr>
<tr class="even">
<td>multicast-enabled</td>
<td><p>Boolean that specifies whether distributed operations on a region should use multicasting. To enable this, multicast must be enabled for the cluster with the <code class="ph codeph">mcast-port</code> <code class="ph codeph">gemfire.properties</code> setting.</p>
<p><strong>API:</strong> <code class="ph codeph">setMulticastEnabled</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  multicast-enabled=&quot;true&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>false</td>
</tr>
<tr class="odd">
<td>pool-name</td>
<td><p>Identifies the region as a client region and specifies the server pool the region is to use. The named pool must be defined in the client cache before the region is created. If this is not set, the region does not connect to the servers as a client region.</p>
<p><strong>API:</strong> <code class="ph codeph">setPoolName</code></p>
<p><strong>Examples:</strong></p>
<p>This declaration creates the region as a client region with a server pool named DatabasePool. This pool-name specification is required, as there are multiple pools in the client cache:</p>
<pre class="pre codeblock language-xml"><code>&lt;client-cache&gt;
    &lt;pool name=&quot;DatabasePool&quot; 
   subscription-enabled=&quot;true&quot;&gt;
        ...
    &lt;/pool&gt;
    &lt;pool &gt;
   name=&quot;OtherPool&quot; 
   subscription-enabled=&quot;true&quot;&gt;
        ...
    &lt;/pool&gt;
    &lt;region ...
        &lt;region-attributes 
          pool-name=&quot;DatabasePool&quot;&gt; 
        &lt;/region-attributes&gt;
        ...</code></pre>
<p>This declaration creates the region as a client region assigned the single pool that is defined for the client cache. Here the pool-name specification is implied to be the only pool that exists in the cache:</p>
<pre class="pre codeblock language-xml"><code>&lt;client-cache&gt;
    &lt;pool 
   name=&quot;publisher&quot; 
   subscription-enabled=&quot;true&quot;&gt;
        ...
    &lt;/pool&gt;
    &lt;region 
   name=&quot;myRegion&quot; 
   refid=&quot;CACHING_PROXY&quot;&gt;
    &lt;/region&gt;
&lt;/client-cache&gt;</code></pre></td>
<td>not set</td>
</tr>
<tr class="even">
<td>disk-store-name</td>
<td><p>Assigns the region to the disk store with this name from the disk stores defined for the cache. Persist region data to disk by defining the region as persistent using the Shortcut Attribute Options or data-policy settings. Overflow data to disk by implementing LRU eviction-attributes with an action of overflow to disk. Each disk store defines the file system directories to use, how data is written to disk, and other disk storage maintenance properties. In addition, the <code class="ph codeph">disk-synchronous</code> region attribute specifies whether writes are done synchronously or asynchronously.</p>
<p><strong>API:</strong> <code class="ph codeph">setDiskStoreName</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  disk-store-name=&quot;myStoreA&quot; &gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>null</td>
</tr>
<tr class="odd">
<td>disk-synchronous</td>
<td><p>For regions that write to disk, boolean that specifies whether disk writes are done synchronously for the region.</p>
<p><strong>API:</strong> <code class="ph codeph">setDiskSynchronous</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  disk-store-name=&quot;myStoreA&quot; 
  disk-synchronous=&quot;true&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>true</td>
</tr>
<tr class="even">
<td>refid</td>
<td><p>Retrieves region shortcuts and user-defined named region attributes for attributes initialization</p>
<p><strong>API:</strong> <code class="ph codeph">setRefId</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  refid=&quot;persistent-replicated&quot;&gt;
  &lt;!-- Override any stored 
    attribute settings that you 
    need to ... --&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>not set</td>
</tr>
<tr class="odd">
<td>scope</td>
<td><p>Definition: Determines how updates to region entries are distributed to the other caches in the cluster where the region and entry are defined. Scope also determines whether to allow remote invocation of some of the region’s event handlers, and whether to use region entry versions to provide consistent updates across replicated regions.</p>
<p>
<b>Note:</b>
<p>You can configure the most common of these options with <%=vars.product_name%> region shortcuts in <code class="ph codeph">RegionShortcut</code> and <code class="ph codeph">ClientRegionShortcut</code>.</p>
<p>
<b>Note:</b>
<p>Server regions that are not partitioned must be replicated with <code class="ph codeph">distributed-ack</code> or <code class="ph codeph">global</code> scope. The region shortcuts that specify <code class="ph codeph">REPLICATE</code> have <code class="ph codeph">distributed-ack</code> scope.</p>
<p>Set one of the following scope values:</p>
<div class="p">
<table>
<tbody>
<tr class="odd">
<td>local</td>
<td>No distribution. The region is visible only to threads running inside the member.</td>
</tr>
<tr class="even">
<td>distributed-no-ack</td>
<td>Events are distributed to remote caches with no acknowledgement required.</td>
</tr>
<tr class="odd">
<td>distributed-ack</td>
<td>Events are distributed to remote caches with receipt acknowledgement required. Region entry versions are used to provide consistent updates across members of the cluster.</td>
</tr>
<tr class="even">
<td>global</td>
<td>Events are distributed to remote caches with global locking to ensure distributed cache consistency.</td>
</tr>
</tbody>
</table>
<strong>API:</strong> <code class="ph codeph">setScope</code>
</div>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  scope=&quot;distributed-ack&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>distributed-no-ack</td>
</tr>
<tr class="even">
<td>statistics-enabled</td>
<td>Boolean specifying whether to gather statistics on the region. Must be true to use expiration on the region. <%=vars.product_name%> provides a standard set of statistics for cached regions and region entries, which give you information for fine-tuning your cluster. Unlike other <%=vars.product_name%> statistics, statistics for local and distributed regions are not archived and cannot be charted. They are kept in instances of <code class="ph codeph">org.apache.geode.cache.CacheStatistics</code> and made available through the region and its entries through the <code class="ph codeph">Region.getStatistics</code> and <code class="ph codeph">Region.Entry.getStatistics</code> methods.
<p><strong>API:</strong> <code class="ph codeph">setStatisticsEnabled</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  statistics-enabled=&quot;true&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>false</td>
</tr>
<tr class="odd">
<td>cloning-enabled</td>
<td><p>Determines how <code class="ph codeph">fromDelta</code> applies deltas to the local cache for delta propagation. When true, the updates are applied to a clone of the value and then the clone is saved to the cache. When false, the value is modified in place in the cache.</p>
<p><strong>API:</strong> <code class="ph codeph">setCloningEnabled</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  cloning-enabled=&quot;true&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>false</td>
</tr>
<tr class="even">
<td>concurrency-checks-enabled</td>
<td><p>Determines whether members perform checks to provide consistent handling for concurrent or out-of-order updates to distributed regions. See [Consistency for Region Updates](../../developing/distributed_regions/region_entry_versions.html#topic_CF2798D3E12647F182C2CEC4A46E2045).</p>
<p>
<b>Note:</b>
Applications that use a <code class="ph codeph">client-cache</code> may want to disable concurrency checking in order to see all events for a region. <%=vars.product_name%> server members can continue using concurrency checks for the region, but they will pass all events to the client cache. This configuration ensures that the client sees all events, but it does not prevent the client cache from becoming out-of-sync with the server cache.</p>
<p><strong>API:</strong> <code class="ph codeph">setConcurrencyChecksEnabled</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
 concurrency-checks-enabled=&quot;true&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>true</td>
</tr>
<tr class="odd">
<td>off-heap</td>
<td><p>Specifies that the region uses off-heap memory to store entry values, including values for region entries and queue entries. The region will still use heap memory for everything else, such as entry keys and the ConcurrentHashMap.</p>
<p><strong>API:</strong> <code class="ph codeph">setOffHeap</code></p>
<p><strong>Example:</strong></p>
<pre class="pre codeblock language-xml"><code>&lt;region-attributes 
  off-heap=&quot;true&quot;&gt;
&lt;/region-attributes&gt;</code></pre></td>
<td>false</td>
</tr>
</tbody>
</table>

## <a id="key-constraint" class="no-quick-link"></a>&lt;key-constraint&gt;

Defines the type of object to be allowed for the region entry keys. This must be a fully-qualified class name. The attribute ensures that the keys for the region entries are all of the same class. If key-constraint is not used, the region’s keys can be of any class. This attribute, along with value-constraint, is useful for querying and indexing because it provides object type information to the query engine.

**Note:**
Set the constraint in every cache where you create or update the region entries. For client/server installations, match constraints between client and server and between clusters. The constraint is only checked in the cache that does the entry `put` or `create` operation. To avoid deserializing the object, the constraint is not checked when the entry is distributed to other caches.

**Default:** not set

**API:** `org.apache.geode.cache.RegionFactory.setKeyConstraint`

**Example:**

``` pre
<region-attributes>
  <key-constraint>
   java.lang.String
  </key-constraint>
</region-attributes>
```

## <a id="value-constraint" class="no-quick-link"></a>&lt;value-constraint&gt;

Defines the type of object to be allowed for the region entry values. This must be a fully-qualified class name. If value constraint isn’t used, the region’s value can be of any class. This attribute, along with `key-constraint`, is useful for querying and indexing because it provides object type information to the query engine.

**Note:**
Set the constraint in every cache where you create or update the region entries. For client/server installations, match constraints between client and server and between clusters. The constraint is only checked in the cache that does the entry `put` or `create` operation. To avoid deserializing the object, the constraint is not checked when the entry is distributed to other caches.

**Default:** not set

**API:** `org.apache.geode.cache.RegionFactory.setValueConstraint`

**Example:**

``` pre
<region-attributes>
  <value-constraint>
   cacheRunner.Portfolio
  </value-constraint>
</region-attributes>
```

## <a id="region-time-to-live" class="no-quick-link"></a>&lt;region-time-to-live&gt;

Expiration setting that specifies how long the region can remain in the cache without anyone accessing or updating it.

**Default:** not set - no expiration of this type

**API:** `org.apache.geode.cache.RegionFactory.setRegionTimeToLive`

**Example:**

``` pre
<region-attributes 
  statistics-enabled="true">
  <region-time-to-live>
    <expiration-attributes 
      timeout="3600" 
      action="local-destroy"/>
  </region-time-to-live>
</region-attributes>
```

## <a id="expiration-attributes" class="no-quick-link"></a>&lt;expiration-attributes&gt;

Within the `entry-time-to-live` or `entry-idle-time` element, this element specifies the expiration rules for removing old region entries that you are not using. You can destroy or invalidate entries, either locally or across the cluster. Within the `region-time-to-live` or `region-idle-time` element, this element specifies the expiration rules for the entire region.

**API:** See APIs for `entry-time-to-live`, `entry-idle-time`, `region-time-to-live`, `region-idle-time`

**&lt;expiration-attributes&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>timeout</td>
<td>Number of seconds before a region or an entry expires. If timeout is not specified, it defaults to zero (which means no expiration).</td>
<td>0</td>
</tr>
<tr class="even">
<td>action</td>
<td>Action that should take place when a region or an entry expires.
<div class="p">
Select one of the following expiration actions:
<table>
<tbody>
<tr class="odd">
<td><span class="keyword option">local-destroy</span></td>
<td>Removes the region or entry from the local cache, but does not distribute the removal operation to remote members. You cannot use this action on partitioned region entries.</td>
</tr>
<tr class="even">
<td><span class="keyword option">destroy</span></td>
<td>Removes the region or entry completely from the cache. Destroy actions are distributed according to the region's distribution settings. Use this option when the region or entry is no longer needed for any application in the cluster.</td>
</tr>
<tr class="odd">
<td><span class="keyword option">invalidate</span></td>
<td>Default expiration action. Marks an entry or all entries in the region as invalid. Distributes the invalidation according to the region's scope. This is the proper choice when the region or the entry is no longer valid for any application in the cluster.</td>
</tr>
<tr class="even">
<td><span class="keyword option">local-invalidate</span></td>
<td>Marks an entry or all entries in the region as invalid but does not distribute the operation. You cannot use this action on partitioned region entries. Local region invalidation is only supported for regions that are not configured as replicated regions.</td>
</tr>
</tbody>
</table>
</div></td>
<td>invalidate</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<region-attributes 
  statistics-enabled="true">
   <region-time-to-live>
      <expiration-attributes 
        timeout="60" 
        action="local-destroy"/>
   </region-time-to-live>
</region-attributes>
```

## <a id="custom-expiry" class="no-quick-link"></a>&lt;custom-expiry&gt;

Specifies the custom class that implements `org.apache.geode.cache.CustomExpiry`. You define this class in order to override the region-wide settings for specific entries. See [Configure Data Expiration](../../developing/expiration/configuring_data_expiration.html) for an example.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

**API:** `org.apache.geode.cache.RegionFactory.setCustomEntryIdleTimeout`, `setCustomeEntryTimeToLive`

**Example:**

``` pre
<region-attributes>
    <expiration-attributes 
       timeout="60" 
       action="local-destroy">
      <custom-expiry> 
        <class-name>
          com.megaconglomerate.mypackage.MyClass
        </class-name> 
      </custom-expiry>
</region-attributes>
```

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

## <a id="region-idle-time" class="no-quick-link"></a>&lt;region-idle-time&gt;

Expiration setting that specifies how long the region can remain in the cache without anyone accessing it.

**Note:**
To ensure reliable read behavior across the partitioned region, use `region-time-to-live` for region expiration instead of this setting.

**Default:** not set - no expiration of this type

**API:** `org.apache.geode.cache.RegionFactory.setRegionIdleTimeout`

**Example:**

``` pre
<region-attributes statistics-enabled="true">
  <region-idle-time>
    <expiration-attributes 
      timeout="3600" 
      action="local-destroy"/>
  </region-idle-time>
</region-attributes>
```

## <a id="region-idle-time_expiration-attributes" class="no-quick-link"></a>&lt;expiration-attributes&gt;

Within the `entry-time-to-live` or `entry-idle-time` element, this element specifies the expiration rules for removing old region entries that you are not using. You can destroy or invalidate entries, either locally or across the cluster. Within the `region-time-to-live` or `region-idle-time` element, this element specifies the expiration rules for the entire region.

**API:** See APIs for `entry-time-to-live`, `entry-idle-time`, `region-time-to-live`, `region-idle-time`

**&lt;expiration-attributes&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>timeout</td>
<td>Number of seconds before a region or an entry expires. If timeout is not specified, it defaults to zero (which means no expiration).</td>
<td>0</td>
</tr>
<tr class="even">
<td>action</td>
<td>Action that should take place when a region or an entry expires.
<div class="p">
Select one of the following expiration actions:
<table>
<tbody>
<tr class="odd">
<td><span class="keyword option">local-destroy</span></td>
<td>Removes the region or entry from the local cache, but does not distribute the removal operation to remote members. You cannot use this action on partitioned region entries.</td>
</tr>
<tr class="even">
<td><span class="keyword option">destroy</span></td>
<td>Removes the region or entry completely from the cache. Destroy actions are distributed according to the region's distribution settings. Use this option when the region or entry is no longer needed for any application in the cluster.</td>
</tr>
<tr class="odd">
<td><span class="keyword option">invalidate</span></td>
<td>Default expiration action. Marks an entry or all entries in the region as invalid. Distributes the invalidation according to the region's scope. This is the proper choice when the region or the entry is no longer valid for any application in the cluster.</td>
</tr>
<tr class="even">
<td><span class="keyword option">local-invalidate</span></td>
<td>Marks an entry or all entries in the region as invalid but does not distribute the operation. You cannot use this action on partitioned region entries. Local region invalidation is only supported for regions that are not configured as replicated regions.</td>
</tr>
</tbody>
</table>
</div></td>
<td>invalidate</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<region-attributes 
  statistics-enabled="true">
   <region-idle-time>
      <expiration-attributes 
        timeout="60" 
        action="local-destroy"/>
   </region-idle-time>
</region-attributes>
```

## <a id="region-idle-time_custom-expiry" class="no-quick-link"></a>&lt;custom-expiry&gt;

Specifies the custom class that implements `org.apache.geode.cache.CustomExpiry`. You define this class in order to override the region-wide settings for specific entries. See [Configure Data Expiration](../../developing/expiration/configuring_data_expiration.html) for an example.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

**API:** `org.apache.geode.cache.RegionFactory.setCustomEntryIdleTimeout`, `setCustomeEntryTimeToLive`

**Example:**

``` pre
<region-attributes>
    <expiration-attributes 
       timeout="60" 
       action="local-destroy">
      <custom-expiry> 
        <class-name>
          com.megaconglomerate.mypackage.MyClass
        </class-name> 
      </custom-expiry>
</region-attributes>
```

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

## <a id="entry-time-to-live" class="no-quick-link"></a>&lt;entry-time-to-live&gt;

Expiration setting that specifies how long the region’s entries can remain in the cache without anyone accessing or updating them. See [&lt;expiration-attributes&gt;](#expiration-attributes) for details.

**Default:** not set - no expiration of this type.

**API:** `org.apache.geode.cache.RegionFactory.setEntryTimeToLive`

**Example:**

``` pre
<region-attributes
  statistics-enabled="true">
  <entry-time-to-live>
    <expiration-attributes
     timeout="60"
     action="local-destroy"/>
  </entry-time-to-live>
</region-attributes>
```

## <a id="entry-time-to-live_expiration-attributes" class="no-quick-link"></a>&lt;expiration-attributes&gt;

Within the `entry-time-to-live` or `entry-idle-time` element, this element specifies the expiration rules for removing old region entries that you are not using. You can destroy or invalidate entries, either locally or across the cluster. Within the `region-time-to-live` or `region-idle-time` element, this element specifies the expiration rules for the entire region.

**API:** See APIs for `entry-time-to-live`, `entry-idle-time`, `region-time-to-live`, `region-idle-time`

**&lt;expiration-attributes&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>timeout</td>
<td>Number of seconds before a region or an entry expires. If timeout is not specified, it defaults to zero (which means no expiration).</td>
<td>0</td>
</tr>
<tr class="even">
<td>action</td>
<td>Action that should take place when a region or an entry expires.
<div class="p">
Select one of the following expiration actions:
<table>
<tbody>
<tr class="odd">
<td><span class="keyword option">local-destroy</span></td>
<td>Removes the region or entry from the local cache, but does not distribute the removal operation to remote members. You cannot use this action on partitioned region entries.</td>
</tr>
<tr class="even">
<td><span class="keyword option">destroy</span></td>
<td>Removes the region or entry completely from the cache. Destroy actions are distributed according to the region's distribution settings. Use this option when the region or entry is no longer needed for any application in the cluster.</td>
</tr>
<tr class="odd">
<td><span class="keyword option">invalidate</span></td>
<td>Default expiration action. Marks an entry or all entries in the region as invalid. Distributes the invalidation according to the region's scope. This is the proper choice when the region or the entry is no longer valid for any application in the cluster.</td>
</tr>
<tr class="even">
<td><span class="keyword option">local-invalidate</span></td>
<td>Marks an entry or all entries in the region as invalid but does not distribute the operation. You cannot use this action on partitioned region entries. Local region invalidation is only supported for regions that are not configured as replicated regions.</td>
</tr>
</tbody>
</table>
</div></td>
<td>invalidate</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<region-attributes 
  statistics-enabled="true">
   <entry-time-to-live>
      <expiration-attributes 
        timeout="60" 
        action="local-destroy"/>
   </entry-time-to-live>
</region-attributes>
```

## <a id="entry-time-to-live_custom_expiry" class="no-quick-link"></a>&lt;custom-expiry&gt;

Specifies the custom class that implements `org.apache.geode.cache.CustomExpiry`. You define this class in order to override the region-wide settings for specific entries. See [Configure Data Expiration](../../developing/expiration/configuring_data_expiration.html) for an example.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

**API:** `org.apache.geode.cache.RegionFactory.setCustomEntryIdleTimeout`, `setCustomeEntryTimeToLive`

**Example:**

``` pre
<region-attributes>
    <expiration-attributes 
       timeout="60" 
       action="local-destroy">
      <custom-expiry> 
        <class-name>
          com.megaconglomerate.mypackage.MyClass
        </class-name> 
      </custom-expiry>
</region-attributes>
```

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

## <a id="entry-idle-time" class="no-quick-link"></a>&lt;entry-idle-time&gt;

Expiration setting that specifies how long the region’s entries can remain in the cache without anyone accessing them. See [&lt;expiration-attributes&gt;](#expiration-attributes) for details.

**Note:**
To ensure reliable read behavior across the partitioned region, use `entry-time-to-live` for entry expiration instead of this setting.

**API:** `org.apache.geode.cache.RegionFactory.setEntryIdleTimeout`

**Example:**

``` pre
<region-attributes 
  statistics-enabled="true">
  <entry-idle-time>
    <expiration-attributes 
      timeout="60" 
      action="local-invalidate"/>
    </expiration-attributes>
  </entry-idle-time>
</region-attributes>
```

## <a id="entry-idle-time_expiration-attributes" class="no-quick-link"></a>&lt;expiration-attributes&gt;

Within the `entry-time-to-live` or `entry-idle-time` element, this element specifies the expiration rules for removing old region entries that you are not using. You can destroy or invalidate entries, either locally or across the cluster. Within the `region-time-to-live` or `region-idle-time` element, this element specifies the expiration rules for the entire region.

**API:** See APIs for `entry-time-to-live`, `entry-idle-time`, `region-time-to-live`, `region-idle-time`

**&lt;expiration-attributes&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>timeout</td>
<td>Number of seconds before a region or an entry expires. If timeout is not specified, it defaults to zero (which means no expiration).</td>
<td>0</td>
</tr>
<tr class="even">
<td>action</td>
<td>Action that should take place when a region or an entry expires.
<div class="p">
Select one of the following expiration actions:
<table>
<tbody>
<tr class="odd">
<td><span class="keyword option">local-destroy</span></td>
<td>Removes the region or entry from the local cache, but does not distribute the removal operation to remote members. You cannot use this action on partitioned region entries.</td>
</tr>
<tr class="even">
<td><span class="keyword option">destroy</span></td>
<td>Removes the region or entry completely from the cache. Destroy actions are distributed according to the region's distribution settings. Use this option when the region or entry is no longer needed for any application in the cluster.</td>
</tr>
<tr class="odd">
<td><span class="keyword option">invalidate</span></td>
<td>Default expiration action. Marks an entry or all entries in the region as invalid. Distributes the invalidation according to the region's scope. This is the proper choice when the region or the entry is no longer valid for any application in the cluster.</td>
</tr>
<tr class="even">
<td><span class="keyword option">local-invalidate</span></td>
<td>Marks an entry or all entries in the region as invalid but does not distribute the operation. You cannot use this action on partitioned region entries. Local region invalidation is only supported for regions that are not configured as replicated regions.</td>
</tr>
</tbody>
</table>
</div></td>
<td>invalidate</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<region-attributes 
  statistics-enabled="true">
   <entry-idle-time>
      <expiration-attributes 
        timeout="60" 
        action="local-destroy"/>
   </entry-idle-time>
</region-attributes>
```

## <a id="entry-idle-time_custom-expiry" class="no-quick-link"></a>&lt;custom-expiry&gt;

Specifies the custom class that implements `org.apache.geode.cache.CustomExpiry`. You define this class in order to override the region-wide settings for specific entries. See [Configure Data Expiration](../../developing/expiration/configuring_data_expiration.html) for an example.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

**API:** `org.apache.geode.cache.RegionFactory.setCustomEntryIdleTimeout`, `setCustomeEntryTimeToLive`

**Example:**

``` pre
<region-attributes>
    <expiration-attributes 
       timeout="60" 
       action="local-destroy">
      <custom-expiry> 
        <class-name>
          com.megaconglomerate.mypackage.MyClass
        </class-name> 
      </custom-expiry>
</region-attributes>
```

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

## <a id="partition-attributes" class="no-quick-link"></a>&lt;partition-attributes&gt;

Defines the region as partitioned and controls partitioning behavior. This is set during the region creation in the first data store for the partitioned region.

**Note:**
With the exception of `local-max-memory`, all members defining a partitioned region must use the same partition attribute settings.

**API:** `org.apache.geode.cache.RegionFactory.setPartitionAttributes`

**&lt;partition-attributes&gt; Attributes**

| Attribute              | Description        | Default              |
|------------------------|--------------------|----------------------|
| colocated-with         | The full name of a region to colocate with this region. The named region must exist before this region is created.                                     | null                 |
| local-max-memory       | Maximum megabytes of memory set aside for this region in the local member. This is all memory used for this partitioned region - for primary buckets and any redundant copies. This value must be smaller than the Java settings for the initial or maximum JVM heap. When the memory use goes above this value, <%=vars.product_name%> issues a warning, but operation continues. Besides setting the maximum memory to use for the member, this setting also tells <%=vars.product_name%> how to balance the load between members where the region is defined. For example, if one member sets this value to twice the value of another member’s setting, <%=vars.product_name%> works to keep the ratio between the first and the second at two-to-one, regardless of how little memory the region consumes. This is a local parameter that applies only to the local member. A value of 0 disables local data caching. | 90% (of local heap)  |
| recovery-delay         | Applies when `redundant-copies` is greater than zero. The number of milliseconds to wait after a member crashes before reestablishing redundancy for the region. A setting of -1 disables automatic recovery of redundancy after member failure.             | -1                   |
| redundant-copies       | Number of extra copies that the partitioned region must maintain for each entry. Range: 0-3. If you specify 1, this partitioned region maintains the original and one backup, for a total of two copies. A value of 0 disables redundancy. | 0                    |
| startup-recovery-delay | Applies when `redundant-copies` is greater than zero. The number of milliseconds a newly started member should wait before trying to satisfy redundancy of region data stored on other members. A setting of -1 disables automatic recovery of redundancy after new members join. | 0                    |
| total-max-memory       | Maximum combined megabytes of memory to be used by all processes hosting this region for all copies, primary and redundant. | ` Integer.MAX_VALUE` |
| total-num-buckets      | Total number of buckets or data storage areas allotted for the entire partitioned region in the distributed cache. As data moves from one member to another, the entries in a bucket move as one unit. This value should be a prime number at least four times the number of data stores. More buckets increases overhead, however, especially when redundant-copies = 2 or 3 .| 113                  |

**Example:**

``` pre
<region-attributes>
  <partition-attributes 
   redundant-copies="1" 
   total-num-buckets= "613"/>
</region-attributes>
```

## <a id="partition-resolver" class="no-quick-link"></a>&lt;partition-resolver&gt;

Describes a custom PartitionResolver for a region.

**API:** `org.apache.geode.cache.PartitionAttributesFactory.setPartitionResolver`

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**&lt;partition-resolver&gt; Attributes**

| Attribute | Description                                | Default |
|-----------|--------------------------------------------|---------|
| name      | The name of this custom PartitionResolver. |         |

**Example:**

``` pre
<region name="trades">
  <region-attributes>
      <partition-attributes>
          <partition-resolver name="TradesPartitionResolver"> 
              <class-name>myPackage.TradesPartitionResolver
              </class-name>
          </partition-resolver>
      </partition-attributes>
  </region-attributes>
</region>
```

## <a id="partition-listener" class="no-quick-link"></a>&lt;partition-listener&gt;

Defines a custom PartitionListener for a partitioned region.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**API:** `org.apache.geode.cache.PartitionAttributesFactory.PartitionListener`

**Example:**

``` pre
<partition-attributes redundant-copies="1">
     <partition-listener>
         <class-name>com.myCompany.ColocatingPartitionListener</class-name.
          <parameter name="viewRegions">
              <string>/customer/ViewA,/customer/ViewB</string>
          </parameter>             
     </partition-listener>
 </partition-attributes>
```

## <a id="fixed-partition-attributes" class="no-quick-link"></a>&lt;fixed-partition-attributes&gt;

Describes a partition in a Fixed Partitioned Region.

**API:** `org.apache.geode.cache.PartitionAttributesFactory.addFixedPartitionAttributes`

**&lt;fixed-partition-attributes&gt; Attributes**

| Attribute      | Description                                             | Default |
|----------------|---------------------------------------------------------|---------|
| partition-name | The name of this fixed partition.                       |         |
| is-primary     | Set to true if this partition is the primary partition. | false   |
| num-buckets    | The number of buckets assigned to this partition.       |         |


**Example:**

``` pre
<cache>
   <region name="Trades">
      <region-attributes>
         <partition-attributes 
          redundant-copies="1"> 
          <partition-resolver name="QuarterFixedPartitionResolver">
             <fixed-partition-attributes 
               partition-name="Q1" 
               is-primary="true"/>
             <fixed-partition-attributes 
               partition-name="Q3" 
               is-primary="false" 
               num-buckets="6"/>
         </partition-attributes> 
      </region-attributes>
   </region>
</cache>
```

## <a id="membership-attributes" class="no-quick-link"></a>&lt;membership-attributes&gt;

Establishes reliability requirements and behavior for a region. Use this to configure the region to require one or more membership roles to be running in the system for reliable access to the region. You can set up your own roles, such as producer or backup, specifying each role as a string. Membership attributes have no effect unless one or more required roles are specified.

**API:** `org.apache.geode.cache.RegionFactory.setMembershipAttributes`

**&lt;membership-attributes&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>loss-action</td>
<td><p>Set one of the following values to specify how access to the region is affected when one or more required roles are lost.</p>
<div class="p">
<table>
<tbody>
<tr class="odd">
<td>full-access</td>
<td>Access to the region is unaffected when required roles are missing.</td>
</tr>
<tr class="even">
<td>limited-access</td>
<td>Only local access to the region is allowed when required roles are missing.</td>
</tr>
<tr class="odd">
<td>no-access</td>
<td>The region is unavailable when required roles are missing.</td>
</tr>
<tr class="even">
<td>reconnect</td>
<td>Loss of required roles causes the entire cache to be closed.</td>
</tr>
</tbody>
</table>
</div></td>
<td>no_access</td>
</tr>
<tr class="even">
<td>resumption-action</td>
<td><div class="p">
Specifies how the region is affected by resumption of reliability when one or more missing required roles return to the distributed membership. Set one of the following values:
<table>
<tbody>
<tr class="odd">
<td>none</td>
<td>No special action takes place when reliability resumes.</td>
</tr>
<tr class="even">
<td>reinitialize</td>
<td>Resumption of reliability causes the region to be cleared of all data and replicated regions will do a new getInitialImage operation to repopulate the region.</td>
</tr>
</tbody>
</table>
</div></td>
<td>reinitialize</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<!-- If there is no "producer" member 
  running, do not allow access to the region -->
<region-attributes>
  <membership-attributes 
    loss-action="no-access" 
    resumption-action="none">
    <required-role 
      name="producer">
    </required-role>
  </membership-attributes>
</region-attributes>
```

## <a id="required-role" class="no-quick-link"></a>&lt;required-role&gt;

Specifies a role that is required for reliable access to the region.

**API:** `org.apache.geode.cache.MembershipAttributes`

**&lt;required-role&gt; Attributes**

| Attribute | Description                    | Default |
|-----------|--------------------------------|---------|
| name      | The name of the required role. |         |

**Example:**

``` pre
<membership-attributes 
  loss-action="no-access" 
  resumption-action="none">
    <required-role name="producer"/>
</membership-attributes>
```

## <a id="subscription-attributes" class="no-quick-link"></a>&lt;subscription-attributes&gt;

Specifies subscriber requirements and behavior for the region. There is one subscription attribute, `interest-policy`, that defines which distributed entry events are delivered to the local region.

**Note:**
The interest policy determines which events are delivered, but the `data-policy` determines how the events are applied to the cache.

**API:** `org.apache.geode.cache.RegionFactory.setSubscriptionAttributes`

**&lt;subscription-attributes&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>interest-policy</td>
<td>The two <code class="ph codeph">interest-policy</code> options are:
<div class="p">
<table>
<tbody>
<tr class="odd">
<td>cache-content</td>
<td>The default, registers interest in events only for entries that are already in the local region. For partitioned regions, the local member must hold the primary copy of the entry’s data.</td>
</tr>
<tr class="even">
<td>all</td>
<td>Registers interest in events for all entries that are anywhere in the distributed or partitioned region, regardless of whether they are already present in the local cache.</td>
</tr>
</tbody>
</table>
</div></td>
<td>cache-content</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<region-attributes>
  <subscription-attributes 
   interest-policy="all"/>
</region-attributes>
```

## <a id="topic_qsb_pnw_bm" class="no-quick-link"></a>&lt;cache-loader&gt;

An event-handler plug-in that allows you to program for cache misses. At most, one cache loader can be defined in each member for the region. For distributed regions, a cache loader may be invoked remotely from other members that have the region defined. When an entry get results in a cache miss in a region with a cache loader defined, the loader’s <span class="keyword apiname">load</span> method is called. This method is usually programmed to retrieve data from an outside data source, but it can do anything required by your application.

For partitioned regions, if you want to have a cache loader, install an instance of the cache loader in every data store. Partitioned regions support partitioned loading, where each cache loader loads only the data entries in the local member. If data redundancy is configured, data is loaded only if the local member holds the primary copy.

**API:** `org.apache.geode.cache.RegionFactory.setCacheLoader`

**Example:**

``` pre
<region-attributes>
  <cache-loader>
    <class-name>quickstart.SimpleCacheLoader</class-name>
  </cache-loader>
</region-attributes>
```

## <a id="topic_h53_pnw_bm" class="no-quick-link"></a>&lt;cache-writer&gt;

An event-handler plug-in that allows you to receive before-event notification for changes to the region and its entries. It also has the ability to abort events. At most, one cache writer can be defined in each member for the region. A cache writer may be invoked remotely from other members that have the region defined.

**API:** `org.apache.geode.cache.RegionFactory.setCacheWriter`

**Example:**

``` pre
<region-attributes>
  <cache-writer>
    <class-name>quickstart.SimpleCacheWriter</class-name>
  </cache-writer>
</region-attributes>
```

## <a id="cache-listener" class="no-quick-link"></a>&lt;cache-listener&gt;

An event-handler plug-in that receives after-event notification of changes to the region and its entries. Any number of cache listeners can be defined for a region in any member. <%=vars.product_name%> offers several listener types with callbacks to handle data and process events. Depending on the `data-policy` and the `interest-policy` subscription attributes, a cache listener may receive only events that originate in the local cache, or it may receive those events along with events that originate remotely.

Specify the Java class for the cache listener and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**API:** `org.apache.geode.cache.RegionFactory.addCacheListener`

**Example:**

``` pre
<region-attributes>
  <cache-listener>
    <class-name>
      quickstart.SimpleCacheListener
    </class-name>
  </cache-listener>
</region-attributes>
```

## <a id="topic_pcd_t25_44" class="no-quick-link"></a>&lt;compressor&gt;

A compressor registers a custom class that extends `Compressor` to support compression on a region.

**Example:**

``` pre
 ...
<compressor>
<class-name>
            <parameter>
               <string>
               <declarable>
</compressor>
...
```

## <a id="eviction-attributes" class="no-quick-link"></a>&lt;eviction-attributes&gt;

Specifies whether and how to control a region’s size. Size is controlled by removing least recently used (LRU) entries to make space for new ones. This may be done through destroy or overflow actions. You can configure your region for lru-heap-percentage with an eviction action of local-destroy using stored region attributes.

**Default:** Uses the lru-entry-count algorithm.

**API:** `org.apache.geode.cache.RegionFactory.setEvictionAttributes`

**Example:**

``` pre
<region-attributes>
  <eviction-attributes> 
    <lru-entry-count 
      maximum="1000" 
      action="overflow-to-disk"/>
  </eviction-attributes>
</region-attributes
```

## <a id="lru-entry-count" class="no-quick-link"></a>&lt;lru-entry-count&gt;

Using the maximum attribute, specifies maximum region capacity based on entry count.

**&lt;lru-entry-count&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>action</td>
<td>Set one of the following eviction actions:
<div class="p">
<table>
<tbody>
<tr class="odd">
<td>local-destroy</td>
<td>Removes the entry from the local cache, but does not distribute the removal operation to remote
members.  This action can be applied to an entry in a partitioned region, but is not recommended
if redundancy is enabled (redundant-copies > 0), as it introduces inconsistencies between the
redundant buckets.  When applied to an entry in a replicated region, <%=vars.product_name%> silently changes
the region type to "preloaded" to accommodate the local modification.</td>
</tr>
<tr class="even">
<td>overflow-to-disk</td>
<td>The entry's value is overflowed to disk and set to null in memory. The
entry's key is retained in the cache.</td>
</tr>
</tbody>
</table>
</div></td>
<td>local-destroy</td>
</tr>
<tr class="even">
<td>maximum</td>
<td>The maximum number of entries allowed in a region.</td>
<td> </td>
</tr>
</tbody>
</table>

## <a id="lru-heap-percentage" class="no-quick-link"></a>&lt;lru-heap-percentage&gt;

Runs evictions when the <%=vars.product_name%> resource manager says to. The manager orders
evictions when the total cache size is over the heap or off-heap percentage limit specified in the resource manager
configuration. You can declare a Java class that implements the ObjectSizer interface to measure the
size of objects in the Region.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**&lt;lru-heap-percentage&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>action</td>
<td>Set one of the following eviction actions:
<div class="p">
<table>
<tbody>
<tr class="odd">
<td>local-destroy</td>
<td>Removes the entry from the local cache, but does not distribute the removal operation to remote
members.  This action can be applied to an entry in a partitioned region, but is not recommended
if redundancy is enabled (redundant-copies > 0), as it introduces inconsistencies between the
redundant buckets.  When applied to an entry in a replicated region, <%=vars.product_name%> silently changes
the region type to "preloaded" to accommodate the local modification.</td>
</tr>
<tr class="even">
<td>overflow-to-disk</td>
<td>The entry's value is overflowed to disk and set to null in memory. The
entry's key is retained in the cache.</td>
</tr>
</tbody>
</table>
</div></td>
<td>local-destroy</td>
</tr>
</tbody>
</table>

## <a id="lru-memory-size" class="no-quick-link"></a>&lt;lru-memory-size&gt;

Using the maximum attribute, specifies maximum region capacity based on the amount of memory used, in megabytes. You can declare a Java class that implements the ObjectSizer interface to measure the size of objects in the Region.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**&lt;lru-memory-size&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>action</td>
<td>Set one of the following eviction actions:
<div class="p">
<table>
<tbody>
<tr class="odd">
<td>local-destroy</td>
<td>Removes the entry from the local cache, but does not distribute the removal operation to remote
members.  This action can be applied to an entry in a partitioned region, but is not recommended
if redundancy is enabled (redundant-copies > 0), as it introduces inconsistencies between the
redundant buckets.  When applied to an entry in a replicated region, <%=vars.product_name%> silently changes
the region type to "preloaded" to accommodate the local modification.</td>
</tr>
<tr class="even">
<td>overflow-to-disk</td>
<td>The entry's value is overflowed to disk and set to null in memory. The
entry's key is retained in the cache.</td>
</tr>
</tbody>
</table>
</div></td>
<td>local-destroy</td>
</tr>
<tr class="even">
<td>maximum</td>
<td>The maximum amount of memory used in the region, in megabytes.</td>
<td> </td>
</tr>
</tbody>
</table>

## <a id="jndi-bindings" class="no-quick-link"></a>&lt;jndi-bindings&gt;

Specifies the binding for a data-source used in transaction management. See [Configuring Database Connections Using JNDI](../../developing/outside_data_sources/configuring_db_connections_using_JNDI.html).

**Example:**

``` pre
<jndi-bindings>
      <jndi-binding type="XAPooledDataSource" 
    jndi-name="newDB2trans" 
    init-pool-size="20" 
    max-pool-size="100"
    idle-timeout-seconds="20"
    blocking-timeout-seconds="5" 
    login-timeout-seconds="10"
    xa-datasource-class="org.apache.derby.jdbc.EmbeddedXADataSource"
    user-name="mitul" 
    password="encrypted(83f0069202c571faf1ae6c42b4ad46030e4e31c17409e19a)">
         <config-property>
          <config-property-name>Description</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
          <config-property-value>pooled_transact</config-property-value>
       </config-property>
          <config-property>
             <config-property-name>DatabaseName</config-property-name>
             <config-property-type>java.lang.String</config-property-type>
             <config-property-value>newDB</config-property-value>
          </config-property>
          <config-property>
             <config-property-name>CreateDatabase</config-property-name>
             <config-property-type>java.lang.String</config-property-type>
             <config-property-value>create</config-property-value>
          </config-property>         
       . . .
      </jndi-binding>
   </jndi-bindings>
```

## <a id="jndi-binding" class="no-quick-link"></a>&lt;jndi-binding&gt;

For every datasource that is bound to the JNDI tree, there should be one `<jndi-binding>` element. This element describes the property and the configuration of the datasource. <%=vars.product_name%> uses the attributes of the `<jndi-binding>` element for configuration. Use the `<config-property>` element to configure properties for the datasource.

We recommend that you set the username and password with the `user-name` and `password` jndi-binding attributes rather than using the `<config-property>` element.

**&lt;jndi-binding&gt; Attributes**

<table>
<colgroup>
<col width="33%" />
<col width="33%" />
<col width="33%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>blocking-timeout-seconds</td>
<td>The number of seconds that a connection remains associated with a transaction. If this value is exceeded, the connection is disassociated from the transaction.</td>
<td>120</td>
</tr>
<tr class="even">
<td>conn-pooled-datasource-class</td>
<td>Java class used for the <code class="ph codeph">PooledDataSource</code> type.</td>
<td> </td>
</tr>
<tr class="odd">
<td>connection-url</td>
<td>URL for connecting to the datasource.
<p>
<b>Note:</b>
<p>If you are connecting to a JCA data source driver that implements XA transactions (where the jndi-binding type is <strong>XAPooledDataSource</strong>), do not use this attribute. Instead, define configuration properties for your database. See <a href="#config-property">&lt;config-property&gt</a> for an example.</p></td>
<td> </td>
</tr>
<tr class="even">
<td>idle-timeout-seconds</td>
<td>The maximum number of seconds that a connection can remain idle in a pool. When this threshold is reached, the connection is removed.</td>
<td>600</td>
</tr>
<tr class="odd">
<td>init-pool-size</td>
<td>The initial pool size of a PooledConnection (an XAConnection or a non-XAConnection).</td>
<td>10</td>
</tr>
<tr class="even">
<td>jdbc-driver-class</td>
<td>Java class used for the <code class="ph codeph">SimpleDataSource</code> type.</td>
<td> </td>
</tr>
<tr class="odd">
<td>jndi-name</td>
<td>The <code class="ph codeph">jndi-name</code> attribute is the key binding parameter. If the value of jndi-name is a DataSource, it is bound as java:/myDatabase, where myDatabase is the name you assign to your data source. If the data source cannot be bound to JNDI at runtime, <%=vars.product_name%> logs a warning.</td>
<td> </td>
</tr>
<tr class="even">
<td>login-timeout-seconds</td>
<td><p>The maximum number of seconds for which a thread seeking a connection from a connection pool may be blocked. If the thread is unable to obtain connection in the stipulated time, a <span class="keyword apiname">PoolException</span> is thrown</p>
<p>If a connection is available the thread returns immediately.</p>
<p>If an existing connection is not available and the maximum number of connections in the pool has not been reached, a new connection is created and the thread returns immediately with the connection.</p>
<p>If a connection is not available, the thread blocks for the specified time while waiting for an available connection.</p></td>
<td>30</td>
</tr>
<tr class="odd">
<td>managed-conn-factory-class</td>
<td>If the Resource Adapter is of type <span class="keyword apiname">ManagedDataSource</span>, this class becomes the source of the <span class="keyword apiname">PooledConnection</span>. (This class interface complies with the J2CA Java 2 Connector Architecture.)</td>
<td> </td>
</tr>
<tr class="even">
<td>max-pool-size</td>
<td>The maximum size of the PooledConnection.</td>
<td>30</td>
</tr>
<tr class="odd">
<td>password</td>
<td>Password to access the datasource.</td>
<td> </td>
</tr>
<tr class="even">
<td>transaction-type</td>
<td>When the <code class="ph codeph">type</code> attribute is set to <code class="ph codeph">ManagedDataSource</code>, specifies the type of transaction. Set one of the following <code class="ph codeph">transaction-type</code>s:
<div class="p">
<table>
<tbody>
<tr class="odd">
<td>XATransaction</td>
<td>Select this option when you want to use a<span class="keyword apiname">ManagedConnection</span> interface with a Java Transaction Manager to define transaction boundries. This option allows a <span class="keyword apiname">ManagedDataSource</span> to participate in a transaction with a <%=vars.product_name%> cache.</td>
</tr>
<tr class="even">
<td>NoTransaction</td>
<td>No transactional behavior is used.</td>
</tr>
<tr class="odd">
<td>LocalTransaction</td>
<td>Select this option when using a <span class="keyword apiname">ManagedDataSource</span> that is not managed by the Java Transaction manager.</td>
</tr>
</tbody>
</table>
</div></td>
<td>none</td>
</tr>
<tr class="odd">
<td>type</td>
<td><div class="p">
Set one of the following types:
<table>
<tbody>
<tr class="odd">
<td>XAPooledDataSource</td>
<td>Pooled SQL connections. For this type, you must also set the <code class="ph codeph">xa-datasource-class</code> attribute.</td>
</tr>
<tr class="even">
<td>ManagedDataSource</td>
<td>JNDI binding type for the J2EE Connector Architecture (JCA). ManagedConnectionFactory. For information on the ManagedConnection interface, See the [Oracle ManagedConnection docs](http://docs.oracle.com/javaee/6/api/javax/resource/spi/ManagedConnection.html).</td>
</tr>
<tr class="odd">
<td>PooledDataSource</td>
<td>Pooled SQL connections. For this type, you must also set the <code class="ph codeph">conn-pooled-datasource-class</code> attribute.</td>
</tr>
<tr class="even">
<td>SimpleDataSource</td>
<td>Single SQL connection. No pooling of SQL connections is done. Connections are generated on the fly and cannot be reused. For this type, you must also set the <code class="ph codeph">jdbc-driver-class</code> attribute.</td>
</tr>
</tbody>
</table>
</div></td>
<td>none</td>
</tr>
<tr class="even">
<td>user-name</td>
<td>User name to access to the datasource.</td>
<td> </td>
</tr>
<tr class="odd">
<td>xa-datasource-class</td>
<td>Java class used for the <code class="ph codeph">XAPooledDataSource</code> type.</td>
<td> </td>
</tr>
</tbody>
</table>

## <a id="config-property" class="no-quick-link"></a>&lt;config-property&gt;

A configuration property of the datasource. Use the sub-elements to identify the name, datatype, and value of the property.

**Default:**

**Example:**

``` pre
<config-property>
     <config-property-name>DatabaseName</config-property-name>
     <config-property-type>java.lang.String</config-property-type>
     <config-property-value>newDB</config-property-value>
</config-property>
```

Configuration properties vary depending on the database vendor. See [Configuring Database Connections Using JNDI](../../developing/outside_data_sources/configuring_db_connections_using_JNDI.html) for examples of different configuration property configurations.

## <a id="config-property-name" class="no-quick-link"></a>&lt;config-property-name&gt;

The name of this datasource property.

## <a id="config-property-type" class="no-quick-link"></a>&lt;config-property-type&gt;

The data type of this datasource property.

## <a id="config-property-value" class="no-quick-link"></a>&lt;config-property-value&gt;

The value of this datasource property.

## <a id="region" class="no-quick-link"></a>&lt;region&gt;

Defines a region in the cache. See [&lt;region-attributes&gt;](#region-attributes) for more details on configuring regions. You can specify zero or more subregions within a region. See [Create and Access Data Subregions](../../basic_config/data_regions/managing_data_regions.html#data_regions__section_jn1_sry_5m) for restrictions on creating subregions. For example, you cannot create a partitioned subregion.

**Default:**

**API:** `org.apache.geode.cache.RegionFactory` or `org.apache.geode.cache.ClientRegionFactory`

**&lt;region&gt; Attributes**

| Attribute | Description | Default |
|-----------|-------------|---------|
| name      | Specify the name for the region. See [Region Management](../../basic_config/data_regions/managing_data_regions.html) for details. |         |
| refid     | Used to apply predefined attributes to the region being defined. If the nested "region-attributes" element has its own "refid", then it will cause the "refid" on the region to be ignored. The "refid" region attriibute can be set to the name of a RegionShortcut or a ClientRegionShortcut. For more information, see [Region Shortcuts and Custom Named Region Attributes](../../basic_config/data_regions/region_shortcuts.html) and [Storing and Retrieving Region Shortcuts and Custom Named Region Attributes](../../basic_config/data_regions/store_retrieve_region_shortcuts.html). |         |

**Example:**

``` pre
<!--Using region shortcut-->
<region 
  name="PartitionedRegion" 
  refid="PARTITION_REDUNDANT">
...
</region>

<!-- Retrieving and storing attributes -->
<region-attributes 
  id="myPartition" 
  refid="PARTITION_REDUNDANT">
    <partition-attributes 
   local-max-memory="512"/>
</region-attributes>

<!-- Attributes are retrieved and applied in the first region -->
<region name="PartitionedRegion1" refid="myPartition"/>
```

See [&lt;region-attributes&gt;](#region-attributes) for a complete listing of region attributes.


## <a id="index" class="no-quick-link"></a>&lt;index&gt;

Describes an index to be created on a region. The index node, if any, should all come immediately after the "region-attributes" node. The "name" attribute is a required field which identifies the name of the index. See [Working with Indexes](../../developing/query_index/query_index.html) for more information on indexes.

**Default:**

**API:** `org.apache.geode.cache.query.QueryService.createIndex, createKeyIndex, createHashIndex`

**&lt;index&gt; Attributes**

| Attribute   | Description | Default |
|-------------|-------------|---------|
| name        | Required. Name of the index. |         |
| from-clause | Specifies the collection(s) of objects that the index ranges over. The from-clause must only contain one and only one region path. |         |
| expression  | Specifies the lookup value of the index. |         |
| imports     | String containing the imports used to create the index. String should be specified in the query language syntax with each import statement separated by a semicolon. The imports statement provides packages and classes used in variable typing in the indexed and FROM expressions. |         |
| key-index   | True or false. Whether the index should be a key index. If true, the region key specified in the indexed expression is used to evaluate queries |         |
| type        | Possible values are "hash" or "range". | range   |

**Example:**

``` pre
<region name=exampleRegion>
 <region-attributes . . . >
 </region-attributes>
 <index 
  name="myIndex" 
  from-clause="/exampleRegion" 
  expression="status"/>
 <index 
  name="myKeyIndex" 
  from-clause="/exampleRegion" 
  expression="id" key-index="true"/>
 <index 
  name="myHashIndex" 
  from-clause="/exampleRegion p" 
  expression="p.mktValue" type="hash"/>
 ...
</region>
```

<!-- start of Lucene index description -->
## <a id="luceneindex" class="no-quick-link"></a>&lt;lucene:index&gt;

Describes a Lucene index to be created on a region. The `lucene` namespace
and the scoping operator (`:`) must be specified, as the <%=vars.product_name%> `cache`
namespace also defines an `index` element (for OQL indexes).

**API:** `org.apache.geode.cache.lucene` package

**&lt;lucene:index&gt; Attributes**
| Attribute   | Description                                                                                                                                                                                                                                                                           | Default |
|-------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|
| name        | Required. Name of the Lucene index.   |         |

**Example:**

``` pre
<cache
    xmlns="http://geode.apache.org/schema/cache"
    xmlns:lucene="http://geode.apache.org/schema/lucene"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://geode.apache.org/schema/cache
        http://geode.apache.org/schema/cache/cache-1.0.xsd
        http://geode.apache.org/schema/lucene
        http://geode.apache.org/schema/lucene/lucene-1.0.xsd"
    version="1.0">

    <region name="regionA" refid="PARTITION">
        <lucene:index name="myIndex">
            <lucene:field name="x" />
            <lucene:field name="y" />
        </lucene:index>
    </region>
</cache>
```
<!-- end of Lucene index description -->

<!-- start of Lucene field description -->
## <a id="lucenefield" class="no-quick-link"></a>&lt;lucene:field&gt;

Describes a field to be included in a Lucene index. Including the
`lucene` namespace and the scoping operator (`:`) clarifies,
but is not required.

**API:** `org.apache.geode.cache.lucene` package

**&lt;lucene:field&gt Attributes**
| Attribute   | Description | Default |
|-------------|-------------|---------|
| name        | Required. A string that defines the name of the field. If a single field is defined by the value `"__REGION_VALUE_FIELD"`, then the entire value is used as a single field.   |         |
| analyzer    | A string that provides the path to the analyzer to use for this field. A value of `"null"` uses the default analyzer.  | `"null"` |

**Example:**

``` pre
<region name="dataregion" refid="PARTITION_REDUNDANT">
   <lucene:index name="full_value_index">
     <lucene:field name="__REGION_VALUE_FIELD"/>
   </lucene:index>
</region>
```

<!-- end of Lucene field description -->

## <a id="entry" class="no-quick-link"></a>&lt;entry&gt;

An "entry" element describes an entry to be added to a region. Note that if an entry with the given key already exists in the region, it will be replaced.

**Default:**

**API:** `org.apache.geode.cache.Region.create`, `put`, `get`, `putAll`, `getAll`

**Example:**

``` pre
<region ...>
 <region-attributes ...>
   ...
 </region-attributes>
 <entry>
   <key><string>MyKey</string></key>
   <value><string>MyValue</string></value>
 </entry>
</region>
```

## <a id="key" class="no-quick-link"></a>&lt;key&gt;

Required. Describes the key in a region entry. A key can contain either a &lt;string&gt; or a &lt;declarable&gt; sub-element.

## <a id="topic_A078318F712F4247949DAE2287AB200A" class="no-quick-link"></a>&lt;string&gt;

Specifies a String to be placed in a Region entry.

**Example:**

``` pre
<region ...>
 <region-attributes ...>
   ...
 </region-attributes>
 <entry>
   <key><string>MyKey</string></key>
   <value><string>MyValue</string></value>
 </entry>
</region>
```

## <a id="topic_F13E9F4907E6424E8BB117CE45BD8D42" class="no-quick-link"></a>&lt;declarable&gt;

Specifies a Declarable object to be placed in a Region entry.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

**API:** `Declarable`

**Example:**

``` pre
<parameter name="cacheserver">
  <declarable>
    <class-name>org.apache.geode.addon.cache.CacheServerInitializer</class-name>
    <parameter name="system.property.prefix">
    <string>cacheserver</string>
    </parameter>
  </declarable>
</parameter>
```

## <a id="value" class="no-quick-link"></a>&lt;value&gt;

Required. Describes the value of a region entry. A `<value>` can contain either a `<string>` or a `<declarable>` sub-element.

## <a id="topic_356674E93DE14A93849E2142ED363079" class="no-quick-link"></a>&lt;string&gt;

Specifies a String to be placed in a Region entry.

**Example:**

``` pre
<region ...>
 <region-attributes ...>
   ...
 </region-attributes>
 <entry>
   <key><string>MyKey</string></key>
   <value><string>MyValue</string></value>
 </entry>
</region>
```

## <a id="topic_37650AC8AB054B6092458D8D0281D6C5" class="no-quick-link"></a>&lt;declarable&gt;

Specifies a Declarable object to be placed in a Region entry.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

**API:** `Declarable`

**Example:**

``` pre
<parameter name="cacheserver">
  <declarable>
    <class-name>org.apache.geode.addon.cache.CacheServerInitializer</class-name>
    <parameter name="system.property.prefix">
    <string>cacheserver</string>
    </parameter>
  </declarable>
</parameter>
```

## <a id="region_region" class="no-quick-link"></a>&lt;region&gt;

When nested within a `<region>` element, defines a subregion. See [Create and Access Data Subregions](../../basic_config/data_regions/managing_data_regions.html#data_regions__section_jn1_sry_5m) for restrictions on creating subregions. For example, you cannot create a partitioned subregion.

See [&lt;region&gt;](cache_xml.html#region)

## <a id="function-service" class="no-quick-link"></a>&lt;function-service&gt;

Configures the behavior of the function execution service.

**Example:**

``` pre
<cache>
    ...
    </region>
<function-service>
  <function>
    <class-name>com.myCompany.tradeService.cache.func.TradeCalc</class-name>
  </function>
</function-service>
```

## <a id="function" class="no-quick-link"></a>&lt;function&gt;

Defines a function for registration in the function service

Specify the Java class for the function and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**Default:**

**API:** `org.apache.geode.cache.execute.FunctionService`

**Example:**

``` pre
<function>
  <class-name>
    com.myCompany.tradeService.cache.func.TradeCalc
  </class-name>
</function>
```

## <a id="resource-manager" class="no-quick-link"></a>&lt;resource-manager&gt;

A memory monitor that tracks cache size as a percentage of total heap or off-heap memory and controls size by restricting access to the cache and prompting eviction of old entries from the cache. For tenured heap, used in conjunction with settings for JVM memory and Java garbage collection. For off-heap memory, used with the off-heap memory manager.

**API:** `org.apache.geode.cache.control.ResourceManager`

**&lt;resource-manager&gt; Attributes**

<table>
<colgroup>
<col width="20%" />
<col width="60%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>critical-heap-percentage</td>
<td>Percentage of heap at or above which the cache is considered in danger of becoming inoperable due to garbage collection pauses or out of memory exceptions.
<p>Only one change to this attribute or critical heap percentage will be allowed at any given time and its effect will be fully realized before the next change is allowed. This feature requires additional VM flags to perform properly. See <code class="ph codeph">setCriticalHeapPercentage()</code> for details.</p></td>
<td>0</td>
</tr>
<tr class="even">
<td>eviction-heap-percentage</td>
<td><p>Set the percentage of heap at or above which the eviction should begin on regions configured for HeapLRU eviction.</p>
<p>Changing this value may cause eviction to begin immediately.</p>
<ul>
<li>The default is 0, if no region is configured with heap eviction</li>
<li>If <code class="ph codeph">critical-heap-percentage</code> is set to a non-zero value, 5% less than that value.</li>
<li>80%, if <code class="ph codeph">critical-heap-percentage</code> is not configured.</li>
</ul>
</td>
<td>0</td>
</tr>
<tr class="odd">
<td>critical-off-heap-percentage</td>
<td>Percentage of off-heap memory at or above which the cache is considered in danger of becoming inoperable due to garbage collection pauses or out of memory exceptions.</td>
<td>0</td>
</tr>
<tr class="even">
<td>eviction-off-heap-percentage</td>
<td>Set the percentage of off-heap memory at or above which the eviction should begin on Regions configured for HeapLRU eviction.
<ul>
<li>The default is 0, if no region is configured with heap eviction</li>
<li>If <code class="ph codeph">critical-off-heap-percentage</code> is set to a non-zero value, 5% less than that value.</li>
<li>80%, if <code class="ph codeph">critical-off-heap-percentage</code> is not configured.</li>
</ul>
</td>
<td>0</td>
</tr>
</tbody>
</table>

**Example:**

``` pre
<cache>
...
   <resource-manager 
      critical-heap-percentage="99.9" 
      eviction-heap=-percentage="85"/>
...
</cache>
```

## <a id="serialization-registration" class="no-quick-link"></a>&lt;serialization-registration&gt;

Set of serializer or instantiator tags to register customer DataSerializer extensions or DataSerializable implementations respectively.

**Example:**

``` pre
<serialization-registration>
    <instantiator id="30">        
       <class-name>com.package.MyClass</class-name>
    </instantiator>
</serialization-registration> 
```

## <a id="serializer" class="no-quick-link"></a>&lt;serializer&gt;

Allows you to configure the DataSerializer for this <%=vars.product_name%> member. It registers a custom class which extends DataSerializer to support custom serialization of non-modifiable object types inside <%=vars.product_name%>.

Specify the Java class for the `DataSerializer` and its initialization parameters with the `<class-name>` sub-element.

**API:** You can also register a `DataSerializer` by using the `org.apache.geode.DataSerializer.register` API. Use the `org.apache.geode.Instantiator` API to register a `DataSerializable` implementation.

## <a id="instantiator" class="no-quick-link"></a>&lt;instantiator&gt;

An Instantiator registers a custom class which implements the `DataSerializable` interface to support custom object serialization inside <%=vars.product_name%>.

Specify the Java class and its initialization parameters with the `<class-name>` sub-element.

**API:** `DataSerializable`

You can also directly specify `<instantiator>` as a sub-element of `<cache>`. Use the `org.apache.geode.Instantiator` API to register a `DataSerializable` implementation as the serialization framework for the cache. The following table lists the attribute that can be specified for an `<instantiator>`.

**&lt;instantiator&gt; Attributes**

| Attribute | Description                                                                           | Default |
|-----------|---------------------------------------------------------------------------------------|---------|
| id        | Required. ID that the Instantiator should associate with the `DataSerializable` type. |         |


## <a id="backup" class="no-quick-link"></a>&lt;backup&gt;

Defines additional files or directories that should be backed up when the system wide backup command is invoked. Disk stores with persistent data are automatically backed up and do not need to be listed with this element.

**Example:**

``` pre
<backup>./systemConfig/gf.jar</backup>
<backup>/users/jpearson/gfSystemInfo/myCustomerConfig.doc</backup>
```

## <a id="initializer" class="no-quick-link"></a>&lt;initializer&gt;

Used to specify a callback class (and optionally its parameters) that will be run after the cache is initialized. This element can be specified for both server and client caches.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements. See [&lt;class-name&gt; and &lt;parameter&gt;](#class-name_parameter).

**Default:**

**API:** `Declarable`

**Example:**

``` pre
<initializer>
   <class-name>MyInitializer</class-name>
      <parameter name="members">
         <string>2</string>
      </parameter>
</initializer>
```

## <a id="topic_BDE840596CD24A7A8754A56E7D31FE3F" class="no-quick-link"></a>&lt;declarable&gt;

Specifies a Declarable object to be placed in a Region entry.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

**API:** `Declarable`

**Example:**

``` pre
<parameter name="cacheserver">
  <declarable>
    <class-name>org.apache.geode.addon.cache.CacheServerInitializer</class-name>
    <parameter name="system.property.prefix">
    <string>cacheserver</string>
    </parameter>
  </declarable>
</parameter>
```

## <a id="class-name_parameter" class="no-quick-link"></a>&lt;class-name&gt; and &lt;parameter&gt;

Specify the name of a Java class with the `<class-name>` sub-element.

Specify initialization parameters for the class using the `<parameter>` sub-element. Use the `name` attribute to specify the name of the parameter and specify its value in the content of the [&lt;string&gt;](cache_xml.html#string) sub-element or by specifying a Java class with the [&lt;declarable&gt;](cache_xml.html#declarable) sub-element.

**Example:**

The following transaction writer configuration example specifies a Java class named `com.company.data.MyTransactionWritet`. The class is initialized with a parameter named `URL` whose value is `jdbc:cloudscape:rmi:MyData`.

``` pre
<transaction-writer>
       <class-name>com.company.data.MyTransactionWriter</class-name>
       <parameter name="URL">
         <string>jdbc:cloudscape:rmi:MyData</string>
       </parameter>
</transaction-writer>
```

## <a id="declarable" class="no-quick-link"></a>&lt;declarable&gt;

Specifies a Declarable object to be placed in a Region entry.

Specify the Java class and its initialization parameters with the `<class-name>` and `<parameter>` sub-elements.

**API:** `Declarable`

**Example:**

``` pre
<parameter name="cacheserver">
  <declarable>
    <class-name>org.apache.geode.addon.cache.CacheServerInitializer</class-name>
    <parameter name="system.property.prefix">
    <string>cacheserver</string>
    </parameter>
  </declarable>
</parameter>
```

## <a id="string" class="no-quick-link"></a>&lt;string&gt;

Specifies a String to be placed in a Region entry.

**Example:**

``` pre
<region ...>
 <region-attributes ...>
   ...
 </region-attributes>
 <entry>
   <key><string>MyKey</string></key>
   <value><string>MyValue</string></value>
 </entry>
</region>
```


