river-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From peter_firmst...@apache.org
Subject svn commit: r1634322 [31/41] - in /river/jtsk/skunk/qa_refactor/trunk: qa/src/com/sun/jini/qa/harness/ qa/src/com/sun/jini/test/impl/end2end/e2etest/ qa/src/com/sun/jini/test/impl/joinmanager/ qa/src/com/sun/jini/test/impl/mahalo/ qa/src/com/sun/jini/t...
Date Sun, 26 Oct 2014 13:17:31 GMT
Modified: river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/package.html
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/package.html?rev=1634322&r1=1634321&r2=1634322&view=diff
==============================================================================
--- river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/package.html (original)
+++ river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/package.html Sun Oct 26 13:17:28 2014
@@ -1,1412 +1,1418 @@
-<!--
- ! 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.
- !-->
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-
-
-</head>
-<body bgcolor="white">
-
-Provides implementations of the 
-{@linkplain net.jini.core.transaction.server.TransactionManager} service.
-Three implementations are available for use with the 
-{@link com.sun.jini.start} package:
-
-<ul>
-<li> <code>com.sun.jini.mahalo.ActivatableMahaloImpl</code> - an
-     activatable, persistent implementation, suitable for use with
-     {@link com.sun.jini.start.SharedActivatableServiceDescriptor}
-<li> <code>com.sun.jini.mahalo.NonActivatableMahaloImpl</code> - a
-     non-activatable, persistent implementation, suitable for use with
-     {@link com.sun.jini.start.NonActivatableServiceDescriptor}
-<li> <code>com.sun.jini.mahalo.TransientMahaloImpl</code> - a
-     transient implementation, also suitable for use with
-     {@link com.sun.jini.start.NonActivatableServiceDescriptor}
-</ul>
-
-<p>
-The JAR file <code>mahalo.jar</code>, included in the <code>lib</code>
-subdirectory of the Apache River release
-installation, contains the classes for the three Mahalo service
-implementations. The <code>mahalo-dl.jar</code> 
-and <code>jsk-dl.jar</code> files in the <code>lib-dl</code> subdirectory
-contain
-the classes needed in the codebase for its downloaded proxies. None of the
-JAR files include classes from <code>jsk-platform.jar</code>, which are
-included by the service starter's <code>start.jar</code> JAR file, and
-need to be included in the codebase of clients.
-<p>
-
-The object returned by the {@link net.jini.admin.Administrable#getAdmin
-Administrable.getAdmin} method on a Mahalo service proxy implements {@link
-net.jini.admin.JoinAdmin} and {@link com.sun.jini.admin.DestroyAdmin}. 
-<p>
-
-This document provides the following information about Mahalo: 
-<ul>
-<li> <a href="#configuration">Configuring Mahalo</a>
-<li> <a href="#access_control">Access Control Permission Targets</a>
-<li> <a href="#logging">Logging</a>
-<li> <a href="#examples">Examples for Running Mahalo</a>
-</ul> 
-<p>
-
-<a name="configuration">
-<h2>Configuring Mahalo</h2>
-</a>
-
-The Mahalo service implementation obtains its configuration by calling
-{@link net.jini.config.ConfigurationProvider#getInstance(String[], ClassLoader) 
-ConfigurationProvider.getInstance} 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.mahalo</code>: <p>
-
-  <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> {@link net.jini.security.ProxyPreparer}
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Default: <td> <code>
-        new {@link net.jini.security.BasicProxyPreparer}()
-        </code>
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Description: <td> The proxy preparer for the service's activation
-      ID. The value should not be <code>null</code>. This entry is
-      obtained at service start and restart. This entry is only used by
-      the activatable implementation. <p>
-
-      Clients call the {@link java.rmi.activation.ActivationID#activate
-      activate} method on instances of {@link
-      java.rmi.activation.ActivationID} when they need to reactivate the
-      service.
-  </table>
-
-  <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> {@link net.jini.security.ProxyPreparer}
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Default: <td> <code>
-        new {@link net.jini.security.BasicProxyPreparer}()</code>
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Description: <td> The proxy preparer for the proxy for the
-      activation system. The value should not be <code>null</code>. This
-      entry is obtained at service start and restart. This entry is only
-      used by the activatable implementation. <p>
-
-      The service calls the {@link
-      java.rmi.activation.ActivationSystem#unregisterObject
-      unregisterObject} method on the {@link
-      java.rmi.activation.ActivationSystem} when the service is
-      destroyed.
-  </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> {@link net.jini.discovery.DiscoveryManagement}
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Default: <td>
-<pre>
-new {@link net.jini.discovery.LookupDiscoveryManager}(
-    {@link net.jini.discovery.DiscoveryGroupManagement#NO_GROUPS},
-    null,  // locators
-    null,  // listener
-    this)  // config
-</pre>
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Description: <td> Supplies an object used to discover the lookup
-      services with which this service should register. The value should
-      not be <code>null</code>. The object returned must also implement
-      {@link net.jini.discovery.DiscoveryGroupManagement} and {@link
-      net.jini.discovery.DiscoveryLocatorManagement}, and should be
-      configured initially to discover no groups or specific lookup
-      services. This entry is obtained at service start and restart.
-  </table>
-  
-  <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> <code>{@link net.jini.core.entry.Entry}[]</code>
-    <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> Entries to include in the set of attributes the
-      service supplies when registering with lookup services, in
-      addition to {@link net.jini.lookup.entry.ServiceInfo} and {@link
-      com.sun.jini.lookup.entry.BasicServiceType} instances provided by
-      the service. An empty array or <code>null</code> specifies that
-      only the service-provided attributes should be added. The array
-      must not contain <code>null</code> elements. This entry is
-      obtained and used when the service is first started. Following
-      initial startup, the set of attributes is controlled though the
-      service's {@link net.jini.admin.JoinAdmin} administrable
-      interface.
-  </table>
-
-  <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> <code>String[]</code>
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Default: <td> <code>new String[] { "" } /* public group */</code>
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Description: <td> The names of the lookup groups that the service
-      should discover and join. An empty array specifies that no groups
-      should be joined. A <code>null</code> value specifies that all
-      groups should be joined. Otherwise, the value specifies the names
-      of the groups to join. The array must not contain
-      <code>null</code> elements. This entry is obtained and used when
-      the service is first started. Following initial startup, the set
-      of lookup groups is controlled through the service's {@link
-      net.jini.admin.JoinAdmin} administrable interface.
-  </table>
-
-  <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> <code>{@link net.jini.core.discovery.LookupLocator}[]</code>
-    <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> The locations of specific lookup services that
-      the service should discover and join. An empty array or
-      <code>null</code> specifies that no specific lookup services
-      should be joined. The array must not contain <code>null</code>
-      elements. This entry is obtained and used when the service is
-      first started. Following initial startup, the set of specific
-      lookup services is controlled through the service's {@link
-      net.jini.admin.JoinAdmin} administrable interface. <p>
-
-      The <code>LookupLocator</code> instances specified in this entry
-      will not be prepared by the proxy preparer specified in the
-      <code>locatorPreparer</code> entry, and will only be prepared by
-      the preparer in the <code>recoveredLocatorPreparer</code> entry
-      when they are being recovered.
-  </table>
-
-  <table summary="Describes the leasePeriodPolicy 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>
-      leasePeriodPolicy</code></font>
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Type: <td> {@link com.sun.jini.landlord.LeasePeriodPolicy}
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Default: <td>
-<pre>
-new {@link com.sun.jini.landlord.FixedLeasePeriodPolicy}(
-    3 * 60 * 60 * 1000L,  // max = 3 hours
-    60 * 60 * 1000L)      // default = 1 hour
-</pre>
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Description: <td> The policy for calculating lease grants and
-      renewals. The value should not be <code>null</code>. The default
-      grants leases with a maximum duration of 3 hours and a default
-      duration of 1 hour. This entry is obtained at service start and
-      restart.
-  </table>
-
-  <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> {@link javax.security.auth.login.LoginContext}
-    <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 not <code>null</code>, specifies the JAAS
-      login context to use for performing a JAAS login and supplying the
-      {@link javax.security.auth.Subject} to use when running the
-      service. If <code>null</code>, no JAAS login is performed. This
-      entry is obtained at service start and restart.
-  </table>
-
-  <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> {@link net.jini.security.ProxyPreparer}
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Default: <td> <code>
-        new {@link net.jini.security.BasicProxyPreparer}()
-	</code>
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Description: <td> Prepares {@link
-      net.jini.core.discovery.LookupLocator} instances 
-      passed to the {@link net.jini.admin.JoinAdmin} methods. The value
-      should not be <code>null</code>. When registering with lookup
-      services, this service may call or use the constraints assigned to
-      the {@link net.jini.core.discovery.LookupLocator#getRegistrar
-      getRegistrar} methods of <code>LookupLocator</code> instances
-      returned from this preparer. This entry is obtained at service
-      start and restart. <p>
-
-      This preparer needs to perform all operations needed to use a
-      newly received lookup locator, typically including verifying trust
-      in the lookup locator and setting constraints. The prepared lookup
-      locator will be retained by the service in its persistent
-      store. <p>
-
-      The <code>LookupLocator</code> instances obtained from the
-      <code>initialLookupLocators</code> configuration entry will not be
-      prepared by this preparer.
-  </table>
-
-<table summary="Describes the participantPreparer 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>participantPreparer</code></font>
-
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Type: <td> {@link net.jini.security.ProxyPreparer}
-
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Default: <td> <code>new {@link net.jini.security.BasicProxyPreparer}()
-                    </code>
-
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Description:
-        <td> Preparer for 
-	     {@link net.jini.core.transaction.server.TransactionParticipant}
-	     proxies that have joined transactions from this service 
-	     via the {@link 
-	     net.jini.core.transaction.server.TransactionManager#join join}
-	     method. 
-	     This preparer is
-             used to prepare proxies only when they initially
-             join with this service. 
-             The value should not
-             be <code>null</code>. The preparer must return a listener 
-	     which is equal to the original listener as determined by 
-	     {@link java.lang.Object#equals Object.equals}. 
-	     This entry is obtained at service start and restart. <p>
-	     
-             This preparer needs to perform all operations needed to use a
-             newly received participant, 
-	     typically including verifying trust in
-             the participant proxy, granting permissions, and setting
-             constraints. The prepared participant will be retained 
-	     by the service in its persistent store. <p>
-	     
-	     The service (potentially) calls the 
-             {@link net.jini.core.transaction.server.TransactionParticipant#abort abort}, 
-             {@link net.jini.core.transaction.server.TransactionParticipant#commit commit}, 
-             {@link net.jini.core.transaction.server.TransactionParticipant#prepare prepare}, and
-             {@link net.jini.core.transaction.server.TransactionParticipant#prepareAndCommit prepareAndCommit}, 
-	     methods.
-   </table>
-
-  <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> <code>String</code>
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Default: <td> <em>Required for persistent implementations: no
-      default</em>
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Description: <td> The directory where the service's persistent
-      state is recorded. The value should not be <code>null</code>. This
-      entry is obtained at service start and restart. This entry is
-      required for persistent implementations and is otherwise not used.
-  </table>
-  
-  <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> {@link net.jini.security.ProxyPreparer}
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Default: <td> <code>
-        new {@link net.jini.security.BasicProxyPreparer}()
-	</code>
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Description: <td> Prepares {@link
-      net.jini.core.discovery.LookupLocator} instances for use when they
-      are recovered from persistent storage. The value should not be
-      <code>null</code>. When registering with lookup services, this
-      service may call or use the constraints assigned to the {@link
-      net.jini.core.discovery.LookupLocator#getRegistrar getRegistrar}
-      methods of <code>LookupLocator</code> instances returned from this
-      preparer. This entry is obtained at service start and
-      restart. This entry is only used by persistent
-      implementations. <p>
-
-      This preparer needs to perform only those operations whose results
-      are not retained in 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>
-
-      The <code>LookupLocator</code> instances obtained from the
-      <code>initialLookupLocators</code> configuration entry will not be
-      prepared by this preparer until they are being recovered.
-  </table>
-
-
-  <table summary="Describes the recoveredParticipantPreparer 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>recoveredParticipantPreparer</code></font>
-
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Type: <td> {@link net.jini.security.ProxyPreparer}
-
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Default: <td> <code>new {@link net.jini.security.BasicProxyPreparer}()
-                    </code>
-
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Description:
-        <td> Preparer for recovered 
-	     {@link net.jini.core.transaction.server.TransactionParticipant}
-	     proxies that have been previously registered and prepared
-	     with this service (via the {@link 
-	     net.jini.core.transaction.server.TransactionManager#join 
-	     TransactionManager.join} method). <P>
-	     This preparer needs to perform only those operations whose results are 
-	     not retained in the participant itself, but need to be performed in 
-	     the environment in which the participant is unmarshalled,
-	     typically just granting permissions. <P>
-	     The service (potentially) calls the
-	     {@link net.jini.core.transaction.server.TransactionParticipant#abort abort}, 
-	     {@link net.jini.core.transaction.server.TransactionParticipant#commit commit}, 
-	     {@link net.jini.core.transaction.server.TransactionParticipant#prepare prepare}, and 
-	     {@link net.jini.core.transaction.server.TransactionParticipant#prepareAndCommit prepareAndCommit}, 
-	     methods on these proxies.
-  </table>
-    
-  <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> {@link net.jini.export.Exporter}
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Default: <td>
-<pre>
-// Activatable implementation
-new {@link net.jini.activation.ActivationExporter}(
-    <i>activationID</i>,
-    new {@link net.jini.jeri.BasicJeriExporter}(
-        {@link net.jini.jeri.tcp.TcpServerEndpoint#getInstance TcpServerEndpoint.getInstance}(0),
-        new {@link net.jini.jeri.BasicILFactory}(), false, true))
-// Non-activatable implementations
-new {@link net.jini.jeri.BasicJeriExporter}(
-    {@link net.jini.jeri.tcp.TcpServerEndpoint#getInstance TcpServerEndpoint.getInstance}(0),
-    new {@link net.jini.jeri.BasicILFactory}(),false, true)
-</pre>
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Description: <td> The object to use for exporting the service. The
-      value should not be <code>null</code>. In the activatable case,
-      the call to <code>getEntry</code> will supply the activation ID in
-      the <code>data</code> argument. This entry is obtained at service
-      start and restart.
-  </table> <p>
-
-<table summary="Describes the settlerPool 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>settlerPool</code></font>
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Type: <td> {@link com.sun.jini.thread.TaskManager}
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Default: <td> <code>new </code>{@link
-      com.sun.jini.thread.TaskManager#TaskManager(int, long, float) TaskManager(
-      150 /* maxThreads */, 
-      15000 /* timeout */,
-      1.0 /* loadFactor */
-      )}
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-
-      Description: <td> The pool of threads used to settle outstanding
-      transactions. Outstanding transactions occur when 
-      {@link net.jini.core.transaction.TimeoutExpiredException TimeoutExpiredException} 
-      is thrown from versions of
-      {@link net.jini.core.transaction.Transaction#abort(long) abort} 
-      and
-      {@link net.jini.core.transaction.Transaction#commit(long) commit} 
-      that take a timeout parameter.
-      The {@link com.sun.jini.thread.TaskManager#terminate terminate}
-      method of this object will be called when the service is
-      destroyed. Obtained at service start and restart.
-  </table>
-
-<table summary="Describes the taskPool 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>taskPool</code></font>
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Type: <td> {@link com.sun.jini.thread.TaskManager}
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-      Default: <td> <code>new </code>{@link
-      com.sun.jini.thread.TaskManager#TaskManager(int, long, float) TaskManager(
-      50 /* maxThreads */, 
-      15000 /* timeout */,
-      3.0 /* loadFactor */
-      )}
-    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
-
-      Description: <td> The pool of threads used to settle 
-      transactions. 
-      The {@link com.sun.jini.thread.TaskManager#terminate terminate}
-      method of this object will be called when the service is
-      destroyed. Obtained at service start and restart.
-  </table>
-
-Mahalo passes its configuration when creating instances of the following
-configurable classes, which may support additional configuration
-entries: <p>
-
-<ul>
-<li> {@link net.jini.discovery.LookupDiscoveryManager}, used to discover
-     lookup services, as specified by the <a href="#discoveryManager">
-     <code>discoveryManager</code></a> configuration entry
-<li> {@link net.jini.lookup.JoinManager}, used to manage lookup service
-     registrations
-</ul> <p>
-
-<a name="access_control">
-<h2>Access Control Permission Targets</h2>
-</a>
-
-The following table lists the remote methods on Mahalo's proxy objects and
-the associated target names for enforcing access control using {@link
-com.sun.jini.mahalo.MahaloPermission}: <p>
-
-<table border="1" cellpadding="5"
-       summary="The proxy methods and associated target names for
-       MahaloPermission.">
-
-<tr> <th scope="col"> Proxy Method <th scope="col"> Target Name
-
-<!-- TransactionManager -->
-
-<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#create 
-                 TransactionManager.create}
-     <td> create
-<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#join 
-                 TransactionManager.join}
-     <td> join
-<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#getState 
-                 TransactionManager.getState}
-     <td> getState
-<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#commit 
-                 TransactionManager.commit}
-     <td> commit
-<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#abort 
-                 TransactionManager.abort}
-     <td> abort
-
-<!-- Lease and LeaseMap -->
-
-<tr> <td> {@link net.jini.core.lease.Lease#renew Lease.renew}
-     <td> renew
-<tr> <td> {@link net.jini.core.lease.Lease#cancel Lease.cancel}
-     <td> cancel
-<tr> <td> {@link net.jini.core.lease.LeaseMap#renewAll LeaseMap.renewAll}
-     <td> renewAll
-<tr> <td> {@link net.jini.core.lease.LeaseMap#cancelAll LeaseMap.cancelAll}
-     <td> cancelAll
-
-<!-- Administrable -->
-
-<tr> <td> {@link net.jini.admin.Administrable#getAdmin Administrable.getAdmin}
-     <td> getAdmin
-
-<!-- JoinAdmin -->
-
-<tr> <td> {@link net.jini.admin.JoinAdmin#getLookupAttributes
-		 JoinAdmin.getLookupAttributes}
-     <td> getLookupAttributes
-<tr> <td> {@link net.jini.admin.JoinAdmin#addLookupAttributes
-		 JoinAdmin.addLookupAttributes}
-     <td> addLookupAttributes
-<tr> <td> {@link net.jini.admin.JoinAdmin#modifyLookupAttributes
-		 JoinAdmin.modifyLookupAttributes}
-     <td> modifyLookupAttributes
-
-<tr> <td> {@link net.jini.admin.JoinAdmin#getLookupGroups
-		 JoinAdmin.getLookupGroups}
-     <td> getLookupGroups
-<tr> <td> {@link net.jini.admin.JoinAdmin#addLookupGroups
-		 JoinAdmin.addLookupGroups}
-     <td> addLookupGroups
-<tr> <td> {@link net.jini.admin.JoinAdmin#removeLookupGroups
-		 JoinAdmin.removeLookupGroups}
-     <td> removeLookupGroups
-<tr> <td> {@link net.jini.admin.JoinAdmin#setLookupGroups
-		 JoinAdmin.setLookupGroups}
-     <td> setLookupGroups
-
-<tr> <td> {@link net.jini.admin.JoinAdmin#getLookupLocators
-		 JoinAdmin.getLookupLocators}
-     <td> getLookupLocators
-<tr> <td> {@link net.jini.admin.JoinAdmin#addLookupLocators
-		 JoinAdmin.addLookupLocators}
-     <td> addLookupLocators
-<tr> <td> {@link net.jini.admin.JoinAdmin#removeLookupLocators
-		 JoinAdmin.removeLookupLocators}
-     <td> removeLookupLocators
-<tr> <td> {@link net.jini.admin.JoinAdmin#setLookupLocators
-		 JoinAdmin.setLookupLocators}
-     <td> setLookupLocators
-
-<!-- DestroyAdmin -->
-
-<tr> <td> {@link com.sun.jini.admin.DestroyAdmin#destroy DestroyAdmin.destroy}
-     <td> destroy
-
-<!-- ProxyTrust -->
-
-<tr> <td> {@link net.jini.security.proxytrust.ProxyTrust#getProxyVerifier
-		 ProxyTrust.getProxyVerifier}
-     <td> getProxyVerifier
-
-<!-- ServiceProxyAccessor -->
-
-<tr> <td> {@link com.sun.jini.start.ServiceProxyAccessor#getServiceProxy
-		 ServiceProxyAccessor.getServiceProxy}
-     <td> getServiceProxy
-
-</table> <p>
-
-<a name="logging">
-<h2>Loggers and Logging Levels</h2>
-</a>
-
-The Mahalo service implementation uses separate {@link
-java.util.logging.Logger}s, prefixed by <code>com.sun.jini.mahalo</code>, 
-for each type of information it logs. The following tables describe the
-type of information logged as well as the levels of information logged.
-<p>
-  <table border="1" cellpadding="5"
-	 summary="Describes logging performed by destroyLogger at different
-	 logging levels">
-
-  <caption halign="center" valign="top"><b><code>
-	   com.sun.jini.mahalo.destroy</code></b></caption>
-
-  <tr> <th scope="col"> Level <th scope="col"> Description
-
-  <tr> <td> {@link com.sun.jini.logging.Levels#HANDLED HANDLED} <td>
-  for exceptions handled during failed service destruction
-
-  <tr> <td> {@link java.util.logging.Level#FINEST FINEST} <td> for low level
-  operation tracing during service destruction
-
-  </table> <p>
-  
-  <table border="1" cellpadding="5"
-	 summary="Describes logging performed by initLogger at different
-	 logging levels">
-
-  <caption halign="center" valign="top"><b><code>
-	   com.sun.jini.mahalo.init</code></b></caption>
-
-  <tr> <th scope="col"> Level <th scope="col"> Description
-
-  <tr> <td> {@link java.util.logging.Level#SEVERE SEVERE} <td>
-  for problems that prevent service startup
-
-  <tr> <td> {@link java.util.logging.Level#CONFIG CONFIG} <td> 
-  for configuration access during service initialization
-
-  <tr> <td> {@link com.sun.jini.logging.Levels#HANDLED HANDLED} <td>
-  for exceptions handled during service initialization
-
-  <tr> <td> {@link java.util.logging.Level#FINEST FINEST} <td> 
-  for low level operation tracing during service initialization
-
-  </table> <p>
-
-  <table border="1" cellpadding="5"
-	 summary="Describes logging performed by operationsLogger at different
-	 logging levels">
-
-  <caption halign="center" valign="top"><b><code>
-	   com.sun.jini.mahalo.operations</code></b></caption>
-
-  <tr> <th scope="col"> Level <th scope="col"> Description
-
-  <tr> <td> {@link java.util.logging.Level#FINER FINER} <td> 
-  for method level tracing during service operation
-
-  </table> <p>
-  
-  <table border="1" cellpadding="5"
-	 summary="Describes logging performed by the participantLogger 
-	          at different logging levels">
-
-  <caption halign="center" valign="top"><b><code>
-	   com.sun.jini.mahalo.participant</code></b></caption>
-
-  <tr> <th scope="col"> Level <th scope="col"> Description
-
-  <tr> <td> {@link java.util.logging.Level#FINEST FINEST} <td> for low level
-  participant processing tracing (join, commit, abort, etc.)
-  
-  </table> <p>
-  
-  <table border="1" cellpadding="5"
-	 summary="Describes logging performed by the persistenceLogger 
-	          at different logging levels">
-
-  <caption halign="center" valign="top"><b><code>
-	   com.sun.jini.mahalo.persistence</code></b></caption>
-
-  <tr> <th scope="col"> Level <th scope="col"> Description
-  
-  <tr> <td> {@link java.util.logging.Level#SEVERE SEVERE} <td>
-  for problems that prevent service operation
-
-  <tr> <td> {@link java.util.logging.Level#WARNING WARNING} <td> 
-  for problems making modifications to persistent storage, unexpected
-  internal errors
-  
-  <tr> <td> {@link com.sun.jini.logging.Levels#HANDLED HANDLED} <td>
-  for exceptions handled when persisting service state
-
-  <tr> <td> {@link java.util.logging.Level#FINEST FINEST} <td> 
-  for low level persistence tracing
-  
-  </table> <p>
-
-  <table border="1" cellpadding="5"
-	 summary="Describes logging performed by the startup 
-	          at different logging levels">
-
-  <caption halign="center" valign="top"><b><code>
-	   com.sun.jini.mahalo.startup</code></b></caption>
-
-  <tr> <th scope="col"> Level <th scope="col"> Description
-
-  <tr> <td> {@link java.util.logging.Level#INFO INFO} <td> for successful
-  service creation message.
-  
-  </table> <p>
-
-  <table border="1" cellpadding="5"
-	 summary="Describes logging performed by the transactionsLogger 
-	          at different logging levels">
-
-  <caption halign="center" valign="top"><b><code>
-	   com.sun.jini.mahalo.transactions</code></b></caption>
-
-  <tr> <th scope="col"> Level <th scope="col"> Description
-
-  <tr> <td> {@link java.util.logging.Level#WARNING WARNING} <td>
-  for internal errors managing transactions 
-  
-  <tr> <td> {@link com.sun.jini.logging.Levels#HANDLED HANDLED} <td>
-  for indefinite exceptions managing transactions
-    
-  <tr> <td> {@link java.util.logging.Level#FINEST FINEST} <td> for low level
-  transaction operation tracing (creation, commit, abort, etc.) 
-  
-  </table> <p>
-
-See the {@link com.sun.jini.logging.LogManager} class for one way to use
-the <code>HANDLED</code> logging level in standard logging configuration
-files. <p>
-
-<a name="examples">
-<h2>Examples for Running Mahalo</h2>
-</a>
-
-This section provides examples of running Mahalo 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="#persistent_jrmp">Persistent</a>
-     <li> <a href="#activatable_jrmp">Activatable</a>
-     </ul>
-<li> Jini extensible remote invocation (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>
-
-<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 host name is <var><b>your_host</b></var>
-<li> The local lookup group name is <var><b>your.group</b></var>
-<li> The HTTP server for download JAR files is running on
-     <var><b>your_host</b></var> 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
-     {@link com.sun.jini.tool.ClassServer} 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
-     <var><b>your_host</b></var>. You can use the {@link
-     com.sun.jini.phoenix} implementation for this purpose.
-</ul> <p>
-
-Throughout the example, items in <var><b>bold</b></var> need to be
-customized for your local environment.
-
-<a name="transient_jrmp">
-<h3>Starting Transient Mahalo using JRMP</h3>
-</a>
-
-To run a transient Mahalo, which does not store any information
-persistently or use the activation system to restart itself, using JRMP
-for remote communication, run the following command. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=start-transient-jrmp-mahalo.sh -->
-java -Djava.security.policy=<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-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-mahalo.config</a>
-<!-- cut_end -->
-</pre>
-</blockquote> <p>
-
-This configuration uses the following files.
-
-<a name="jsk_all_policy">
-<h4>File <var><b>config_dir</b></var>/jsk-all.policy</h4>
-</a>
-
-Use this security policy file for starting and running all Mahalo
-configurations. This file grants all permissions to local code included
-in the <code>lib</code> subdirectory of the Apache River release installation.<p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=config_dir/jsk-all.policy -->
-grant codebase "file:<var><b>install_dir</b></var>/lib/*" {
-    permission java.security.AllPermission;
-};
-<!-- cut_end -->
-</pre>
-</blockquote>
-
-<a name="start_transient_jrmp_config">
-<h4>File <var><b>config_dir</b></var>/start-transient-jrmp-mahalo.config</h4>
-</a>
-
-Use this configuration source file to start transient Mahalo using
-JRMP. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=config_dir/start-transient-jrmp-mahalo.config -->
-import com.sun.jini.start.NonActivatableServiceDescriptor;
-import com.sun.jini.start.ServiceDescriptor;
-
-com.sun.jini.start {
-    private static codebase = "http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/mahalo-dl.jar"
-	+ " http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/jsk-dl.jar";
-    private static policy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>";
-    private static classpath = "<var><b>install_dir</b></var>/lib/mahalo.jar";
-    private static config = "<a href="#transient_jrmp_config"><var><b>config_dir</b></var>/transient-jrmp-mahalo.config</a>";
-
-    static serviceDescriptors = new ServiceDescriptor[] {
-	new NonActivatableServiceDescriptor(
-	    codebase, policy, classpath,
-	    "com.sun.jini.mahalo.TransientMahaloImpl",
-	    new String[] { config })
-    };
-}
-<!-- cut_end -->
-</pre>
-</blockquote>
-
-<a name="transient_jrmp_config">
-<h4>File <var><b>config_dir</b></var>/transient-jrmp-mahalo.config</h4>
-</a>
-
-Use this configuration source file to run transient Mahalo using JRMP. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=config_dir/transient-jrmp-mahalo.config -->
-import net.jini.jrmp.JrmpExporter;
-
-com.sun.jini.mahalo {
-    initialLookupGroups = new String[] { "<var><b>your.group</b></var>" };
-    serverExporter = new JrmpExporter();
-}
-<!-- cut_end -->
-</pre>
-</blockquote>
-
-<a name="persistent_jrmp">
-<h3>Starting Persistent Mahalo using JRMP</h3>
-</a>
-
-To run a persistent Mahalo, which stores information persistently but does
-not use the activation system to restart itself, using JRMP for remote
-communication, run the following command. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=start-persistent-jrmp-mahalo.sh -->
-java -Djava.security.policy=<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a> \
-     -jar <var><b>install_dir</b></var>/lib/start.jar \
-     <a href="#start_persistent_jrmp_config"><var><b>config_dir</b></var>/start-persistent-jrmp-mahalo.config</a>
-<!-- cut_end -->
-</pre>
-</blockquote> <p>
-
-<b>Note:</b> Because JRMP does not provide a convenient way to specify
-the same object ID each time a given object is exported, this
-configuration is only useful for debugging -- an existing service proxy
-cannot be used after the service is restarted. <p>
-
-This configuration uses the following additional files.
-
-<a name="start_persistent_jrmp_config">
-<h4>File <var><b>config_dir</b></var>/start-persistent-jrmp-mahalo.config</h4>
-</a>
-
-Use this configuration source file to start persistent Mahalo using
-JRMP. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=config_dir/start-persistent-jrmp-mahalo.config -->
-import com.sun.jini.start.NonActivatableServiceDescriptor;
-import com.sun.jini.start.ServiceDescriptor;
-
-com.sun.jini.start {
-    private static codebase = "http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/mahalo-dl.jar"
-	+ " http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/jsk-dl.jar";
-    private static policy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>";
-    private static classpath = "<var><b>install_dir</b></var>/lib/mahalo.jar";
-    private static config = "<a href="#persistent_jrmp_config"><var><b>config_dir</b></var>/persistent-jrmp-mahalo.config</a>";
-
-    static serviceDescriptors = new ServiceDescriptor[] {
-	new NonActivatableServiceDescriptor(
-	    codebase, policy, classpath,
-	    "com.sun.jini.mahalo.NonActivatableMahaloImpl",
-	    new String[] { config })
-    };
-}
-<!-- cut_end -->
-</pre>
-</blockquote>
-
-<a name="persistent_jrmp_config">
-<h4>File <var><b>config_dir</b></var>/persistent-jrmp-mahalo.config</h4>
-</a>
-
-Use this configuration source file to run persistent Mahalo using
-JRMP. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=config_dir/persistent-jrmp-mahalo.config -->
-import net.jini.jrmp.JrmpExporter;
-
-com.sun.jini.mahalo {
-    initialLookupGroups = new String[] { "<var><b>your.group</b></var>" };
-    persistenceDirectory = "<var><b>config_dir</b></var>/mahalo.log";
-    serverExporter = new JrmpExporter();
-}
-<!-- cut_end -->
-</pre>
-</blockquote>
-
-<a name="activatable_jrmp">
-<h3>Starting Activatable Mahalo using JRMP</h3>
-</a>
-
-To run an activatable Mahalo, which stores information persistently and
-uses the activation system to restart itself, using JRMP for remote
-communication, run the following command. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=start-activatable-jrmp-mahalo.sh -->
-java -Djava.security.policy=<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a> \
-     -jar <var><b>install_dir</b></var>/lib/start.jar \
-     <a href="#start_activatable_jrmp_config"><var><b>config_dir</b></var>/start-activatable-jrmp-mahalo.config</a>
-<!-- cut_end -->
-</pre>
-</blockquote> <p>
-
-You should remove the <var><b>config_dir</b></var>/group.log directory
-before running this command. Note that the activation system will
-restart the activatable Mahalo service as needed until Mahalo is
-shutdown. <p>
-
-Remember to remove the <var><b>config_dir</b></var>/mahalo.log directory
-before running this command if you want Mahalo to forget registrations and
-settings made in previous invocations. <p>
-
-This configuration uses the following additional files.
-
-<a name="start_activatable_jrmp_config">
-<h4>File <var><b>config_dir</b></var>/start-activatable-jrmp-mahalo.config</h4>
-</a>
-
-Use this configuration source file to start activatable Mahalo using
-JRMP. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=config_dir/start-activatable-jrmp-mahalo.config -->
-import com.sun.jini.start.ServiceDescriptor;
-import com.sun.jini.start.SharedActivatableServiceDescriptor;
-import com.sun.jini.start.SharedActivationGroupDescriptor;
-
-com.sun.jini.start {
-    private static mahaloCodebase = "http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/mahalo-dl.jar"
-	+ " http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/jsk-dl.jar";
-    private static mahaloPolicy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>";
-    private static mahaloClasspath = "<var><b>install_dir</b></var>/lib/mahalo.jar";
-    private static mahaloConfig = "<a href="#activatable_jrmp_config"><var><b>config_dir</b></var>/activatable-jrmp-mahalo.config</a>";
-
-    private static groupPolicy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>";
-    private static groupClasspath = "<var><b>install_dir</b></var>/lib/sharedvm.jar";
-    private static groupPersistenceDirectory = "<var><b>config_dir</b></var>/group.log";
-
-    static serviceDescriptors = new ServiceDescriptor[] {
-	new SharedActivationGroupDescriptor(
-	    groupPolicy, groupClasspath, groupPersistenceDirectory,
-	    null /* serverCommand */,
-	    null /* serverOptions */,
-	    null /* serverProperties */),
-	new SharedActivatableServiceDescriptor(
-	    mahaloCodebase, mahaloPolicy, mahaloClasspath,
-	    "com.sun.jini.mahalo.ActivatableMahaloImpl",
-	    groupPersistenceDirectory,
-	    new String[] { mahaloConfig },
-	    true /* restart */)
-    };
-}
-<!-- cut_end -->
-</pre>
-</blockquote>
-
-<a name="activatable_jrmp_config">
-<h4>File <var><b>config_dir</b></var>/activatable-jrmp-mahalo.config</h4>
-</a>
-
-Use this configuration source file to run activatable Mahalo using
-JRMP. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=config_dir/activatable-jrmp-mahalo.config -->
-import java.rmi.activation.ActivationID;
-import net.jini.jrmp.JrmpExporter;
-
-com.sun.jini.mahalo {
-    initialLookupGroups = new String[] { "<var><b>your.group</b></var>" };
-    persistenceDirectory = "<var><b>config_dir</b></var>/mahalo.log";
-    serverExporter = new JrmpExporter((ActivationID) $data, 0);
-}
-<!-- cut_end -->
-</pre>
-</blockquote>
-
-<a name="stop_activatable">
-<h3>Stopping Activatable Mahalo</h3>
-</a>
-
-To destroy the activation group running an activatable Mahalo, under
-a JRMP or Jini ERI configuration, run the following command. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=stop-activatable-mahalo.sh -->
-java -Djava.security.policy=<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a> \
-     -jar <var><b>install_dir</b></var>/lib/destroy.jar \
-     <a href="#stop_activatable_config"><var><b>config_dir</b></var>/stop-activatable-mahalo.config</a>
-<!-- cut_end -->
-</pre>
-</blockquote> <p>
-
-Running this command will remove the
-<var><b>config_dir</b></var>/group.log directory. <p>
-
-Note that this command does not actually destroy the service itself, but
-just destroys the activation group the service is running in. You may
-want to first destroy the service using Mahalo's administrable interface,
-or to remove the <var><b>config_dir</b></var>/mahalo.log directory after
-destroying the activation group. <p>
-
-This command uses the following additional file.
-
-<a name="stop_activatable_config">
-<h4>File <var><b>config_dir</b></var>/stop-activatable-mahalo.config</h4>
-</a>
-
-Use this configuration source file to destroy the activation group for
-an activatable Mahalo. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=config_dir/stop-activatable-mahalo.config -->
-import com.sun.jini.start.ServiceDescriptor;
-import com.sun.jini.start.SharedActivatableServiceDescriptor;
-
-com.sun.jini.start {
-    private static codebase = "http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/group-dl.jar";
-    private static policy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>";
-    private static classpath = "<var><b>install_dir</b></var>/lib/group.jar";
-    private static persistenceDirectory = "<var><b>config_dir</b></var>/group.log";
-
-    static serviceDestructors = new ServiceDescriptor[] {
-	new SharedActivatableServiceDescriptor(
-	    codebase, policy, classpath,
-	    "com.sun.jini.start.SharedGroupImpl",
-	    persistenceDirectory,
-	    null /* config */,
-	    false /* restart */)
-    };
-}
-<!-- cut_end -->
-</pre>
-</blockquote>
-
-<a name="transient">
-<h3>Starting Transient Mahalo using Jini ERI</h3>
-</a>
-
-To run a transient Mahalo, which does not store any information
-persistently or use the activation system to restart itself, using Jini
-ERI for remote communication, run the following command. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=start-transient-mahalo.sh -->
-java -Djava.security.policy=<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a> \
-     -jar <var><b>install_dir</b></var>/lib/start.jar \
-     <a href="#start_transient_config"><var><b>config_dir</b></var>/start-transient-mahalo.config</a>
-<!-- cut_end -->
-</pre>
-</blockquote> <p>
-
-This configuration uses the following additional files.
-
-<a name="start_transient_config">
-<h4>File <var><b>config_dir</b></var>/start-transient-mahalo.config</h4>
-</a>
-
-Use this configuration source file to start transient Mahalo using
-Jini ERI. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=config_dir/start-transient-mahalo.config -->
-import com.sun.jini.start.NonActivatableServiceDescriptor;
-import com.sun.jini.start.ServiceDescriptor;
-
-com.sun.jini.start {
-    private static codebase = "http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/mahalo-dl.jar"
-	+ " http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/jsk-dl.jar";
-    private static policy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>";
-    private static classpath = "<var><b>install_dir</b></var>/lib/mahalo.jar";
-    private static config = "<a href="#transient_config"><var><b>config_dir</b></var>/transient-mahalo.config</a>";
-
-    static serviceDescriptors = new ServiceDescriptor[] {
-	new NonActivatableServiceDescriptor(
-	    codebase, policy, classpath,
-	    "com.sun.jini.mahalo.TransientMahaloImpl",
-	    new String[] { config })
-    };
-}
-<!-- cut_end -->
-</pre>
-</blockquote>
-
-<a name="transient_config">
-<h4>File <var><b>config_dir</b></var>/transient-mahalo.config</h4>
-</a>
-
-Use this configuration source file to run transient Mahalo using Jini
-ERI. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=config_dir/transient-mahalo.config -->
-com.sun.jini.mahalo {
-    initialLookupGroups = new String[] { "<var><b>your.group</b></var>" };
-}
-<!-- cut_end -->
-</pre>
-</blockquote>
-
-<a name="persistent">
-<h3>Starting Persistent Mahalo using Jini ERI</h3>
-</a>
-
-To run a persistent Mahalo, which stores information persistently but does
-not use the activation system to restart itself, using Jini ERI for
-remote communication, run the following command. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=start-persistent-mahalo.sh -->
-java -Djava.security.policy=<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a> \
-     -jar <var><b>install_dir</b></var>/lib/start.jar \
-     <a href="#start_persistent_config"><var><b>config_dir</b></var>/start-persistent-mahalo.config</a>
-<!-- cut_end -->
-</pre>
-</blockquote> <p>
-
-This configuration uses the following additional files.
-
-<a name="start_persistent_config">
-<h4>File <var><b>config_dir</b></var>/start-persistent-mahalo.config</h4>
-</a>
-
-Use this configuration source file to start persistent Mahalo using Jini
-ERI. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=config_dir/start-persistent-mahalo.config -->
-import com.sun.jini.start.NonActivatableServiceDescriptor;
-import com.sun.jini.start.ServiceDescriptor;
-
-com.sun.jini.start {
-    private static codebase = "http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/mahalo-dl.jar"
-	+ " http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/jsk-dl.jar";
-    private static policy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>";
-    private static classpath = "<var><b>install_dir</b></var>/lib/mahalo.jar";
-    private static config = "<a href="#persistent_config"><var><b>config_dir</b></var>/persistent-mahalo.config</a>";
-
-    static serviceDescriptors = new ServiceDescriptor[] {
-	new NonActivatableServiceDescriptor(
-	    codebase, policy, classpath,
-	    "com.sun.jini.mahalo.NonActivatableMahaloImpl",
-	    new String[] { config })
-    };
-}
-<!-- cut_end -->
-</pre>
-</blockquote>
-
-<a name="persistent_config">
-<h4>File <var><b>config_dir</b></var>/persistent-mahalo.config</h4>
-</a>
-
-Use this configuration source file to run persistent Mahalo using Jini
-ERI. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=config_dir/persistent-mahalo.config -->
-import net.jini.id.UuidFactory;
-import net.jini.jeri.BasicILFactory;
-import net.jini.jeri.BasicJeriExporter;
-import net.jini.jeri.tcp.TcpServerEndpoint;
-
-com.sun.jini.mahalo {
-    initialLookupGroups = new String[] { "<var><b>your.group</b></var>" };
-    persistenceDirectory = "<var><b>config_dir</b></var>/mahalo.log";
-    serverExporter = new BasicJeriExporter(
-	TcpServerEndpoint.getInstance(<var><b>obj_port</b></var>),
-	new BasicILFactory(),
-	false,
-	true,
-	UuidFactory.create("<var><b>obj_UUID_string</b></var>"));
-}
-<!-- cut_end -->
-</pre>
-</blockquote>
-
-The <var><b>obj_port</b></var> is the fixed TCP port to use for
-listening for requests for this object. The
-<var><b>obj_UUID_string</b></var> is the {@linkplain net.jini.id.Uuid
-universally unique ID} for the exported object. These IDs have the form
-<code>"01234567-89ab-cdef-0123-456789abcdef"</code>. <p>
-
-Remember to remove the <var><b>config_dir</b></var>/mahalo.log directory
-before restarting persistent Mahalo if you want it to forget registrations
-and settings made in previous invocations.
-
-<a name="activatable">
-<h3>Starting Activatable Mahalo using Jini ERI</h3>
-</a>
-
-To run an activatable Mahalo, which stores information persistently and
-uses the activation system to restart itself, using Jini ERI for remote
-communication, run the following command. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=start-activatable-mahalo.sh -->
-java -Djava.security.policy=<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a> \
-     -jar <var><b>install_dir</b></var>/lib/start.jar \
-     <a href="#start_activatable_config"><var><b>config_dir</b></var>/start-activatable-mahalo.config</a>
-<!-- cut_end -->
-</pre>
-</blockquote> <p>
-
-You should remove the <var><b>config_dir</b></var>/group.log directory
-before running this command. Note that the activation system will
-restart the activatable Mahalo service as needed until Mahalo is
-shutdown. <p>
-
-Remember to remove the <var><b>config_dir</b></var>/mahalo.log directory
-before running this command if you want Mahalo to forget registrations and
-settings made in previous invocations. <p>
-
-This configuration uses the following additional files.
-
-<a name="start_activatable_config">
-<h4>File <var><b>config_dir</b></var>/start-activatable-mahalo.config</h4>
-</a>
-
-Use this configuration source file to start activatable Mahalo using Jini
-ERI. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=config_dir/start-activatable-mahalo.config -->
-import com.sun.jini.start.ServiceDescriptor;
-import com.sun.jini.start.SharedActivatableServiceDescriptor;
-import com.sun.jini.start.SharedActivationGroupDescriptor;
-
-com.sun.jini.start {
-    private static mahaloCodebase = "http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/mahalo-dl.jar"
-	+ " http://<var><b>your_host</b></var>:<var><b>http_port</b></var>/jsk-dl.jar";
-    private static mahaloPolicy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>";
-    private static mahaloClasspath = "<var><b>install_dir</b></var>/lib/mahalo.jar";
-    private static mahaloConfig = "<a href="#activatable_config"><var><b>config_dir</b></var>/activatable-mahalo.config</a>";
-
-    private static groupPolicy = "<a href="#jsk_all_policy"><var><b>config_dir</b></var>/jsk-all.policy</a>";
-    private static groupClasspath = "<var><b>install_dir</b></var>/lib/sharedvm.jar";
-    private static groupPersistenceDirectory = "<var><b>config_dir</b></var>/group.log";
-
-    static serviceDescriptors = new ServiceDescriptor[] {
-	new SharedActivationGroupDescriptor(
-	    groupPolicy, groupClasspath, groupPersistenceDirectory,
-	    null /* serverCommand */,
-	    null /* serverOptions */,
-	    null /* serverProperties */),
-	new SharedActivatableServiceDescriptor(
-	    mahaloCodebase, mahaloPolicy, mahaloClasspath,
-	    "com.sun.jini.mahalo.ActivatableMahaloImpl",
-	    groupPersistenceDirectory,
-	    new String[] { mahaloConfig },
-	    true /* restart */)
-    };
-}
-<!-- cut_end -->
-</pre>
-</blockquote>
-
-<a name="activatable_config">
-<h4>File <var><b>config_dir</b></var>/activatable-mahalo.config</h4>
-</a>
-
-Use this configuration source file to run activatable Mahalo using Jini
-ERI. <p>
-
-<blockquote>
-<pre>
-<!-- cut_begin=config_dir/activatable-mahalo.config -->
-com.sun.jini.mahalo {
-    initialLookupGroups = new String[] { "<var><b>your.group</b></var>" };
-    persistenceDirectory = "<var><b>config_dir</b></var>/mahalo.log";
-}
-<!-- cut_end -->
-</pre>
-</blockquote>
-
-@see net.jini.core.transaction.server.TransactionManager
-
-</BODY>
-</HTML>
+<!--
+ ! 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.
+ !-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+
+
+</head>
+<body bgcolor="white">
+
+Provides implementations of the 
+{@linkplain net.jini.core.transaction.server.TransactionManager} service.
+Three implementations are available for use with the 
+{@link com.sun.jini.start} package:
+
+<ul>
+<li> <code>com.sun.jini.mahalo.ActivatableMahaloImpl</code> - an
+     activatable, persistent implementation, suitable for use with
+     {@link com.sun.jini.start.SharedActivatableServiceDescriptor}
+<li> <code>com.sun.jini.mahalo.NonActivatableMahaloImpl</code> - a
+     non-activatable, persistent implementation, suitable for use with
+     {@link com.sun.jini.start.NonActivatableServiceDescriptor}
+<li> <code>com.sun.jini.mahalo.TransientMahaloImpl</code> - a
+     transient implementation, also suitable for use with
+     {@link com.sun.jini.start.NonActivatableServiceDescriptor}
+</ul>
+
+<p>
+The JAR file <code>mahalo.jar</code>, included in the <code>lib</code>
+subdirectory of the Apache River release
+installation, contains the classes for the three Mahalo service
+implementations. The <code>mahalo-dl.jar</code> 
+and <code>jsk-dl.jar</code> files in the <code>lib-dl</code> subdirectory
+contain
+the classes needed in the codebase for its downloaded proxies. None of the
+JAR files include classes from <code>jsk-platform.jar</code>, which are
+included by the service starter's <code>start.jar</code> JAR file, and
+need to be included in the codebase of clients.
+<p>
+
+The object returned by the {@link net.jini.admin.Administrable#getAdmin
+Administrable.getAdmin} method on a Mahalo service proxy implements {@link
+net.jini.admin.JoinAdmin} and {@link com.sun.jini.admin.DestroyAdmin}. 
+<p>
+
+This document provides the following information about Mahalo: 
+<ul>
+<li> <a href="#configuration">Configuring Mahalo</a>
+<li> <a href="#access_control">Access Control Permission Targets</a>
+<li> <a href="#logging">Logging</a>
+<li> <a href="#examples">Examples for Running Mahalo</a>
+</ul> 
+<p>
+
+<a name="configuration">
+<h2>Configuring Mahalo</h2>
+</a>
+<p>
+The Mahalo service implementation obtains its configuration by calling
+{@link net.jini.config.ConfigurationProvider#getInstance(String[], ClassLoader) 
+ConfigurationProvider.getInstance} with the specified
+<i>configOptions</i> and the class loader for the implementation
+class.
+</p>
+<p>
+The implementation supports the following configuration entries, with
+component <code>com.sun.jini.mahalo</code>: </p>
+
+  <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> {@link net.jini.security.ProxyPreparer}
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>
+        new {@link net.jini.security.BasicProxyPreparer}()
+        </code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Description: <td> The proxy preparer for the service's activation
+      ID. The value should not be <code>null</code>. This entry is
+      obtained at service start and restart. This entry is only used by
+      the activatable implementation. <p>
+
+      Clients call the {@link java.rmi.activation.ActivationID#activate
+      activate} method on instances of {@link
+      java.rmi.activation.ActivationID} when they need to reactivate the
+      service.
+  </table>
+
+  <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> {@link net.jini.security.ProxyPreparer}
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>
+        new {@link net.jini.security.BasicProxyPreparer}()</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Description: <td> The proxy preparer for the proxy for the
+      activation system. The value should not be <code>null</code>. This
+      entry is obtained at service start and restart. This entry is only
+      used by the activatable implementation. <p>
+
+      The service calls the {@link
+      java.rmi.activation.ActivationSystem#unregisterObject
+      unregisterObject} method on the {@link
+      java.rmi.activation.ActivationSystem} when the service is
+      destroyed.
+  </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> {@link net.jini.discovery.DiscoveryManagement}
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td>
+<pre>
+new {@link net.jini.discovery.LookupDiscoveryManager}(
+    {@link net.jini.discovery.DiscoveryGroupManagement#NO_GROUPS},
+    null,  // locators
+    null,  // listener
+    this)  // config
+</pre>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Description: <td> Supplies an object used to discover the lookup
+      services with which this service should register. The value should
+      not be <code>null</code>. The object returned must also implement
+      {@link net.jini.discovery.DiscoveryGroupManagement} and {@link
+      net.jini.discovery.DiscoveryLocatorManagement}, and should be
+      configured initially to discover no groups or specific lookup
+      services. This entry is obtained at service start and restart.
+  </table>
+  
+  <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> <code>{@link net.jini.core.entry.Entry}[]</code>
+    <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> Entries to include in the set of attributes the
+      service supplies when registering with lookup services, in
+      addition to {@link net.jini.lookup.entry.ServiceInfo} and {@link
+      com.sun.jini.lookup.entry.BasicServiceType} instances provided by
+      the service. An empty array or <code>null</code> specifies that
+      only the service-provided attributes should be added. The array
+      must not contain <code>null</code> elements. This entry is
+      obtained and used when the service is first started. Following
+      initial startup, the set of attributes is controlled though the
+      service's {@link net.jini.admin.JoinAdmin} administrable
+      interface.
+  </table>
+
+  <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> <code>String[]</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>new String[] { "" } /* public group */</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Description: <td> The names of the lookup groups that the service
+      should discover and join. An empty array specifies that no groups
+      should be joined. A <code>null</code> value specifies that all
+      groups should be joined. Otherwise, the value specifies the names
+      of the groups to join. The array must not contain
+      <code>null</code> elements. This entry is obtained and used when
+      the service is first started. Following initial startup, the set
+      of lookup groups is controlled through the service's {@link
+      net.jini.admin.JoinAdmin} administrable interface.
+  </table>
+
+  <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> <code>{@link net.jini.core.discovery.LookupLocator}[]</code>
+    <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> The locations of specific lookup services that
+      the service should discover and join. An empty array or
+      <code>null</code> specifies that no specific lookup services
+      should be joined. The array must not contain <code>null</code>
+      elements. This entry is obtained and used when the service is
+      first started. Following initial startup, the set of specific
+      lookup services is controlled through the service's {@link
+      net.jini.admin.JoinAdmin} administrable interface. <p>
+
+      The <code>LookupLocator</code> instances specified in this entry
+      will not be prepared by the proxy preparer specified in the
+      <code>locatorPreparer</code> entry, and will only be prepared by
+      the preparer in the <code>recoveredLocatorPreparer</code> entry
+      when they are being recovered.
+  </table>
+
+  <table summary="Describes the leasePeriodPolicy 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>
+      leasePeriodPolicy</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> {@link com.sun.jini.landlord.LeasePeriodPolicy}
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td>
+<pre>
+new {@link com.sun.jini.landlord.FixedLeasePeriodPolicy}(
+    3 * 60 * 60 * 1000L,  // max = 3 hours
+    60 * 60 * 1000L)      // default = 1 hour
+</pre>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Description: <td> The policy for calculating lease grants and
+      renewals. The value should not be <code>null</code>. The default
+      grants leases with a maximum duration of 3 hours and a default
+      duration of 1 hour. This entry is obtained at service start and
+      restart.
+  </table>
+
+  <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> {@link javax.security.auth.login.LoginContext}
+    <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 not <code>null</code>, specifies the JAAS
+      login context to use for performing a JAAS login and supplying the
+      {@link javax.security.auth.Subject} to use when running the
+      service. If <code>null</code>, no JAAS login is performed. This
+      entry is obtained at service start and restart.
+  </table>
+
+  <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> {@link net.jini.security.ProxyPreparer}
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>
+        new {@link net.jini.security.BasicProxyPreparer}()
+	</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Description: <td> Prepares {@link
+      net.jini.core.discovery.LookupLocator} instances 
+      passed to the {@link net.jini.admin.JoinAdmin} methods. The value
+      should not be <code>null</code>. When registering with lookup
+      services, this service may call or use the constraints assigned to
+      the {@link net.jini.core.discovery.LookupLocator#getRegistrar
+      getRegistrar} methods of <code>LookupLocator</code> instances
+      returned from this preparer. This entry is obtained at service
+      start and restart. <p>
+
+      This preparer needs to perform all operations needed to use a
+      newly received lookup locator, typically including verifying trust
+      in the lookup locator and setting constraints. The prepared lookup
+      locator will be retained by the service in its persistent
+      store. <p>
+
+      The <code>LookupLocator</code> instances obtained from the
+      <code>initialLookupLocators</code> configuration entry will not be
+      prepared by this preparer.
+  </table>
+
+<table summary="Describes the participantPreparer 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>participantPreparer</code></font>
+
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> {@link net.jini.security.ProxyPreparer}
+
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>new {@link net.jini.security.BasicProxyPreparer}()
+                    </code>
+
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Description:
+        <td> Preparer for 
+	     {@link net.jini.core.transaction.server.TransactionParticipant}
+	     proxies that have joined transactions from this service 
+	     via the {@link 
+	     net.jini.core.transaction.server.TransactionManager#join join}
+	     method. 
+	     This preparer is
+             used to prepare proxies only when they initially
+             join with this service. 
+             The value should not
+             be <code>null</code>. The preparer must return a listener 
+	     which is equal to the original listener as determined by 
+	     {@link java.lang.Object#equals Object.equals}. 
+	     This entry is obtained at service start and restart. <p>
+	     
+             This preparer needs to perform all operations needed to use a
+             newly received participant, 
+	     typically including verifying trust in
+             the participant proxy, granting permissions, and setting
+             constraints. The prepared participant will be retained 
+	     by the service in its persistent store. <p>
+	     
+	     The service (potentially) calls the 
+             {@link net.jini.core.transaction.server.TransactionParticipant#abort abort}, 
+             {@link net.jini.core.transaction.server.TransactionParticipant#commit commit}, 
+             {@link net.jini.core.transaction.server.TransactionParticipant#prepare prepare}, and
+             {@link net.jini.core.transaction.server.TransactionParticipant#prepareAndCommit prepareAndCommit}, 
+	     methods.
+   </table>
+
+  <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> <code>String</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <em>Required for persistent implementations: no
+      default</em>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Description: <td> The directory where the service's persistent
+      state is recorded. The value should not be <code>null</code>. This
+      entry is obtained at service start and restart. This entry is
+      required for persistent implementations and is otherwise not used.
+  </table>
+  
+  <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> {@link net.jini.security.ProxyPreparer}
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>
+        new {@link net.jini.security.BasicProxyPreparer}()
+	</code>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Description: <td> Prepares {@link
+      net.jini.core.discovery.LookupLocator} instances for use when they
+      are recovered from persistent storage. The value should not be
+      <code>null</code>. When registering with lookup services, this
+      service may call or use the constraints assigned to the {@link
+      net.jini.core.discovery.LookupLocator#getRegistrar getRegistrar}
+      methods of <code>LookupLocator</code> instances returned from this
+      preparer. This entry is obtained at service start and
+      restart. This entry is only used by persistent
+      implementations. <p>
+
+      This preparer needs to perform only those operations whose results
+      are not retained in 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>
+
+      The <code>LookupLocator</code> instances obtained from the
+      <code>initialLookupLocators</code> configuration entry will not be
+      prepared by this preparer until they are being recovered.
+  </table>
+
+
+  <table summary="Describes the recoveredParticipantPreparer 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>recoveredParticipantPreparer</code></font>
+
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> {@link net.jini.security.ProxyPreparer}
+
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>new {@link net.jini.security.BasicProxyPreparer}()
+                    </code>
+
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Description:
+        <td> Preparer for recovered 
+	     {@link net.jini.core.transaction.server.TransactionParticipant}
+	     proxies that have been previously registered and prepared
+	     with this service (via the {@link 
+	     net.jini.core.transaction.server.TransactionManager#join 
+	     TransactionManager.join} method). <P>
+	     This preparer needs to perform only those operations whose results are 
+	     not retained in the participant itself, but need to be performed in 
+	     the environment in which the participant is unmarshalled,
+	     typically just granting permissions. <P>
+	     The service (potentially) calls the
+	     {@link net.jini.core.transaction.server.TransactionParticipant#abort abort}, 
+	     {@link net.jini.core.transaction.server.TransactionParticipant#commit commit}, 
+	     {@link net.jini.core.transaction.server.TransactionParticipant#prepare prepare}, and 
+	     {@link net.jini.core.transaction.server.TransactionParticipant#prepareAndCommit prepareAndCommit}, 
+	     methods on these proxies.
+  </table>
+    
+  <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> {@link net.jini.export.Exporter}
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td>
+<pre>
+// Activatable implementation
+new {@link net.jini.activation.ActivationExporter}(
+    <i>activationID</i>,
+    new {@link net.jini.jeri.BasicJeriExporter}(
+        {@link net.jini.jeri.tcp.TcpServerEndpoint#getInstance TcpServerEndpoint.getInstance}(0),
+        new {@link net.jini.jeri.BasicILFactory}(), false, true))
+// Non-activatable implementations
+new {@link net.jini.jeri.BasicJeriExporter}(
+    {@link net.jini.jeri.tcp.TcpServerEndpoint#getInstance TcpServerEndpoint.getInstance}(0),
+    new {@link net.jini.jeri.BasicILFactory}(),false, true)
+</pre>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Description: <td> The object to use for exporting the service. The
+      value should not be <code>null</code>. In the activatable case,
+      the call to <code>getEntry</code> will supply the activation ID in
+      the <code>data</code> argument. This entry is obtained at service
+      start and restart.
+  </table> <p>
+
+<table summary="Describes the settlerPool 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>settlerPool</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> {@link java.util.concurrent/ExecutorService ExecutorService}
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>new </code>{@link
+      java.util.concurrent/ThreadPoolExecutor ThreadPoolExecutor}(
+        15 * processor cores /* core pool size */, 
+        15 * processor cores /* ignored */
+      15000 /* timeout */,
+        TimeUnit.MILLISECONDS,
+        new LinkedBlockingQueue(), /* Unbounded Queue */
+        new NamedThreadFactory("TxnMgr settlerPool", false)
+      )
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> The pool of threads used to settle outstanding
+      transactions. Outstanding transactions occur when 
+      {@link net.jini.core.transaction.TimeoutExpiredException TimeoutExpiredException} 
+      is thrown from versions of
+      {@link net.jini.core.transaction.Transaction#abort(long) abort} 
+      and
+      {@link net.jini.core.transaction.Transaction#commit(long) commit} 
+      that take a timeout parameter.
+      The {@link java.util.concurrent/ExecutorService#shutdown shutdown}
+      method of this object will be called when the service is
+      destroyed. Obtained at service start and restart.
+  </table>
+
+<table summary="Describes the taskPool 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>taskPool</code></font>
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Type: <td> {@link java.util.concurrent/ExecutorService ExecutorService}
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+      Default: <td> <code>new </code>{@link
+      java.util.concurrent/ThreadPoolExecutor ThreadPoolExecutor}(
+        5 * processor cores /* core pool size */, 
+        5 * processor cores /* ignored */
+      15000 /* timeout */,
+        TimeUnit.MILLISECONDS,
+        new LinkedBlockingQueue(), /* Unbounded Queue */
+        new NamedThreadFactory("TxnMgr taskPool", false)
+      )
+    <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+
+      Description: <td> The pool of threads used to settle 
+      transactions. 
+      The {@link java.util.concurrent/ExecutorService#shutdown shutdown}
+      method of this object will be called when the service is
+      destroyed. Obtained at service start and restart.
+  </table>
+
+Mahalo passes its configuration when creating instances of the following
+configurable classes, which may support additional configuration
+entries: <p>
+
+<ul>
+<li> {@link net.jini.discovery.LookupDiscoveryManager}, used to discover
+     lookup services, as specified by the <a href="#discoveryManager">
+     <code>discoveryManager</code></a> configuration entry
+<li> {@link net.jini.lookup.JoinManager}, used to manage lookup service
+     registrations
+</ul> <p>
+
+<a name="access_control">
+<h2>Access Control Permission Targets</h2>
+</a>
+
+The following table lists the remote methods on Mahalo's proxy objects and
+the associated target names for enforcing access control using {@link
+com.sun.jini.mahalo.MahaloPermission}: <p>
+
+<table border="1" cellpadding="5"
+       summary="The proxy methods and associated target names for
+       MahaloPermission.">
+
+<tr> <th scope="col"> Proxy Method <th scope="col"> Target Name
+
+<!-- TransactionManager -->
+
+<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#create 
+                 TransactionManager.create}
+     <td> create
+<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#join 
+                 TransactionManager.join}
+     <td> join
+<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#getState 
+                 TransactionManager.getState}
+     <td> getState
+<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#commit 
+                 TransactionManager.commit}
+     <td> commit
+<tr> <td> {@link net.jini.core.transaction.server.TransactionManager#abort 
+                 TransactionManager.abort}
+     <td> abort
+
+<!-- Lease and LeaseMap -->
+
+<tr> <td> {@link net.jini.core.lease.Lease#renew Lease.renew}
+     <td> renew
+<tr> <td> {@link net.jini.core.lease.Lease#cancel Lease.cancel}
+     <td> cancel
+<tr> <td> {@link net.jini.core.lease.LeaseMap#renewAll LeaseMap.renewAll}
+     <td> renewAll
+<tr> <td> {@link net.jini.core.lease.LeaseMap#cancelAll LeaseMap.cancelAll}
+     <td> cancelAll
+
+<!-- Administrable -->
+
+<tr> <td> {@link net.jini.admin.Administrable#getAdmin Administrable.getAdmin}
+     <td> getAdmin
+
+<!-- JoinAdmin -->
+
+<tr> <td> {@link net.jini.admin.JoinAdmin#getLookupAttributes
+		 JoinAdmin.getLookupAttributes}
+     <td> getLookupAttributes
+<tr> <td> {@link net.jini.admin.JoinAdmin#addLookupAttributes
+		 JoinAdmin.addLookupAttributes}
+     <td> addLookupAttributes
+<tr> <td> {@link net.jini.admin.JoinAdmin#modifyLookupAttributes
+		 JoinAdmin.modifyLookupAttributes}
+     <td> modifyLookupAttributes
+
+<tr> <td> {@link net.jini.admin.JoinAdmin#getLookupGroups
+		 JoinAdmin.getLookupGroups}
+     <td> getLookupGroups
+<tr> <td> {@link net.jini.admin.JoinAdmin#addLookupGroups
+		 JoinAdmin.addLookupGroups}
+     <td> addLookupGroups
+<tr> <td> {@link net.jini.admin.JoinAdmin#removeLookupGroups
+		 JoinAdmin.removeLookupGroups}
+     <td> removeLookupGroups
+<tr> <td> {@link net.jini.admin.JoinAdmin#setLookupGroups
+		 JoinAdmin.setLookupGroups}
+     <td> setLookupGroups
+
+<tr> <td> {@link net.jini.admin.JoinAdmin#getLookupLocators
+		 JoinAdmin.getLookupLocators}
+     <td> getLookupLocators
+<tr> <td> {@link net.jini.admin.JoinAdmin#addLookupLocators
+		 JoinAdmin.addLookupLocators}
+     <td> addLookupLocators
+<tr> <td> {@link net.jini.admin.JoinAdmin#removeLookupLocators
+		 JoinAdmin.removeLookupLocators}
+     <td> removeLookupLocators
+<tr> <td> {@link net.jini.admin.JoinAdmin#setLookupLocators
+		 JoinAdmin.setLookupLocators}
+     <td> setLookupLocators
+
+<!-- DestroyAdmin -->
+
+<tr> <td> {@link com.sun.jini.admin.DestroyAdmin#destroy DestroyAdmin.destroy}
+     <td> destroy
+
+<!-- ProxyTrust -->
+
+<tr> <td> {@link net.jini.security.proxytrust.ProxyTrust#getProxyVerifier
+		 ProxyTrust.getProxyVerifier}
+     <td> getProxyVerifier
+
+<!-- ServiceProxyAccessor -->
+
+<tr> <td> {@link com.sun.jini.start.ServiceProxyAccessor#getServiceProxy
+		 ServiceProxyAccessor.getServiceProxy}
+     <td> getServiceProxy
+
+</table> <p>
+
+<a name="logging">
+<h2>Loggers and Logging Levels</h2>
+</a>
+
+The Mahalo service implementation uses separate {@link
+java.util.logging.Logger}s, prefixed by <code>com.sun.jini.mahalo</code>, 
+for each type of information it logs. The following tables describe the
+type of information logged as well as the levels of information logged.
+<p>
+  <table border="1" cellpadding="5"
+	 summary="Describes logging performed by destroyLogger at different
+	 logging levels">
+
+  <caption halign="center" valign="top"><b><code>
+	   com.sun.jini.mahalo.destroy</code></b></caption>
+
+  <tr> <th scope="col"> Level <th scope="col"> Description
+
+  <tr> <td> {@link com.sun.jini.logging.Levels#HANDLED HANDLED} <td>
+  for exceptions handled during failed service destruction
+

[... 746 lines stripped ...]


Mime
View raw message