You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by bu...@apache.org on 2010/12/24 22:58:33 UTC

svn commit: r781579 [5/6] - /websites/staging/river/trunk/content/river/doc/api/com/sun/jini/outrigger/

Added: websites/staging/river/trunk/content/river/doc/api/com/sun/jini/outrigger/package-summary.html
==============================================================================
--- websites/staging/river/trunk/content/river/doc/api/com/sun/jini/outrigger/package-summary.html (added)
+++ websites/staging/river/trunk/content/river/doc/api/com/sun/jini/outrigger/package-summary.html Fri Dec 24 21:58:32 2010
@@ -0,0 +1,2214 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.5.0_15) on Mon Mar 08 17:46:27 EST 2010 -->
+<TITLE>
+com.sun.jini.outrigger (Apache River v2.1.2-SNAPSHOT API Documentation)
+</TITLE>
+
+<META NAME="keywords" CONTENT="com.sun.jini.outrigger package">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="com.sun.jini.outrigger (Apache River v2.1.2-SNAPSHOT API Documentation)";
+}
+</SCRIPT>
+<NOSCRIPT>
+</NOSCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sun/jini/norm/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sun/jini/outrigger/snaplogstore/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../index.html?com/sun/jini/outrigger/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
+&nbsp;<SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<H2>
+Package com.sun.jini.outrigger
+</H2>
+This is an implementation of a JavaSpaces technology-enabled service.
+<P>
+<B>See:</B>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Interface Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/sun/jini/outrigger/AdminIterator.html" title="interface in com.sun.jini.outrigger">AdminIterator</A></B></TD>
+<TD><B>Deprecated.</B>&nbsp;<I>Use <A HREF="../../../../net/jini/space/MatchSet.html" title="interface in net.jini.space"><CODE>MatchSet</CODE></A> instead.</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/sun/jini/outrigger/ConstrainableJavaSpaceAdmin.html" title="interface in com.sun.jini.outrigger">ConstrainableJavaSpaceAdmin</A></B></TD>
+<TD><B>Deprecated.</B>&nbsp;<I>The <A HREF="../../../../net/jini/space/JavaSpace05.html#contents(java.util.Collection, net.jini.core.transaction.Transaction, long, long)"><CODE>JavaSpace05.contents</CODE></A>
+             method can be used to view the space's contents.</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/sun/jini/outrigger/JavaSpaceAdmin.html" title="interface in com.sun.jini.outrigger">JavaSpaceAdmin</A></B></TD>
+<TD><B>Deprecated.</B>&nbsp;<I>Invoke the <A HREF="../../../../net/jini/admin/JoinAdmin.html" title="interface in net.jini.admin"><CODE>JoinAdmin</CODE></A> and <A HREF="../../../../com/sun/jini/admin/DestroyAdmin.html" title="interface in com.sun.jini.admin"><CODE>DestroyAdmin</CODE></A> methods though those interfaces.</I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/sun/jini/outrigger/LogOps.html" title="interface in com.sun.jini.outrigger">LogOps</A></B></TD>
+<TD>Methods that log an operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/sun/jini/outrigger/Recover.html" title="interface in com.sun.jini.outrigger">Recover</A></B></TD>
+<TD>Methods that recover the state of the space after a restart.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/sun/jini/outrigger/StorableObject.html" title="interface in com.sun.jini.outrigger">StorableObject</A></B></TD>
+<TD>Interface that must be implemented by objects that must persist their
+ state.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/sun/jini/outrigger/StorableResource.html" title="interface in com.sun.jini.outrigger">StorableResource</A></B></TD>
+<TD>Sub-interface of <code>StorableObject</code> that must be implemented by
+ objects that represent leased resources and must persist their state.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/sun/jini/outrigger/Store.html" title="interface in com.sun.jini.outrigger">Store</A></B></TD>
+<TD>This interface defines the methods that any OutriggerServerImpl store must
+ implement.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/sun/jini/outrigger/StoredObject.html" title="interface in com.sun.jini.outrigger">StoredObject</A></B></TD>
+<TD>Interface for a stored resource.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/sun/jini/outrigger/StoredResource.html" title="interface in com.sun.jini.outrigger">StoredResource</A></B></TD>
+<TD>Interface for a stored resource.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/sun/jini/outrigger/OutriggerPermission.html" title="class in com.sun.jini.outrigger">OutriggerPermission</A></B></TD>
+<TD>Permission that can be used to express the access control policy for an
+ instance of an Outrigger server exported with a <A HREF="../../../../net/jini/jeri/BasicJeriExporter.html" title="class in net.jini.jeri"><CODE>BasicJeriExporter</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../com/sun/jini/outrigger/OutriggerServerImpl.html" title="class in com.sun.jini.outrigger">OutriggerServerImpl</A></B></TD>
+<TD>A basic implementation of a JavaSpaces<sup><font size=-2>TM</font></sup> 
+ service.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+<A NAME="package_description"><!-- --></A><H2>
+Package com.sun.jini.outrigger Description
+</H2>
+
+<P>
+This is an implementation of a JavaSpaces technology-enabled service.
+In addition to implementing the basic <A HREF="../../../../net/jini/space/JavaSpace.html" title="interface in net.jini.space"><CODE>JavaSpace</CODE></A>
+interface, it all implements the <A HREF="../../../../net/jini/space/JavaSpace05.html" title="interface in net.jini.space"><CODE>JavaSpace05</CODE></A>
+extension. <p>
+
+There are two ways to run Outrigger &#151; as a transient space that loses
+its state between executions, or as a persistent space that maintains state
+between executions. The first is implemented by
+<CODE>com.sun.jini.outrigger.TransientOutriggerImpl</CODE>; the second by
+<CODE>com.sun.jini.outrigger.PersistentOutriggerImpl</CODE>. &nbsp;<CODE>TransientOutriggerImpl</CODE>
+can only be run as a non-activatable server, while
+<CODE>PersistentOutriggerImpl</CODE> can be run as an activatable or
+non-activatable server.<p>
+
+<code>PersistentOutriggerImpl</code> relies on a pluggable persistence
+layer, <A HREF="../../../../com/sun/jini/outrigger/Store.html" title="interface in com.sun.jini.outrigger"><CODE>Store</CODE></A>. Which implementation of the
+<code>Store</code> interface to use is controlled by the <a
+href="#store"><code>store</code></a> configuration entry. Unlike some
+previous releases there is no default <code>Store</code> implementation.
+<p>
+
+This release includes one implementation of the <code>Store</code>
+interface. <A HREF="../../../../com/sun/jini/outrigger/snaplogstore/LogStore.html" title="class in com.sun.jini.outrigger.snaplogstore"><CODE>com.sun.jini.outrigger.snaplogstore.LogStore</CODE></A>, also called
+<em>Snaplogstore</em>.  Snaplogstore was introduced in the 2.1beta2
+release. The original implementation of the <code>Store</code> interface,
+<code>com.sun.jini.outrigger.logstore.LogStore</code>, or <em>Logstore</em>
+for short, is no longer available. Snaplogstore and Logstore have different
+scalability characteristics, so if you were using Logstore in the past you
+many want to evaluate how your application works with Snaplogstore.
+
+Because there is no default <code>Store</code> implementation if you are
+using <code>PersistentOutriggerImpl</code> you will need to provide a value
+for the <a href="#store"><code>store</code></a> configuration entry (as
+well as the <a
+href="#persistenceDirectory"><code>persistenceDirectory</code></a>
+configuration entry).
+<p>
+
+The storage formats used by Snaplogstore and Logstore are mutually
+incompatible.<p>
+
+The JAR file <code>outrigger.jar</code>, included in the <code>lib</code>
+subdirectory of the Apache River release
+installation, contains the classes for <code>TransientOutriggerImpl</code>.
+&nbsp <code>outrigger.jar</code> also includes, via a JAR file manifest
+classpath directive, a reference to
+<code>jsk-lib.jar</code>. <code>jsk-lib.jar</code> must be in the same
+directory as <code>outrigger.jar</code> for Outrigger to operate
+properly.<p>
+
+<code>outrigger.jar</code> also includes, via a JAR file manifest classpath
+directive, a reference to <code>outrigger-snaplogstore.jar</code>.
+<code>outrigger-snaplogstore.jar</code> adds the classes necessary to run
+<code>PersistentOutriggerImpl</code> with the Snaplogstore implementation of
+<code>Store</code>, and must be in the same directory as
+<code>outrigger.jar</code> for <code>PersistentOutriggerImpl</code> to
+operate properly with snaplogstore.<p>
+
+The JAR files <code>outrigger-dl.jar</code> and <code>jsk-dl.jar</code> in
+the <code>lib-dl</code> directory contain the classes needed to
+instantiate Outrigger's proxy objects in a client.  Outrigger's codebase
+should include both of these files.<p>
+
+None of the JAR files discussed in the previous paragraphs include classes
+from <code>jsk-platform.jar</code>. On the server side service starter, the
+service launcher utility, ensures that
+<code>jsk-platform.jar</code> is available to Outrigger. On the client it
+is the responsibility of the client to make <code>jsk-platform.jar</code>
+available. Typically this is done by including
+<code>jsk-platform.jar</code> in the client's classpath.<p>
+
+Outrigger's top level proxy implements <A HREF="../../../../net/jini/admin/Administrable.html" title="interface in net.jini.admin"><CODE>Administrable</CODE></A>
+in addition to <code>JavaSpace</code> and
+<code>JavaSpace05</code>. Outrigger's <em>admin proxy</em> can be obtained
+by calling <A HREF="../../../../net/jini/admin/Administrable.html#getAdmin()"><CODE>Administrable.getAdmin</CODE></A>. The admin proxy implements <A HREF="../../../../net/jini/admin/JoinAdmin.html" title="interface in net.jini.admin"><CODE>JoinAdmin</CODE></A> and <A HREF="../../../../com/sun/jini/admin/DestroyAdmin.html" title="interface in com.sun.jini.admin"><CODE>DestroyAdmin</CODE></A>. The
+admin proxy will also implement <A HREF="../../../../com/sun/jini/outrigger/ConstrainableJavaSpaceAdmin.html" title="interface in com.sun.jini.outrigger"><CODE>ConstrainableJavaSpaceAdmin</CODE></A> if the server has been
+set up with a Java(TM) remote method invocation (Java RMI) implementation
+that supports constraints, or <A HREF="../../../../com/sun/jini/outrigger/JavaSpaceAdmin.html" title="interface in com.sun.jini.outrigger"><CODE>JavaSpaceAdmin</CODE></A>
+if constraints are not supported. However,
+<code>ConstrainableJavaSpaceAdmin</code> and <code>JavaSpaceAdmin</code>
+have been depreciated and should not be used.
+<p>
+
+This document provides the following information about Outrigger: <ul>
+
+<li> <a href="#configuration">Configuring Outrigger</a>
+<li> <a href="#Blocking Queries">Blocking Queries</a>
+<li> <a href="#access_control">Access Control Permission Targets</a>
+<li> <a href="#logging">Logging</a>
+<li> <a href="#examples">Examples for Running Outrigger</a>
+
+</ul> <p>
+
+
+<a name="configuration">
+<H2>Configuration Entries Consulted By Outrigger</H2>
+</a>
+
+The Outrigger service implementation consults a number of configuration
+entries. Most deployments will find it useful to provide values for one or
+more of the following configuration entries:
+
+<ul>
+<li><a href="#persistenceDirectory"><code>persistenceDirectory</code></a>
+    (required if using <CODE>PersistentOutriggerImpl</CODE>)
+<li><a href="#store"><code>store</code></a>
+    (required if using <CODE>PersistentOutriggerImpl</CODE>)
+<li><a href="#initialLookupGroups"><code>initialLookupGroups</code></a>
+<li><a href="#initialLookupLocators"><code>initialLookupLocators</code></a>
+<li><a href="#initialLookupAttributes"><code>initialLookupAttributes</code></a>
+</ul>
+
+Each of these, except for <code>persistenceDirectory</code> and
+<code>store</code>, has reasonable defaults.<p>
+
+Deployments that want to use a Java RMI implementation other than Jini
+extensible remote invocation (Jini ERI) over TCP/IP on a random port will
+need to provide a value for the <a href="#serverExporter">
+<code>serverExporter</code></a> configuration entry. Deployments that use
+multicast discovery and have special requirements may need to provide
+values for the various <A HREF="../../../../net/jini/discovery/LookupDiscovery.html" title="class in net.jini.discovery"><CODE>LookupDiscovery</CODE></A>
+configuration entries.<p>
+
+Secure deployments will need to provide values for most if not
+all of these configuration entries:
+
+<ul>
+<li><a href="#serverExporter"><code>serverExporter</code></a>
+<li><a href="#loginContext"><code>loginContext</code></a>
+<li><a href="#listenerPreparer"><code>listenerPreparer</code></a>
+<li><a href="#recoveredListenerPreparer">
+       <code>recoveredListenerPreparer</code></a>
+    (if using <CODE>PersistentOutriggerImpl</CODE>)       
+<li><a href="#transactionManagerPreparer">
+       <code>transactionManagerPreparer</code></a>
+<li><a href="#recoveredTransactionManagerPreparer">
+       <code>recoveredTransactionManagerPreparer</code></a>
+    (if using <CODE>PersistentOutriggerImpl</CODE>)
+<li><a href="#activationIdPreparer"><code>activationIdPreparer</code></a>
+    (if using activation)
+<li><a href="#activationSystemPreparer">
+    <code>activationSystemPreparer</code></a>
+    (if using activation)
+<li><a href="#lookupLocatorPreparer"><code>lookupLocatorPreparer</code></a>
+<li><a href="#recoveredLookupLocatorPreparer">
+       <code>recoveredLookupLocatorPreparer</code></a>
+    (if using <CODE>PersistentOutriggerImpl</CODE>)
+</ul>
+
+plus the following configuration entries from 
+<A HREF="../../../../net/jini/discovery/LookupDiscovery.html" title="class in net.jini.discovery"><CODE>LookupDiscovery</CODE></A> :
+
+<ul>
+<li><code>registrarPreparer</code>
+<li><code>discoveryConstraints</code>
+</ul>
+
+<A HREF="../../../../net/jini/discovery/LookupLocatorDiscovery.html" title="class in net.jini.discovery"><CODE>LookupLocatorDiscovery</CODE></A> :
+
+<ul>
+<li><code>registrarPreparer</code>
+</ul>
+
+and <A HREF="../../../../net/jini/lookup/JoinManager.html" title="class in net.jini.lookup"><CODE>JoinManager</CODE></A> :
+<ul>
+<li><code>registrarPreparer</code>
+<li><code>registrationPreparer</code>
+<li><code>serviceLeasePreparer</code>
+</ul>
+
+
+in addition to providing appropriate security policy files, key stores,
+login configuration files, etc.<p>
+
+The Outrigger service implementation obtains its configuration by calling
+<A HREF="../../../../net/jini/config/ConfigurationProvider.html#getInstance(java.lang.String[], java.lang.ClassLoader)"><CODE>ConfigurationProvider.getInstance</CODE></A> with the specified
+<i>configOptions</i> and the class loader for the implementation
+class. <p>
+
+The implementation supports the following configuration entries, with
+component <code>com.sun.jini.outrigger</code>: <p>
+
+<a name="activationIdPreparer"></a>
+<table summary="Describes the activationIdPreparer configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>activationIdPreparer</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../net/jini/security/ProxyPreparer.html" title="interface in net.jini.security"><CODE>ProxyPreparer</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> An instance of
+      <A HREF="../../../../net/jini/security/BasicProxyPreparer.html" title="class in net.jini.security"><CODE>BasicProxyPreparer</CODE></A> that
+      does nothing
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> Proxy preparer to use for the <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/activation/ActivationID.html" title="class or interface in java.rmi.activation"><CODE>ActivationID</CODE></A> passed to the activation
+      constructor. Only obtained if being run as an activatable
+      service. The preparer should expect Outrigger to call the <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/activation/ActivationID.html#activate(boolean)" title="class or interface in java.rmi.activation"><CODE>activate </CODE></A> method of the
+      proxy being prepared. Obtained at activatable service start and
+      restart.
+  </table>
+
+<a name="activationSystemPreparer"></a>
+<table summary="Describes the activationSystemPreparer configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>activationSystemPreparer</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../net/jini/security/ProxyPreparer.html" title="interface in net.jini.security"><CODE>ProxyPreparer</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> An instance of
+      <A HREF="../../../../net/jini/security/BasicProxyPreparer.html" title="class in net.jini.security"><CODE>BasicProxyPreparer</CODE></A> that
+      does nothing
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> Proxy preparer to use for the <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/activation/ActivationSystem.html" title="class or interface in java.rmi.activation"><CODE>ActivationSystem</CODE></A> proxy.  Only obtained if being
+      run as an activatable service. The preparer should expect Outrigger
+      to call the <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/activation/ActivationSystem.html#unregisterGroup(java.rmi.activation.ActivationGroupID)" title="class or interface in java.rmi.activation"><CODE>unregisterGroup</CODE></A>
+      method of the proxy being prepared. Obtained at activatable
+      service start and restart.
+
+  </table>
+
+<a name="contentsLeasePeriodPolicy"></a>
+<table summary="Describes the contentsLeasePeriodPolicy configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>contentsLeasePeriodPolicy</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../com/sun/jini/landlord/LeasePeriodPolicy.html" title="interface in com.sun.jini.landlord"><CODE>LeasePeriodPolicy</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> A <code>new </code><A HREF="../../../../com/sun/jini/landlord/FixedLeasePeriodPolicy.html" title="class in com.sun.jini.landlord"><CODE>FixedLeasePeriodPolicy</CODE></A> that allows leases up
+      to one hour, and grants one hour leases for duration requests of
+      <A HREF="../../../../net/jini/core/lease/Lease.html#ANY"><CODE>Lease.ANY</CODE></A>
+
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> Policy used to determine the length of initial
+      grants and renewals of the leases on <A HREF="../../../../net/jini/space/MatchSet.html" title="interface in net.jini.space"><CODE>MatchSet</CODE></A>
+      instances.  Obtained at service start and restart.
+  </table>
+
+<a name="discoveryManager"></a>
+<table summary="Describes the discoveryManager configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>discoveryManager</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery"><CODE>DiscoveryManagement</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td>
+<pre>
+new <A HREF="../../../../net/jini/discovery/LookupDiscoveryManager.html" title="class in net.jini.discovery"><CODE>LookupDiscoveryManager</CODE></A>(
+    <A HREF="../../../../net/jini/discovery/DiscoveryGroupManagement.html#NO_GROUPS"><CODE>DiscoveryGroupManagement.NO_GROUPS</CODE></A>,
+    null,  // locators
+    null,  // listener
+    this)  // config
+</pre>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> The object Outrigger should use to find lookups to
+      register with. In addition to <code>DiscoveryManagement</code> it
+      must also implement <A HREF="../../../../net/jini/discovery/DiscoveryGroupManagement.html" title="interface in net.jini.discovery"><CODE>DiscoveryGroupManagement</CODE></A> and <A HREF="../../../../net/jini/discovery/DiscoveryLocatorManagement.html" title="interface in net.jini.discovery"><CODE>DiscoveryLocatorManagement</CODE></A>. The <A HREF="../../../../net/jini/discovery/DiscoveryManagement.html#terminate()"><CODE>terminate</CODE></A> method of
+      this object will be called when the service is destroyed.  This
+      object must be configured with an empty set of multicast groups and
+      locators (Outrigger will set the groups and locators based on the
+      values of the <a
+      href="#initialLookupGroups"><code>initialLookupGroups</code></a> and
+      <a
+      href="#initialLookupLocators"><code>initialLookupLocators</code></a>
+      configurations entries, or based on persisted state set via its
+      implementation of the <A HREF="../../../../net/jini/admin/JoinAdmin.html" title="interface in net.jini.admin"><CODE>JoinAdmin</CODE></A>
+      interface). Note, if you use the default you should also consult the
+      <A HREF="../../../../net/jini/discovery/LookupDiscoveryManager.html" title="class in net.jini.discovery"><code>LookupDiscoveryManager</code> documentation</A> to see what
+      configuration entries it reads. Obtained at service start and
+      restart.
+  </table>
+
+<a name="entryLeasePeriodPolicy"></a>
+<table summary="Describes the entryLeasePeriodPolicy configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>entryLeasePeriodPolicy</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../com/sun/jini/landlord/LeasePeriodPolicy.html" title="interface in com.sun.jini.landlord"><CODE>LeasePeriodPolicy</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> A <code>new </code><A HREF="../../../../com/sun/jini/landlord/FixedLeasePeriodPolicy.html" title="class in com.sun.jini.landlord"><CODE>FixedLeasePeriodPolicy</CODE></A> that allows
+      leases up to <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Long.html#MAX_VALUE" title="class or interface in java.lang"><CODE>Long.MAX_VALUE</CODE></A>, and
+      grants one day leases for duration requests of <A HREF="../../../../net/jini/core/lease/Lease.html#ANY"><CODE>Lease.ANY</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> Policy used to determine the length of initial
+      grants and renewals of the leases on entries. Obtained at service
+      start and restart.
+  </table>
+
+<a name="eventLeasePolicy"></a>
+<table summary="Describes the eventLeasePolicy configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>eventLeasePolicy</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../com/sun/jini/landlord/LeasePeriodPolicy.html" title="interface in com.sun.jini.landlord"><CODE>LeasePeriodPolicy</CODE></A> 
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> A <code>new </code>
+      <A HREF="../../../../com/sun/jini/landlord/FixedLeasePeriodPolicy.html" title="class in com.sun.jini.landlord"><CODE>FixedLeasePeriodPolicy</CODE></A> that
+      allows leases up to one hour, and grants one hour leases
+      for duration requests of <A HREF="../../../../net/jini/core/lease/Lease.html#ANY"><CODE>Lease.ANY</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> Policy used to determine the length of initial
+      grants and renewals of the leases on event registrations. Obtained at
+      service start and restart.
+  </table>
+
+<a name="initialLookupAttributes"></a>
+<table summary="Describes the initialLookupAttributes configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>initialLookupAttributes</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry"><CODE>Entry[]</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>new Entry[0]</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> This configuration entry will be read the <em>first
+      time</em> a given Outrigger instance is started and combined with a
+      default set of attributes. The combined set will be used as the
+      initial set of attributes that Outrigger will use to register with
+      lookup services. Any changes to the set of attributes should be done
+      via Outrigger's admin proxy using the <A HREF="../../../../net/jini/admin/JoinAdmin.html" title="interface in net.jini.admin"><CODE>JoinAdmin</CODE></A> interface.
+  </table>
+
+<a name="initialLookupGroups"></a>
+<table summary="Describes the initialLookupGroups configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>initialLookupGroups</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html" title="class or interface in java.lang"><CODE>String[]</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>new String[]{""}</code> (aka the "public" group)
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> This entry will be read the <em>first time</em> a
+      given Outrigger instance is started to determine the initial set of
+      multicast discovery groups Outrigger should participate in. Any
+      future changes to the set of discovery groups should be made via
+      Outrigger's admin proxy using the <A HREF="../../../../net/jini/admin/JoinAdmin.html" title="interface in net.jini.admin"><CODE>JoinAdmin</CODE></A>
+      interface.
+  </table>
+
+<a name="initialLookupLocators"></a>
+<table summary="Describes the initialLookupLocators configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>initialLookupLocators</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../net/jini/core/discovery/LookupLocator.html" title="class in net.jini.core.discovery"><CODE>LookupLocator[]</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>new LookupLocator[0]</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> This entry will be read the <em>first time</em> a
+      given Outrigger instance is started to determine the inital set of
+      specific lookup services Outrigger should register with. Any future
+      changes to this set should be made via Outrigger's admin proxy using
+      the <A HREF="../../../../net/jini/admin/JoinAdmin.html" title="interface in net.jini.admin"><CODE>JoinAdmin</CODE></A> interface.
+  </table>
+
+<a name="iteratorBatchSize"></a>
+<table summary="Describes the iteratorBatchSize configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>iteratorBatchSize</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <code>int</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>100</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> Fetch ahead limit for <A HREF="../../../../net/jini/space/JavaSpace05.html#contents(java.util.Collection, net.jini.core.transaction.Transaction, long, long)"><CODE>JavaSpace05.contents</CODE></A> and <A HREF="../../../../net/jini/space/MatchSet.html#next()"><CODE>MatchSet.next</CODE></A> calls. A given
+      <code>contents</code> or <code>next</code> invocation will never
+      fetch more than this many entries. Must be a positive
+      <code>int</code> value. Obtained at service start and restart.
+  </table>
+
+<a name="listenerPreparer"></a>
+<table summary="Describes the listenerPreparer configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>listenerPreparer</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../net/jini/security/ProxyPreparer.html" title="interface in net.jini.security"><CODE>ProxyPreparer</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> An instance of
+      <A HREF="../../../../net/jini/security/BasicProxyPreparer.html" title="class in net.jini.security"><CODE>BasicProxyPreparer</CODE></A> that
+      does nothing
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> Proxy preparer for <A HREF="../../../../net/jini/core/event/RemoteEventListener.html" title="interface in net.jini.core.event"><CODE>RemoteEventListener</CODE></A> proxies passed to <A HREF="../../../../net/jini/space/JavaSpace.html#notify(net.jini.core.entry.Entry, net.jini.core.transaction.Transaction, net.jini.core.event.RemoteEventListener, long, java.rmi.MarshalledObject)"><CODE>JavaSpace.notify</CODE></A>. The preparer
+      should expect Outrigger to call the <A HREF="../../../../net/jini/core/event/RemoteEventListener.html#notify(net.jini.core.event.RemoteEvent)"><CODE>notify</CODE></A> method on the
+      returned proxy.  The preparer may be asked to prepare proxies for the
+      same remote listener multiple times, though at most once per
+      registration the listener is associated with. <p>
+
+      Only listener proxies that have been returned by this preparer will
+      be persisted. If a listener proxy is recovered it will be re-prepared
+      by the <a href="#recoveredListenerPreparer"><code>
+      recoveredListenerPreparer</code></a>. <p>
+
+      Obtained at service start and restart.      
+      
+  </table>
+
+<a name="loginContext"></a>
+<table summary="Describes the loginContext configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>loginContext</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/javax/security/auth/login/LoginContext.html" title="class or interface in javax.security.auth.login"><CODE>LoginContext</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>null</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> If non-<code>null</code>, JAAS login context for
+      performing a JAAS login, after which the service is run as the
+      resulting subject.  If <code>null</code>, no JAAS login is
+      performed. Obtained at service start and restart.
+
+  </table>
+
+<a name="lookupLocatorPreparer"></a>
+<table summary="Describes the lookupLocatorPreparer configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>lookupLocatorPreparer</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../net/jini/security/ProxyPreparer.html" title="interface in net.jini.security"><CODE>ProxyPreparer</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> An instance of
+      <A HREF="../../../../net/jini/security/BasicProxyPreparer.html" title="class in net.jini.security"><CODE>BasicProxyPreparer</CODE></A> that
+      does nothing
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> Proxy preparer to use for instances of <A HREF="../../../../net/jini/core/discovery/LookupLocator.html" title="class in net.jini.core.discovery"><CODE>LookupLocator</CODE></A> that are passed to various
+      <A HREF="../../../../net/jini/admin/JoinAdmin.html" title="interface in net.jini.admin"><CODE>JoinAdmin</CODE></A> methods. The preparer should expect
+      Outrigger to call the <A HREF="../../../../net/jini/core/discovery/LookupLocator.html#getRegistrar()"><CODE>LookupLocator.getRegistrar()</CODE></A>,
+      <code>equals</code>, and <code>hashCode</code> methods of the proxy
+      being prepared. The object returned by this preparer must be equal
+      (in the sense of the <code>equals</code> method) to the object passed
+      in. If a <code>LookupLocator</code> instance passed in via the
+      methods of <code>JoinAdmin</code> is persisted, the version returned
+      by this preparer will be the one that is persisted.<p>
+
+      The <code>LookupLocator</code> instances obtained from 
+      <a href="#initialLookupLocators"><code>initialLookupLocators</code>
+      </a> will not be prepared by this preparer.<p>
+
+      Obtained at service start and restart.
+  </table>
+
+<a name="maxOps"></a>
+<table summary="Describes the maxOps configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>maxOps</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <code>int</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>1000</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> Maximum number of persistent store directives that
+      can be written to a log. Only consulted if <A HREF="../../../../com/sun/jini/outrigger/snaplogstore/LogStore.html" title="class in com.sun.jini.outrigger.snaplogstore"><CODE>com.sun.jini.outrigger.snaplogstore.LogStore</CODE></A> is being used for the <a
+      href="#store">store</a> configuration entry.  Outrigger writes
+      directives for the persistent store into logs that are consumed by a
+      consumer thread.  This configuration entry represents the maximum
+      number of directives that can be written before a new log is
+      created. Must be a positive <code>int</code> value. 
+      Obtained at service start and restart.
+  </table>
+
+<a name="maxServerQueryTimeout"></a>
+<table summary="Describes the maxServerQueryTimeout configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>maxServerQueryTimeout</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <code>long</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Long.html#MAX_VALUE" title="class or interface in java.lang"><CODE>Long.MAX_VALUE</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> Controls the default value of the <em>maximum
+      server query timeout</em> for proxies created by this server. Must be
+      a positive long value. See <a href="#Blocking Queries"><i>Blocking
+      Queries</i></a> for details on the maximum server query
+      timeout. Note, proxies created by previous incarnations of this
+      server are unaffected by this entry.  Obtained at service start and
+      restart.
+  </table>
+
+<a name="maxUnexportDelay"></a>
+<table summary="Describes the maxUnexportDelay configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>maxUnexportDelay</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <code>long</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>120000</code> (2 minutes)
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> How long to retry &#147nice&#148 unexport attempts before
+      forcing the unexport. Part of destroying an Outrigger server includes
+      calling <A HREF="../../../../net/jini/export/Exporter.html#unexport(boolean)"><CODE>Exporter.unexport(boolean force)</CODE></A> on the <code>Exporter</code> used
+      to export the server (see
+      <a href="#serverExporter"><code>serverExporter</code></a>). The initial
+      <code>unexport</code> call passes <code>false</code> for the value of
+      the <code>force</code> parameter. This is done in order to allow the
+      destroy call to return cleanly to the client. If the initial
+      <code>unexport</code> call fails, Outrigger will retry calling
+      <code>unexport(false)</code> for up to <code>maxUnexportDelay</code>
+      milliseconds before giving up and calling
+      <code>unexport(true)</code>.  <code>maxUnexportDelay</code> must be a
+      non-negative long value. If <code>maxUnexportDelay</code> is zero
+      then the very first call to <code>unexport</code> passes
+      <code>true</code> for the value of the <code>force</code> parameter,
+      no nice unexport attempt is made. Obtained at service start and
+      restart. Note, the delay between attempted <code>unexport</code>
+      calls is controlled by the <a
+      href="#unexportRetryDelay"><code>unexportRetryDelay</code></a>
+      configuration entry.
+
+  </table>
+
+
+<a name="notificationsTaskManager"></a>
+<table summary="Describes the notificationsTaskManager configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>notificationsTaskManager</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../com/sun/jini/thread/TaskManager.html" title="class in com.sun.jini.thread"><CODE>TaskManager</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>new </code><A HREF="../../../../com/sun/jini/thread/TaskManager.html#TaskManager()"><CODE>TaskManager()</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> The pool of threads used to make event delivery
+      attempts. 
+      The <A HREF="../../../../com/sun/jini/thread/TaskManager.html#terminate()"><CODE>terminate</CODE></A>
+      method of this object will be called when the service is
+      destroyed. Obtained at service start and restart.
+  </table>
+
+
+<a name="persistenceDirectory"></a>
+<table summary="Describes the persistenceDirectory configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>persistenceDirectory</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html" title="class or interface in java.lang"><CODE>String</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> none
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> If the <A HREF="../../../../com/sun/jini/outrigger/snaplogstore/LogStore.html" title="class in com.sun.jini.outrigger.snaplogstore"><CODE>com.sun.jini.outrigger.snaplogstore.LogStore</CODE></A> implementations of <A HREF="../../../../com/sun/jini/outrigger/Store.html" title="interface in com.sun.jini.outrigger"><CODE>Store</CODE></A> is being used, the value of this entry
+      is the name of the directory that should be used to persist
+      Outrigger's state.  Obtained at persistent service start and restart.
+  </table>
+
+<a name="reapingInterval"></a>
+<table summary="Describes the reapingInterval configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>reapingInterval</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <code>long</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>60000</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> How often, in milliseconds, should Outrigger go
+      through its internal tables and remove unused entries, templates,
+      contents queries, etc. Must be a positive <code>long</code>
+      value. See also the <a
+      href="#reapingPriority"><code>reapingPriority</code></a>
+      configuration entry.  Obtained at service start and restart.
+  </table>
+
+
+<a name="reapingPriority"></a>
+<table summary="Describes the reapingPriority configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>reapingPriority</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <code>int</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html#NORM_PRIORITY" title="class or interface in java.lang"><CODE>Thread.NORM_PRIORITY</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> The priority of the threads that periodically wake
+      up and remove entries, templates, contents queries, etc. from
+      Outrigger's internal tables.  Must be a value between <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html#MIN_PRIORITY" title="class or interface in java.lang"><CODE>Thread.MIN_PRIORITY</CODE></A> and <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html#MAX_PRIORITY" title="class or interface in java.lang"><CODE>Thread.MAX_PRIORITY</CODE></A> inclusive. See
+      also the <a href="#reapingInterval"><code>reapingInterval</code></a>
+      configuration entry.  Obtained at service start and restart.
+  </table>
+
+<a name="recoveredListenerPreparer"></a>
+<table summary="Describes the recoveredListenerPreparer configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>recoveredListenerPreparer</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../net/jini/security/ProxyPreparer.html" title="interface in net.jini.security"><CODE>ProxyPreparer</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> An instance of
+      <A HREF="../../../../net/jini/security/BasicProxyPreparer.html" title="class in net.jini.security"><CODE>BasicProxyPreparer</CODE></A> that
+      does nothing
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> Proxy preparer for <A HREF="../../../../net/jini/core/event/RemoteEventListener.html" title="interface in net.jini.core.event"><CODE>RemoteEventListener</CODE></A> proxies that have been
+      persisted and recovered. The preparer should expect Outrigger to call
+      the <A HREF="../../../../net/jini/core/event/RemoteEventListener.html#notify(net.jini.core.event.RemoteEvent)"><CODE>notify</CODE></A>
+      method on the returned proxy. In a given virtual
+      machine for the Java platform (VM) the preparer may be asked
+      to prepare proxies for the same listener multiple times, though at
+      most one successful prepare call will be made per registration the
+      listener is associated with.  Only read if Outrigger is being run as a
+      persistent service. See also the <a
+      href="#listenerPreparer"><code>listenerPreparer</code></a>
+      configuration entry. Obtained at persistent service start and
+      restart.<p>
+
+      This preparer needs to perform only those operations whose results
+      are not retained in the serializable state of the listener proxy
+      itself, but need to be performed in the environment in which the
+      proxy is unmarshalled, typically just granting permissions. <p>
+  </table>
+
+<a name="recoveredLookupLocatorPreparer"></a>
+<table summary="Describes the recoveredLookupLocatorPreparer configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>recoveredLookupLocatorPreparer</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../net/jini/security/ProxyPreparer.html" title="interface in net.jini.security"><CODE>ProxyPreparer</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> An instance of
+      <A HREF="../../../../net/jini/security/BasicProxyPreparer.html" title="class in net.jini.security"><CODE>BasicProxyPreparer</CODE></A> that
+      does nothing
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> Proxy preparer to use for instances of <A HREF="../../../../net/jini/core/discovery/LookupLocator.html" title="class in net.jini.core.discovery"><CODE>LookupLocator</CODE></A> that have been persisted and
+      recovered. This will include <code>LookupLocator</code>s passed into
+      various <A HREF="../../../../net/jini/admin/JoinAdmin.html" title="interface in net.jini.admin"><CODE>JoinAdmin</CODE></A> methods as well as the
+      initial set of locators obtained from the <a
+      href="#initialLookupLocators"> <code>initialLookupLocators</code></a>
+      configuration entry. The preparer should expect Outrigger to call the
+      <A HREF="../../../../net/jini/core/discovery/LookupLocator.html#getRegistrar()"><CODE>LookupLocator.getRegistrar</CODE></A>, <code>equals</code>, and
+      <code>hashCode</code> methods of the proxy being prepared, and that
+      the returned proxy will be persisted.  The object returned by this
+      preparer must be equal (in the sense of the <code>equals</code>
+      method) to the object passed in. Only read if Outrigger is being run
+      as a persistent service. See also the <a
+      href="#lookupLocatorPreparer"><code>lookupLocatorPreparer</code></a>
+      configuration entry. Obtained at persistent service start and
+      restart.
+      <p>
+      This preparer needs to perform only those operations whose results
+      are not retained in the serializable state of the lookup locator
+      itself, but need to be performed in the environment in which the
+      lookup locator is unmarshalled. Typically no operations are
+      needed. <p>
+
+  </table>
+
+<a name="recoveredTransactionManagerPreparer"></a>
+<table summary="Describes the recoveredTransactionManagerPreparer
+                configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>recoveredTransactionManagerPreparer</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../net/jini/security/ProxyPreparer.html" title="interface in net.jini.security"><CODE>ProxyPreparer</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> An instance of
+      <A HREF="../../../../net/jini/security/BasicProxyPreparer.html" title="class in net.jini.security"><CODE>BasicProxyPreparer</CODE></A> that
+      does nothing
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> Proxy preparer for <A HREF="../../../../net/jini/core/transaction/server/TransactionManager.html" title="interface in net.jini.core.transaction.server"><CODE>TransactionManager</CODE></A> proxies that
+      have been persisted and recovered. The preparer should expect
+      Outrigger to call the <A HREF="../../../../net/jini/core/transaction/server/TransactionManager.html#getState(long)"><CODE>getState</CODE></A>, <code>equals</code>, and <code>hashCode</code> methods on the
+      returned proxy. In a given VM, the preparer may be asked to prepare
+      proxies for the same <code>TransactionManager</code> multiple times,
+      though at most one successful prepare call will be made per given
+      transaction the manager is involved in. Only read if Outrigger is
+      being run as a persistent service. The object returned by this
+      preparer must be equal (in the sense of the <code>equals</code>
+      method) to the object passed in. See also the <a
+      href="#transactionManagerPreparer">
+      <code>transactionManagerPreparer</code></a> configuration
+      entry. Obtained at persistent service start and restart.
+      <p>
+
+      This preparer needs to perform only those operations whose results
+      are not retained in the serializable state of the transaction manager
+      proxy itself, but need to be performed in the environment in which
+      the proxy is unmarshalled, typically just granting permissions. <p>
+  </table>
+
+
+<a name="serverExporter"></a>
+<table summary="Describes the serverExporter configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>serverExporter</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../net/jini/export/Exporter.html" title="interface in net.jini.export"><CODE>Exporter</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> A new 
+               <A HREF="../../../../net/jini/jeri/BasicJeriExporter.html" title="class in net.jini.jeri"><CODE>BasicJeriExporter</CODE></A>
+               with <ul>
+               <li> a <A HREF="../../../../net/jini/jeri/tcp/TcpServerEndpoint.html" title="class in net.jini.jeri.tcp"><CODE>TcpServerEndpoint</CODE></A>
+               created on a random port, 
+               <li> a <A HREF="../../../../net/jini/jeri/BasicILFactory.html" title="class in net.jini.jeri"><CODE>BasicILFactory</CODE></A>,
+               <li> distributed garbage collection turned off,
+               <li> keep alive on. 
+               </ul>
+               If activatable, the same default will be used
+               but wrapped in an
+               <A HREF="../../../../net/jini/activation/ActivationExporter.html" title="class in net.jini.activation"><CODE>ActivationExporter</CODE></A>
+               and created with the service's <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/activation/ActivationID.html" title="class or interface in java.rmi.activation"><CODE>ActivationID</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> The exporter used to export the server. The
+      resulting proxy is used as the <em>inner proxy</em> for all of
+      Outrigger's proxies. If the server is activatable, the service's
+      <code>ActivationID</code> will be passed as the <code>data</code>
+      argument, otherwise the <code>data</code> argument will be
+      <code>null</code>. A new exporter is obtained every time Outrigger
+      needs to export itself, currently at service start and restart.
+      
+  </table>
+
+<a name="store"></a>
+<table summary="Describes the store configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>store</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../com/sun/jini/outrigger/Store.html" title="interface in com.sun.jini.outrigger"><CODE>Store</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> none 
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> The object used to implement Outrigger's persistent
+      store. Only consulted if a persistent version of Outrigger is being
+      started. Obtained at persistent service start and restart.<p>
+
+      A <A HREF="../../../../com/sun/jini/outrigger/snaplogstore/LogStore.html" title="class in com.sun.jini.outrigger.snaplogstore"><CODE>com.sun.jini.outrigger.snaplogstore.LogStore</CODE></A> instance can
+      be created like this:
+      <p>
+
+      <code>new </code><A HREF="../../../../com/sun/jini/outrigger/snaplogstore/LogStore.html#LogStore(net.jini.config.Configuration)"><CODE>com.sun.jini.outrigger.snaplogstore.LogStore(this)</CODE></A>
+      <code> // `this' == the configuration object</code>
+      <p>
+  </table>
+
+<a name="takeMultipleLimit"></a>
+<table summary="Describes the takeMultipleLimit configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>takeMultipleLimit</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <code>int</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>100</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> Maximum number of entries a <A HREF="../../../../net/jini/space/JavaSpace05.html#take(java.util.Collection, net.jini.core.transaction.Transaction, long, long)"><CODE>JavaSpace05.take</CODE></A> call may
+      return. Must be a positive <code>int</code> value. Obtained at
+      service start and restart.
+  </table>
+
+
+<a name="transactionManagerPreparer"></a>
+<table summary="Describes the transactionManagerPreparer configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>transactionManagerPreparer</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../net/jini/security/ProxyPreparer.html" title="interface in net.jini.security"><CODE>ProxyPreparer</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> An instance of
+      <A HREF="../../../../net/jini/security/BasicProxyPreparer.html" title="class in net.jini.security"><CODE>BasicProxyPreparer</CODE></A> that
+      does nothing
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> Proxy preparer for <A HREF="../../../../net/jini/core/transaction/server/TransactionManager.html" title="interface in net.jini.core.transaction.server"><CODE>TransactionManager</CODE></A> proxies
+      managing transactions Outrigger is participating in. The preparer
+      should expect Outrigger to call the <A HREF="../../../../net/jini/core/transaction/server/TransactionManager.html#join(long, net.jini.core.transaction.server.TransactionParticipant, long)"><CODE>join</CODE></A>,
+      <A HREF="../../../../net/jini/core/transaction/server/TransactionManager.html#getState(long)"><CODE>getState</CODE></A>, <code>equals</code>, and <code>hashCode</code> methods on the
+      returned proxy. The preparer may be asked to prepare proxies for the
+      same <code>TransactionManager</code> multiple times. Outrigger
+      attempts to minimize the number of times the
+      <code>TransactionManager</code> associated with a given transaction
+      is prepared; that is, if a given transaction is passed to multiple
+      operations on the space, in most cases the proxy for the associated
+      <code>TransactionManager</code> will only be prepared once. However,
+      it will be prepared again if it is used in a different
+      transaction. The object returned by this preparer must be equal (in
+      the sense of the <code>equals</code> method) to the object passed
+      in.<p>
+
+      Only <code>TransactionManager</code> proxies that have been returned
+      by this preparer will be persisted. If a
+      <code>TransactionManager</code> proxy is recovered it will be
+      re-prepared by the <a
+      href="#recoveredTransactionManagerPreparer"><code>
+      recoveredTransactionManagerPreparer</code></a>.<p>
+
+      Obtained at service start and restart.      
+  </table>
+
+<a name="txnMonitorTaskManager"></a>
+<table summary="Describes the txnMonitorTaskManager configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>txnMonitorTaskManager</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <A HREF="../../../../com/sun/jini/thread/TaskManager.html" title="class in com.sun.jini.thread"><CODE>TaskManager</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>new </code><A HREF="../../../../com/sun/jini/thread/TaskManager.html#TaskManager()"><CODE>TaskManager()</CODE></A>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> The pool of threads used to check the status
+      of transactions that have been prepared or have locked contended 
+      resources.
+      The <A HREF="../../../../com/sun/jini/thread/TaskManager.html#terminate()"><CODE>terminate</CODE></A>
+      method of this object will be called when the service is
+      destroyed. Obtained at service start and restart.
+  </table>
+
+<a name="unexportRetryDelay"></a>
+<table summary="Describes the unexportRetryDelay configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>unexportRetryDelay</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <code>long</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>1000</code> (1 second)
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> When destroying an Outrigger server how long to
+      wait between unexport attempts. <code>unexportRetryDelay</code> must
+      be a positive long value. When destroying itself Outrigger will sleep
+      for <code>unexportRetryDelay</code> milliseconds between <A HREF="../../../../net/jini/export/Exporter.html#unexport(boolean)"><CODE>Exporter.unexport</CODE></A> calls. Obtained
+      at service start and restart. See <a
+      href="#maxUnexportDelay"><code>maxUnexportDelay</code></a> for
+      additional details.
+  </table>
+
+<!--
+<a name=""></a>
+<table summary="Describes the firstEntryName configuration entry"
+         border="0" cellpadding="2">
+    <tr valign="top">
+      <th scope="col" summary="layout"> <font size="+1">&#X2022;</font>
+      <th scope="col" align="left" colspan="2"> <font size="+1">
+      <code>firstEntryName</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> <code><i>firstTypeName</i></code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code><i>firstDefaultValue</i></code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Description: <td> <i>This is the first description.</i>
+  </table>
+-->
+
+<H3>Other Configuration Entries</H3>
+
+Outrigger uses <A HREF="../../../../net/jini/lookup/JoinManager.html" title="class in net.jini.lookup"><CODE>JoinManager</CODE></A> to manage its lookup
+service registrations, passing in the configuration, the <A HREF="../../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery"><CODE>DiscoveryManagement</CODE></A> object obtained from the <a
+href="#discoveryManager"><code>discoveryManager</code></a> configuration
+entry, and <code>null</code> for the <A HREF="../../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease"><CODE>LeaseRenewalManager</CODE></A>. The <A HREF="../../../../net/jini/lookup/JoinManager.html" title="class in net.jini.lookup"><code>JoinManager</code> documentation</A> should be consulted to see what
+configuration entries <code>JoinManager</code> reads.
+
+<a name="Blocking Queries">
+<H2>Blocking Queries</H2>
+</a>
+
+Outrigger implements blocking queries (<A HREF="../../../../net/jini/space/JavaSpace.html#read(net.jini.core.entry.Entry, net.jini.core.transaction.Transaction, long)"><CODE>read</CODE></A>, <A HREF="../../../../net/jini/space/JavaSpace.html#take(net.jini.core.entry.Entry, net.jini.core.transaction.Transaction, long)"><CODE>take</CODE></A>, <A HREF="../../../../net/jini/space/JavaSpace05.html#take(java.util.Collection, net.jini.core.transaction.Transaction, long, long)"><CODE>take</CODE></A>, <A HREF="../../../../net/jini/space/JavaSpace.html#readIfExists(net.jini.core.entry.Entry, net.jini.core.transaction.Transaction, long)"><CODE>readIfExists</CODE></A>, and <A HREF="../../../../net/jini/space/JavaSpace.html#takeIfExists(net.jini.core.entry.Entry, net.jini.core.transaction.Transaction, long)"><CODE>takeIfExists</CODE></A> calls with non-zero
+timeouts that cannot be immediately resolved) by having the remote call
+block in the server until the query can be resolved or the timeout
+expires. This means the remote call could run up to the timeout provided by
+the client. While this works well in many cases, some transports only
+support relatively short remote call durations. In such cases, calls that
+block in the server for a long time may fail with a remote exception.
+Outrigger's <em>maximum server query timeout</em> facility can be used to
+limit the duration of any one remote call while still allowing for the
+client to submit blocking queries with very long timeouts. This allows an
+Outrigger deployment to accommodate clients that want to use long timeouts
+with blocking queries while using transports that cannot support remote
+calls that block for an unbounded period of time.<p>
+
+When Outrigger's proxy handles a query with a non-zero <em>client
+timeout</em>, it passes a non-zero <em>server timeout</em> to the
+server. If the server timeout elapses, the server returns even if the query
+has not been resolved. Normally the proxy just passes the client timeout as
+the server timeout. However, each proxy has a <em>maximum server query
+timeout</em> value that is used to bound the server timeout. If the maximum
+server query timeout is less than the client timeout, the maximum server
+query timeout will be passed for the server timeout. If a call to the
+server returns without resolving the query, the proxy will re-submit the
+query using the smaller of the maximum server query timeout and the
+remainder of the client timeout as the server timeout.  By setting the
+maximum server query timeout to be shorter than the longest remote call the
+transport will support, the client can use very long client
+timeouts while avoiding remote exceptions that result from the transport's
+inability to support long remote calls.<p>
+
+When Outrigger creates a proxy it provides a default value for the maximum
+server query timeout. This default is controlled by the <a
+href="#maxServerQueryTimeout"><code>maxServerQueryTimeout</code></a>
+configuration entry. This value can be overridden in the client by setting
+the <code>com.sun.jini.outrigger.maxServerQueryTimeout</code> property to a
+positive <code>long</code> value.<p>
+
+Note, the maximum server query timeout only controls how long the server
+will wait for resolution of a blocking query before returning to the proxy,
+it does not affect how long the proxy will wait if there is a problem with
+the network. If the Java RMI implementation being used allows one to limit
+the total time a remote call is allowed to block, the maximum server
+query timeout provides a way to make sure that the proxy will avoid making
+calls that will last longer than that limit.<p>
+
+<a name="access_control">
+<H2>Access Control Permission Targets</H2>
+</a>
+
+The following table lists the remote methods on Outrigger's proxy objects and
+the associated target names for enforcing access control using <A HREF="../../../../com/sun/jini/outrigger/OutriggerPermission.html" title="class in com.sun.jini.outrigger"><CODE>OutriggerPermission</CODE></A>: <p>
+
+<table border="1" cellpadding="5"
+       summary="The proxy methods and associated target names for
+       OutriggerPermission.">
+
+<tr> <th> Proxy Method <th> Target Name
+
+<!-- JavaSpace -->
+
+<tr> <td> <A HREF="../../../../net/jini/space/JavaSpace.html#write(net.jini.core.entry.Entry, net.jini.core.transaction.Transaction, long)"><CODE>JavaSpace.write</CODE></A>
+     <td> <code>write</code>
+
+<tr> <td> <A HREF="../../../../net/jini/space/JavaSpace.html#take(net.jini.core.entry.Entry, net.jini.core.transaction.Transaction, long)"><CODE>JavaSpace.take</CODE></A>
+     <td> <code>take</code>
+
+<tr> <td> <A HREF="../../../../net/jini/space/JavaSpace.html#read(net.jini.core.entry.Entry, net.jini.core.transaction.Transaction, long)"><CODE>JavaSpace.read</CODE></A>
+     <td> <code>read</code>
+
+<tr> <td> <A HREF="../../../../net/jini/space/JavaSpace.html#takeIfExists(net.jini.core.entry.Entry, net.jini.core.transaction.Transaction, long)"><CODE>JavaSpace.takeIfExists</CODE></A>
+     <td> <code>takeIfExists</code>
+
+<tr> <td> <A HREF="../../../../net/jini/space/JavaSpace.html#readIfExists(net.jini.core.entry.Entry, net.jini.core.transaction.Transaction, long)"><CODE>JavaSpace.readIfExists</CODE></A>
+     <td> <code>readIfExists</code>
+
+<tr> <td> <A HREF="../../../../net/jini/space/JavaSpace.html#notify(net.jini.core.entry.Entry, net.jini.core.transaction.Transaction, net.jini.core.event.RemoteEventListener, long, java.rmi.MarshalledObject)"><CODE>JavaSpace.notify</CODE></A>
+     <td> <code>notify</code>
+
+<!-- JavaSpace05 -->
+
+<tr> <td> <A HREF="../../../../net/jini/space/JavaSpace05.html#write(java.util.List, net.jini.core.transaction.Transaction, java.util.List)"><CODE>JavaSpace05.write</CODE></A>
+     <td> <code>write</code>
+
+<tr> <td> <A HREF="../../../../net/jini/space/JavaSpace05.html#take(java.util.Collection, net.jini.core.transaction.Transaction, long, long)"><CODE>JavaSpace05.take</CODE></A>
+     <td> <code>take</code>
+
+<tr> <td> <A HREF="../../../../net/jini/space/JavaSpace05.html#contents(java.util.Collection, net.jini.core.transaction.Transaction, long, long)"><CODE>JavaSpace05.contents</CODE></A>
+     <td> <code>contents</code>
+
+<tr> <td> <A HREF="../../../../net/jini/space/JavaSpace05.html#registerForAvailabilityEvent(java.util.Collection, net.jini.core.transaction.Transaction, boolean, net.jini.core.event.RemoteEventListener, long, java.rmi.MarshalledObject)"><CODE>JavaSpace05.registerForAvailabilityEvent</CODE></A>
+     <td> <code>registerForAvailabilityEvent</code>
+
+<!-- MatchSet -->
+
+<tr> <td> <A HREF="../../../../net/jini/space/MatchSet.html#next()"><CODE>MatchSet.next</CODE></A>
+     <td> <code>nextBatch</code>
+
+
+<!-- TransactionParticipant -->
+
+<tr> <td> <A HREF="../../../../net/jini/core/transaction/server/TransactionParticipant.html#prepare(net.jini.core.transaction.server.TransactionManager, long)"><CODE>TransactionParticipant.prepare</CODE></A>
+     <td> <code>prepare</code>
+
+<tr> <td> <A HREF="../../../../net/jini/core/transaction/server/TransactionParticipant.html#commit(net.jini.core.transaction.server.TransactionManager, long)"><CODE>TransactionParticipant.commit</CODE></A>
+     <td> <code>commit</code>
+
+<tr> <td> <A HREF="../../../../net/jini/core/transaction/server/TransactionParticipant.html#abort(net.jini.core.transaction.server.TransactionManager, long)"><CODE>TransactionParticipant.abort</CODE></A>
+     <td> <code>abort</code>
+
+<tr> <td> <A HREF="../../../../net/jini/core/transaction/server/TransactionParticipant.html#prepareAndCommit(net.jini.core.transaction.server.TransactionManager, long)"><CODE>TransactionParticipant.prepareAndCommit</CODE></A>
+     <td> <code>prepareAndCommit</code>
+
+<!-- Lease and LeaseMap -->
+
+<tr> <td> <A HREF="../../../../net/jini/core/lease/Lease.html#renew(long)"><CODE>Lease.renew</CODE></A>
+     <td> <code>renew</code>
+
+<tr> <td> <A HREF="../../../../net/jini/core/lease/Lease.html#cancel()"><CODE>Lease.cancel</CODE></A>
+     <td> <code>cancel</code>
+
+<tr> <td> <A HREF="../../../../net/jini/core/lease/LeaseMap.html#renewAll()"><CODE>LeaseMap.renewAll</CODE></A>
+     <td> <code>renewAll</code>
+
+<tr> <td> <A HREF="../../../../net/jini/core/lease/LeaseMap.html#cancelAll()"><CODE>LeaseMap.cancelAll</CODE></A>
+     <td> <code>cancelAll</code>
+
+<!-- Administrable -->
+
+<tr> <td> <A HREF="../../../../net/jini/admin/Administrable.html#getAdmin()"><CODE>Administrable.getAdmin</CODE></A>
+     <td> <code>getAdmin</code>
+
+<!-- JoinAdmin -->
+
+<tr> <td> <A HREF="../../../../net/jini/admin/JoinAdmin.html#getLookupAttributes()"><CODE>JoinAdmin.getLookupAttributes</CODE></A>
+     <td> <code>getLookupAttributes</code>
+
+<tr> <td> <A HREF="../../../../net/jini/admin/JoinAdmin.html#addLookupAttributes(net.jini.core.entry.Entry[])"><CODE>JoinAdmin.addLookupAttributes</CODE></A>
+     <td> <code>addLookupAttributes</code>
+
+<tr> <td> <A HREF="../../../../net/jini/admin/JoinAdmin.html#modifyLookupAttributes(net.jini.core.entry.Entry[], net.jini.core.entry.Entry[])"><CODE>JoinAdmin.modifyLookupAttributes</CODE></A>
+     <td> <code>modifyLookupAttributes</code>
+
+<tr> <td> <A HREF="../../../../net/jini/admin/JoinAdmin.html#getLookupGroups()"><CODE>JoinAdmin.getLookupGroups</CODE></A>
+     <td> <code>getLookupGroups</code>
+
+<tr> <td> <A HREF="../../../../net/jini/admin/JoinAdmin.html#addLookupGroups(java.lang.String[])"><CODE>JoinAdmin.addLookupGroups</CODE></A>
+     <td> <code>addLookupGroups</code>
+
+<tr> <td> <A HREF="../../../../net/jini/admin/JoinAdmin.html#removeLookupGroups(java.lang.String[])"><CODE>JoinAdmin.removeLookupGroups</CODE></A>
+     <td> <code>removeLookupGroups</code>
+
+<tr> <td> <A HREF="../../../../net/jini/admin/JoinAdmin.html#setLookupGroups(java.lang.String[])"><CODE>JoinAdmin.setLookupGroups</CODE></A>
+     <td> <code>setLookupGroups</code>
+
+<tr> <td> <A HREF="../../../../net/jini/admin/JoinAdmin.html#getLookupLocators()"><CODE>JoinAdmin.getLookupLocators</CODE></A>
+     <td> <code>getLookupLocators</code>
+
+<tr> <td> <A HREF="../../../../net/jini/admin/JoinAdmin.html#addLookupLocators(net.jini.core.discovery.LookupLocator[])"><CODE>JoinAdmin.addLookupLocators</CODE></A>
+     <td> <code>addLookupLocators</code>
+
+<tr> <td> <A HREF="../../../../net/jini/admin/JoinAdmin.html#removeLookupLocators(net.jini.core.discovery.LookupLocator[])"><CODE>JoinAdmin.removeLookupLocators</CODE></A>
+     <td> <code>removeLookupLocators</code>
+
+<tr> <td> <A HREF="../../../../net/jini/admin/JoinAdmin.html#setLookupLocators(net.jini.core.discovery.LookupLocator[])"><CODE>JoinAdmin.setLookupLocators</CODE></A>
+     <td> <code>setLookupLocators</code>
+
+<!-- DestroyAdmin -->
+
+<tr> <td> <A HREF="../../../../com/sun/jini/admin/DestroyAdmin.html#destroy()"><CODE>DestroyAdmin.destroy</CODE></A>
+     <td> <code>destroy</code>
+
+<!-- ProxyTrust -->
+
+<tr> <td> <A HREF="../../../../net/jini/security/proxytrust/ProxyTrust.html#getProxyVerifier()"><CODE>ProxyTrust.getProxyVerifier</CODE></A>
+     <td> <code>getProxyVerifier</code>
+
+<!-- ServiceProxyAccessor -->
+
+<tr> <td> <A HREF="../../../../com/sun/jini/start/ServiceProxyAccessor.html#getServiceProxy()"><CODE>ServiceProxyAccessor.getServiceProxy</CODE></A>
+     <td> <code>getServiceProxy</code>
+
+<!-- (Constrainable)JavaSpaceAdmin -->
+
+<tr> <td> <A HREF="../../../../com/sun/jini/outrigger/JavaSpaceAdmin.html#space()"><CODE>JavaSpaceAdmin.space</CODE></A>
+     <td> <code>space</code>
+
+<tr> <td> <A HREF="../../../../com/sun/jini/outrigger/JavaSpaceAdmin.html#contents(net.jini.core.entry.Entry, net.jini.core.transaction.Transaction)"><CODE>JavaSpaceAdmin.contents(Entry, Transaction)</CODE></A>,<br>
+          <A HREF="../../../../com/sun/jini/outrigger/JavaSpaceAdmin.html#contents(net.jini.core.entry.Entry, net.jini.core.transaction.Transaction, int)"><CODE>JavaSpaceAdmin.contents(Entry, Transaction, int)</CODE></A>,<br>
+          <A HREF="../../../../com/sun/jini/outrigger/ConstrainableJavaSpaceAdmin.html#contents(net.jini.core.entry.Entry, net.jini.core.transaction.Transaction, int, net.jini.core.constraint.MethodConstraints)"><CODE>ConstrainableJavaSpaceAdmin.contents(Entry, Transaction, int, 
+                                      MethodConstraints)</CODE></A>
+
+         <td> <code>contents</code>
+
+<!-- AdminIterator -->
+
+<tr> <td> <A HREF="../../../../com/sun/jini/outrigger/AdminIterator.html#next()"><CODE>AdminIterator.next</CODE></A>
+     <td> <code>next</code>
+
+<tr> <td> <A HREF="../../../../com/sun/jini/outrigger/AdminIterator.html#delete()"><CODE>AdminIterator.delete</CODE></A>
+     <td> <code>delete</code>
+
+<tr> <td> <A HREF="../../../../com/sun/jini/outrigger/AdminIterator.html#close()"><CODE>AdminIterator.close</CODE></A>
+     <td> <code>close</code>
+
+</table>
+
+<a name="logging">
+<h2>Logging</h2>
+</a>
+
+The Outrigger service implementation uses a number of different <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Logger.html" title="class or interface in java.util.logging"><CODE>Logger</CODE></A> objects: <p>
+
+  <table border="1" cellpadding="5"
+         summary="Describes the various logger names Outrigger uses">
+
+  <tr> <td> <b>Logger Name</b> <td> <b>Description</b>
+  
+  <tr> <td> <code>com.sun.jini.outrigger.lifecycle</code>
+       <td> Starting/restarting/destroying the service
+
+  <tr> <td> <code>com.sun.jini.outrigger.operations</code>
+       <td> Top level space operations
+
+  <tr> <td> <code>com.sun.jini.outrigger.transactions</code>
+       <td> Transactions
+
+  <tr> <td> <code>com.sun.jini.outrigger.leases</code>
+       <td> Leases and leasing            
+
+  <tr> <td> <code>com.sun.jini.outrigger.iterator</code>
+       <td> Iterators
+
+  <tr> <td> <code>com.sun.jini.outrigger.join</code>
+       <td> Outrigger's join state
+
+  <tr> <td> <code>com.sun.jini.outrigger.entryMatching</code>
+       <td> Entry matching
+
+  <tr> <td> <code>com.sun.jini.outrigger.event</code>
+       <td> Events and event delivery
+
+  <tr> <td> <code>com.sun.jini.outrigger.store</code>
+       <td> Persistence
+
+  <tr> <td> <code>com.sun.jini.outrigger.proxy</code>
+       <td> The operation of Outrigger's proxies
+  </table><p>
+
+Each of these loggers logs information at the following logging levels: <p>
+
+  <table border="1" cellpadding="5"
+         summary="Describes logging performed by Outrigger at different
+         logging levels">
+
+  <tr> <th> Level <th> Description
+
+  <tr> <td> SEVERE 
+       <td> Problems which prevent startup or cause shutdown of Outrigger,
+       or which generally prevent Outrigger from continuing with its
+       processing
+
+  <tr> <td> WARNING 
+       <td> Problems that allow Outrigger to continue with its processing,
+       but in a "crippled" state that might be serious enough to affect
+       other operations in the system
+
+  <tr> <td> INFO <td> 
+       Serious, unexpected "problems" that occur during processing that the
+       user/deployer/administrator needs to know about, but which does not
+       necessarily indicate problems with other operations in the system.
+       Also top level life-cycle messages
+
+  <tr> <td> CONFIG <td> 
+       Trace information related to the configuration and administration
+       of Outrigger
+
+  <tr> <td> FAILED <td>
+       Serious, unexpected "problems" encountered by Outrigger that
+       the user/deployer/administrator needs to know about, which 
+       Outrigger propagates to its caller, and which may ultimately be
+       logged by some other component at a higher level (such as INFO).
+       Also error conditions in independent threads that are probably
+       transient in nature
+
+  <tr> <td> FINE <td> 
+       Information related to tracing Outrigger at a high level, 
+       which might provide a logical view of the operations being 
+       performed.
+
+  <tr> <td> FINER <td> 
+       Information related to tracing Outrigger at a lower level,
+       with more detail than that provided at the FINE level; for
+       example, tracing method entry and exit.
+
+  <tr> <td> FINEST <td>
+       Information related to Outrigger's internal state that
+       might be useful in debugging or testing
+  </table> <p>
+
+<p>
+
+<a name="examples">
+<H2>Examples for Running Outrigger</H2>
+</a>
+
+This section provides examples of running Outrigger in various configurations.
+
+<ul>
+<li> <a href="#assumptions">Assumptions for running the examples</a>
+<li> JRMP configurations
+     <ul>
+     <li> <a href="#transient_jrmp">Transient</a>
+     <li> <a href="#activatable_jrmp">Activatable</a>
+     </ul>
+<li> Jini ERI configurations
+     <ul>
+     <li> <a href="#transient">Transient</a>
+     <li> <a href="#persistent">Persistent</a>
+     <li> <a href="#activatable">Activatable</a>
+     </ul>
+<li> <a href="#stop_activatable">Stopping activatable configurations</a>
+</ul> <p>
+
+No example is included for a non-activatable, persistent JRMP configuration
+because this is <a href="#persistent_jrmp">unlikely to have the expected
+result</a>.
+
+<a name="assumptions">
+<h3>Assumptions for Running the Examples</h3>
+</a>
+
+The examples below make the following assumptions: <p>
+
+<ul>
+<li> The Java(TM) 2 Platform, Standard Edition, (J2SE(TM)) has been
+     installed, and its commands are available in the current path
+<li> The Apache River release has been installed in the
+     <var><b>install_dir</b></var> directory
+<li> The example configuration and policy files described below are
+     available in the <var><b>config_dir</b></var> directory
+<li> The local lookup group name is <var><b>your.group</b></var>
+<li> The HTTP server for download JAR files is running on
+     the local host and is available on port
+     <var><b>http_port</b></var>. This HTTP server is serving files located
+     in the <var><b>install_dir</b></var>/lib-dl directory. You can use the
+     <A HREF="../../../../com/sun/jini/tool/ClassServer.html" title="class in com.sun.jini.tool"><CODE>ClassServer</CODE></A> class for this purpose.
+<li> The examples are being run on UNIX platforms
+<li> The examples are being run on a secure network where access control
+     and authentication are not needed. See the <a
+     href="../../../../../../source/src/com/sun/jini/example/hello/index.html">hello example</a> for some 
+     client and service configurations that enforce security.
+<li> For activatable services, an activation system is running on
+     your machine. You can use the <A HREF="../../../../com/sun/jini/phoenix/package-summary.html"><CODE>com.sun.jini.phoenix</CODE></A> implementation for this purpose.
+</ul> <p>
+
+Throughout the examples, items in <var><b>bold</b></var> need to be
+customized for your local environment.
+
+<a name="transient_jrmp">
+<h3>Starting Transient Outrigger using JRMP</h3>
+</a>
+
+This configuration starts a transient Outrigger server that will use JRMP
+(the basic Java RMI implementation included with the JDK) to communicate
+between proxies and the server. Only a single VM will be involved (which
+will be started by the command shown below). The Outrigger server will
+reside in this VM. When this VM exits, the server, the space it is hosting,
+and all entries in the space will be gone. This (or a similar <a
+href="#transient">configuration that uses Jini ERI</a>) is a good choice when
+you are just starting with spaces or when doing development since it has
+low overhead, is simpler to get running, and is simpler to stop. It may or
+may not be a good choice for a production deployment depending on the
+application's requirements.<p>
+
+<blockquote>
+<pre>
+java -Djava.security.policy=<a href="#outrigger_all_policy"><var><b>config_dir</b></var>/outrigger-all.policy</a> \
+     -jar <var><b>install_dir</b></var>/lib/start.jar \
+     <a href="#start_transient_jrmp_config"><var><b>config_dir</b></var>/start-transient-jrmp-outrigger.config</a>
+</pre>
+</blockquote> <p>
+
+This configuration uses the following files.
+
+<a name="outrigger_all_policy">
+<h4>File <var><b>config_dir</b></var>/outrigger-all.policy</h4>
+</a>
+
+For simplicity the examples all use this security policy file for starting
+and running all Outrigger configurations. It would be possible to create
+more targeted files in some cases. A policy file like this should prevent
+Outrigger from being used to compromise the host it is being run on or
+other hosts on the network while requiring minimal tweaking. It will not
+prevent unauthorized access to the space, nor will it prevent denial of
+service attacks against the space.  Controlling access to the space and/or
+preventing denial of service attacks will require a secure configuration.
+See the <a
+href="../../../../../../source/src/com/sun/jini/example/hello/index.html">hello
+example</a> for some client and service configurations that enforce
+security.<p>
+
+<blockquote>
+<pre>
+grant codebase "file:<var><b>install_dir</b></var>/lib/jsk-platform.jar" {
+    permission java.security.AllPermission;
+};
+
+grant codebase "file:<var><b>install_dir</b></var>/lib/jsk-lib.jar" {
+    permission java.security.AllPermission;
+};
+
+grant codebase "file:<var><b>install_dir</b></var>/lib/start.jar" {
+    permission java.security.AllPermission;
+};
+
+grant codebase "file:<var><b>install_dir</b></var>/lib/destroy.jar" {
+    permission java.security.AllPermission;
+};
+
+grant codebase "file:<var><b>install_dir</b></var>/lib/sharedvm.jar" {
+    permission java.security.AllPermission;
+};
+
+grant codebase "file:<var><b>install_dir</b></var>/lib/group.jar" {
+    permission java.security.AllPermission;
+};
+
+grant codebase "file:<var><b>install_dir</b></var>/lib/outrigger.jar" {
+    permission java.security.AllPermission;
+};
+
+grant codebase "file:<var><b>install_dir</b></var>/lib/outrigger-snaplogstore.jar" {
+    permission java.security.AllPermission;
+};
+
+grant codebase "file:<var><b>install_dir</b></var>/lib/phoenix-group.jar" {
+    permission java.security.AllPermission;
+};
+
+grant codebase "file:<var><b>install_dir</b></var>/lib/phoenix-init.jar" {
+    permission java.security.AllPermission;
+};
+</pre>
+</blockquote>
+
+<a name="start_transient_jrmp_config">
+<h4>File <var><b>config_dir</b></var>/start-transient-jrmp-outrigger.config</h4>
+</a>
+
+Use this configuration source file to start transient Outrigger using
+JRMP. <p>
+
+<blockquote>
+<pre>
+import com.sun.jini.start.NonActivatableServiceDescriptor;
+import com.sun.jini.start.ServiceDescriptor;
+import com.sun.jini.config.ConfigUtil;
+
+com.sun.jini.start {
+    private static basecodebase = "http://" + ConfigUtil.getHostName() +

[... 632 lines stripped ...]