<?xml version="1.0"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
-->

<document>
	<properties>
		<title>Remote Cache Configuration</title>
		<author email="ASmuts@apache.org">Aaron Smuts</author>
	</properties>

	<body>
		<section name="Remote Auxiliary Cache Configuration">

			<p>
				The following properties apply to the Remote Cache
				plugin.
			</p>

			<subsection name="Remote Client Configuration Properties">
				<table>
					<tr>
						<th>Property</th>
						<th>Description</th>
						<th>Required</th>
						<th>Default Value</th>
					</tr>
					<tr>
						<td>FailoverServers</td>
						<td>
							This is a comma separated list of remote
							servers to use. They should be specified in
							the host:port format. The first server in
							the list will be used as the primary server.
							If the connection is lost with the primary,
							the cache will try to connect to the next
							server in the list. If a connection is
							successfully established with a failover
							server, then the cache will attempt to
							restore the conenction with the primary
							server.
						</td>
						<td>Y</td>
						<td>n/a</td>
					</tr>
					<tr>
						<td>LocalPort</td>
						<td>
							This is the port on which the client will
							receive callbacks from the remote server. If
							it is not specified, then some port in the
							default range used by RMI will be the
							callback port.
						</td>
						<td>N</td>
						<td>default RMI port range</td>
					</tr>
					<tr>
						<td>RemoveUponRemotePut</td>
						<td>
							If you configure the cache to remove upon a
							remote put, this means that the client will
							translate updates into removes. The client
							will remove any local copy it has of the
							object rather than storing the new version.
							If you have sticky load balancing across
							your client servers, then it would make
							sense to set RemoveUponRemotePut to true if
							the data is mostly client specific. If the
							data is re-usable, the you should most
							likely set this option to false, which is
							the default.
						</td>
						<td>N</td>
						<td>true</td>
					</tr>
					<tr>
						<td>RmiSocketFactoryTimeoutMillis</td>
						<td>
							If this is greater than 0, then a custom
							socket factory will be installed in the VM.
							It will then use this timeout for all RMI
							communication.
						</td>
						<td>N</td>
						<td>5000</td>
					</tr>
					<tr>
						<td>GetOnly</td>
						<td>
							GetOnly is somewhat misnamed. If it is set
							to true, then the client will not send
							updates or removes to the remote server. It
							can still receive updates and removes.
						</td>
						<td>N</td>
						<td>false</td>
					</tr>
					<tr>
						<td>Receive</td>
						<td>
							By default Receive is set to true. This
							means that the remote client will receive
							updates and removes from the remote server.
							If you set Receive to false, the remote
							client will not register a listener with the
							remote server. This means that the client
							can send update and remove requests to the
							server, and it can get from the server, but
							it will never receive notifications from the
							server. You might configure Receive to false
							if you just want to use the remote server as
							a data store. For instance, you may back the
							Remote Cache Server with the JDBC disk cache
							and set Receive=false when you have a high
							put and low read region.
						</td>
						<td>N</td>
						<td>true</td>
					</tr>
					<tr>
						<td>ZombieQueueMaxSize</td>
						<td>
							The number of elements the zombie queue will
							hold. This queue is used to store events if
							we lose our connection with the server.
						</td>
						<td>N</td>
						<td>1000</td>
					</tr>
				</table>
			</subsection>

			<subsection name="Example Configuration">
				<source>
					<![CDATA[
# This remote client does not receive
jcs.auxiliary.RC=org.apache.commons.jcs.auxiliary.remote.RemoteCacheFactory
jcs.auxiliary.RC.attributes=org.apache.commons.jcs.auxiliary.remote.RemoteCacheAttributes
jcs.auxiliary.RC.attributes.FailoverServers=localhost:1101,localhost:1102
jcs.auxiliary.RC.attributes.LocalPort=1201
jcs.auxiliary.RC.attributes.RemoveUponRemotePut=false
jcs.auxiliary.RC.attributes.RmiSocketFactoryTimeoutMillis=5000
jcs.auxiliary.RC.attributes.GetOnly=false
jcs.auxiliary.RC.attributes.Receive=false
        ]]>
				</source>
			</subsection>

		</section>
	</body>
</document>
