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

svn commit: r1052585 [2/5] - in /incubator/river/site/trunk/content/river/doc/api/net/jini/lookup: ./ class-use/ entry/

Added: incubator/river/site/trunk/content/river/doc/api/net/jini/lookup/JoinManager.html
URL: http://svn.apache.org/viewvc/incubator/river/site/trunk/content/river/doc/api/net/jini/lookup/JoinManager.html?rev=1052585&view=auto
==============================================================================
--- incubator/river/site/trunk/content/river/doc/api/net/jini/lookup/JoinManager.html (added)
+++ incubator/river/site/trunk/content/river/doc/api/net/jini/lookup/JoinManager.html Fri Dec 24 20:26:15 2010
@@ -0,0 +1,1607 @@
+<!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:22 EST 2010 -->
+<TITLE>
+JoinManager (Apache River v2.1.2-SNAPSHOT API Documentation)
+</TITLE>
+
+<META NAME="keywords" CONTENT="net.jini.lookup.JoinManager class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="JoinManager (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="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/JoinManager.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="../../../net/jini/lookup/DiscoveryAdmin.html" title="interface in net.jini.lookup"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../net/jini/lookup/LookupCache.html" title="interface in net.jini.lookup"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?net/jini/lookup/JoinManager.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="JoinManager.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>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+net.jini.lookup</FONT>
+<BR>
+Class JoinManager</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
+  <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>net.jini.lookup.JoinManager</B>
+</PRE>
+<HR>
+<DL>
+<DT><PRE>public class <B>JoinManager</B><DT>extends <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></DL>
+</PRE>
+
+<P>
+A goal of any well-behaved service is to advertise the facilities and
+ functions it provides by requesting residency within at least one lookup
+ service. Making such a request of a lookup service is known as registering
+ with, or <i>joining</i>, a lookup service. To demonstrate this good
+ behavior, a service must comply with both the multicast discovery protocol
+ and the unicast discovery protocol in order to discover the lookup services
+ it is interested in joining. The service must also comply with the join
+ protocol to register with the desired lookup services. 
+ <p>
+ In order for a service to maintain its residency in the lookup services
+ it has joined, the service must provide for the coordination, systematic
+ renewal, and overall management of all leases on that residency. In
+ addition to handling all discovery and join duties, as well as managing
+ all leases on lookup service residency, the service must also provide
+ for the coordination and management of any attribute sets with which
+ it may have registered with the lookup services in which it resides.
+ <p>
+ This class performs all of the functions related to discovery, joining,
+ service lease renewal, and attribute management which is required of a
+ well-behaved service. Each of these activities is intimately involved
+ with the maintenance of a service's residency in one or more lookup
+ services (the service's join state), thus the name <code>JoinManager</code>.
+ <p>
+ This class should be employed by services, not clients. The use of this
+ class in a wide variety of services can help minimize the work resulting
+ from having to repeatedly implement this required functionality in each
+ service. Note that this class is not remote. Services that wish to use
+ this class will create an instance of this class in the service's address
+ space to manage the entity's join state locally.
+<P>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+  <DD>Sun Microsystems, Inc.</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery"><CODE>DiscoveryManagement</CODE></A>, 
+<A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease"><CODE>LeaseRenewalManager</CODE></A>, 
+<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html" title="class or interface in java.util.logging"><CODE>Level</CODE></A>, 
+<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><DT><B>Implementation Specifics:</B></DT>
+  <DD><!-- Implementation Specifics -->
+
+ The following implementation-specific items are discussed below:
+ <ul><li> <a href="#jmConfigEntries">Configuring JoinManager</a>
+     <li> <a href="#jmLogging">Logging</a>
+ </ul>
+
+ <a name="jmConfigEntries">
+ <p>
+ <b><font size="+1">Configuring JoinManager</font></b>
+ <p>
+ </a>
+
+ This implementation of <code>JoinManager</code> supports the following
+ configuration entries; where each configuration entry name is associated
+ with the component name <code>net.jini.lookup.JoinManager</code>. Note
+ that the configuration entries specified here are specific to this
+ implementation of <code>JoinManager</code>. Unless otherwise stated, each
+ entry is retrieved from the configuration only once per instance of
+ this utility, where each such retrieval is performed in the constructor.
+ 
+ <a name="discoveryManager">
+ <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> <code> new 
+    <A HREF="../../../net/jini/discovery/LookupDiscoveryManager.html#LookupDiscoveryManager(java.lang.String[], net.jini.core.discovery.LookupLocator[], net.jini.discovery.DiscoveryListener, net.jini.config.Configuration)"><CODE>LookupDiscoveryManager</CODE></A>(
+                       new java.lang.String[] {""},
+                       new <A HREF="../../../net/jini/core/discovery/LookupLocator.html" title="class in net.jini.core.discovery"><CODE>LookupLocator</CODE></A>[0],
+                       null, config)</code>
+ 
+   <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+     Description:
+       <td> The object used to manage the discovery processing
+            performed by this utility. This entry will be retrieved
+            from the configuration only if no discovery manager is
+            specified in the constructor. Note that this object should
+            not be shared with other components in the application that
+            employs this utility.
+ </table>
+
+ <a name="leaseManager">
+ <table summary="Describes the leaseManager 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>leaseManager</code></font>
+ 
+   <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+     Type: <td> <A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease"><CODE>LeaseRenewalManager</CODE></A>
+ 
+   <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+     Default: <td> <code> new 
+       <A HREF="../../../net/jini/lease/LeaseRenewalManager.html#LeaseRenewalManager(net.jini.config.Configuration)"><CODE>LeaseRenewalManager</CODE></A>(config)</code>
+ 
+   <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+     Description:
+       <td> The object used to manage each service lease returned
+            to this utility when the service is registered with the
+            the various discovered lookup services. This entry will
+            be retrieved from the configuration only if no lease 
+            renewal manager is specified in the constructor.
+ </table>
+
+ <a name="maxLeaseDuration">
+ <table summary="Describes the maxLeaseDuration
+                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>maxLeaseDuration</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>Lease.FOREVER</code>
+ 
+   <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+     Description:
+       <td> The maximum lease duration (in milliseconds) that is requested
+            from each discovered lookup service on behalf of the service;
+            both when the lease is initially requested, as well as when 
+            renewal of that lease is requested. Note that as this value is
+            made smaller, renewal requests will be made more frequently
+            while the service is up, and lease expiration will occur sooner
+            when the service goes down.
+ </table>
+
+ <a name="registrarPreparer">
+ <table summary="Describes the registrarPreparer 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>registrarPreparer</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> <code>new <A HREF="../../../net/jini/security/BasicProxyPreparer.html" title="class in net.jini.security"><CODE>BasicProxyPreparer</CODE></A>()
+                     </code>
+ 
+   <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+   Description:
+     <td> Preparer for the proxies to the lookup services that are
+          discovered and used by this utility. 
+          <p>
+          The following methods of the proxy returned by this preparer are
+          invoked by this utility:
+       <ul>
+         <li><A HREF="../../../net/jini/core/lookup/ServiceRegistrar.html#register(net.jini.core.lookup.ServiceItem, long)"><CODE>register</CODE></A>
+       </ul>
+ </table>
+
+ <a name="registrationPreparer">
+ <table summary="Describes the registrationPreparer 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>registrationPreparer</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> <code>new <A HREF="../../../net/jini/security/BasicProxyPreparer.html" title="class in net.jini.security"><CODE>BasicProxyPreparer</CODE></A>()
+                     </code>
+ 
+   <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+   Description:
+     <td> Preparer for the proxies to the registrations returned to
+          this utility upon registering the service with each discovered
+          lookup service.
+          <p>
+          The following methods of the proxy returned by this preparer are
+          invoked by this utility:
+       <ul>
+         <li><A HREF="../../../net/jini/core/lookup/ServiceRegistration.html#getServiceID()"><CODE>getServiceID</CODE></A>
+         <li><A HREF="../../../net/jini/core/lookup/ServiceRegistration.html#getLease()"><CODE>getLease</CODE></A>
+         <li><A HREF="../../../net/jini/core/lookup/ServiceRegistration.html#addAttributes(net.jini.core.entry.Entry[])"><CODE>addAttributes</CODE></A>
+         <li><A HREF="../../../net/jini/core/lookup/ServiceRegistration.html#modifyAttributes(net.jini.core.entry.Entry[], net.jini.core.entry.Entry[])"><CODE>modifyAttributes</CODE></A>
+         <li><A HREF="../../../net/jini/core/lookup/ServiceRegistration.html#setAttributes(net.jini.core.entry.Entry[])"><CODE>setAttributes</CODE></A>
+       </ul>
+ </table>
+
+ <a name="serviceLeasePreparer">
+ <table summary="Describes the serviceLeasePreparer 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>serviceLeasePreparer</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> <code>new <A HREF="../../../net/jini/security/BasicProxyPreparer.html" title="class in net.jini.security"><CODE>BasicProxyPreparer</CODE></A>()
+                     </code>
+ 
+   <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+   Description:
+     <td> Preparer for the leases returned to this utility through
+          the registrations with each discovered lookup service with
+          which this utility has registered the service.
+          <p>
+          Currently, none of the methods on the service lease returned
+          by this preparer are invoked by this implementation of the utility.
+ </table>
+
+ <a name="taskManager">
+ <table summary="Describes the taskManager 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>taskManager</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 
+             <A HREF="../../../com/sun/jini/thread/TaskManager.html#TaskManager()"><CODE>TaskManager</CODE></A>(15, (15*1000), 1.0f)</code>
+ 
+   <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+     Description:
+       <td> The object that pools and manages the various threads
+            executed by this utility. The default manager creates a
+            maximum of 15 threads, waits 15 seconds before removing
+            idle threads, and uses a load factor of 1.0 when
+            determining whether to create a new thread. This object
+            should not be shared with other components in the
+            application that employs this utility.
+ </table>
+
+ <a name="wakeupManager">
+ <table summary="Describes the wakeupManager 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>wakeupManager</code></font>
+ 
+   <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+     Type: <td> <A HREF="../../../com/sun/jini/thread/WakeupManager.html" title="class in com.sun.jini.thread"><CODE>WakeupManager</CODE></A>
+ 
+   <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+     Default: <td> <code>new 
+     <A HREF="../../../com/sun/jini/thread/WakeupManager.html#WakeupManager(com.sun.jini.thread.WakeupManager.ThreadDesc)"><CODE>WakeupManager</CODE></A>(new 
+     <A HREF="../../../com/sun/jini/thread/WakeupManager.ThreadDesc.html" title="class in com.sun.jini.thread"><CODE>WakeupManager.ThreadDesc</CODE></A>(null,true))</code>
+ 
+   <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+     Description:
+       <td> Object that pools and manages the various tasks that are
+            initially executed by the object corresponding to the
+            <a href="#taskManager"><code>taskManager</code></a> entry
+            of this component, but which fail during that initial execution.
+            This object schedules the re-execution of such a failed task -
+            in the <a href="#taskManager"><code>taskManager</code></a>
+            object - at various times in the future, until either the
+            task succeeds or the task has been executed the maximum
+            number of allowable times, corresponding to the 
+            <a href="#wakeupRetries"><code>wakeupRetries</code></a>
+            entry of this component. This object should not be shared
+            with other components in the application that employs this
+            utility.
+ </table>
+
+ <a name="wakeupRetries">
+ <table summary="Describes the wakeupRetries
+                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>wakeupRetries</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>6</code>
+ 
+   <tr valign="top"> <td> &nbsp <th scope="row" align="right">
+     Description:
+       <td> The maximum number of times a failed task is allowed to
+            be executed by the object corresponding to the 
+            <a href="#wakeupManager"><code>wakeupManager</code></a>
+            entry of this component.
+ </table>
+
+ <a name="jmLogging">
+ <p>
+ <b><font size="+1">Logging</font></b>
+ <p>
+ </a>
+
+ This implementation of <code>JoinManager</code> uses the
+ <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> named <code>net.jini.lookup.JoinManager</code>
+ to log information at the following logging levels: <p>
+
+ <table border="1" cellpadding="5"
+         summary="Describes the information logged by JoinManager,
+                 and the levels at which that information is logged">
+
+ <caption halign="center" valign="top">
+   <b><code>net.jini.lookup.JoinManager</code></b>
+ </caption>
+
+ <tr> <th scope="col"> Level</th>
+      <th scope="col"> Description</th>
+ </tr>
+
+ <tr>
+   <td><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html#INFO" title="class or interface in java.util.logging"><CODE>INFO</CODE></A></td>
+   <td>when a task is stopped because of a definite exception</td>
+ </tr>
+ <tr>
+   <td><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html#INFO" title="class or interface in java.util.logging"><CODE>INFO</CODE></A></td>
+   <td>
+     when a task is stopped because it has exceeded the maximum number of
+     times the task is allowed to be tried/re-tried
+   </td>
+ </tr>
+ <tr>
+   <td><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html#INFO" title="class or interface in java.util.logging"><CODE>INFO</CODE></A></td>
+   <td>when any exception occurs while attempting to prepare a proxy</td>
+ </tr>
+ <tr>
+   <td><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html#FINER" title="class or interface in java.util.logging"><CODE>FINER</CODE></A></td>
+   <td>
+     when any exception (other than the more serious exceptions logged
+     at higher levels) occurs in a task
+   </td>
+ </tr>
+ <tr>
+   <td><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html#FINEST" title="class or interface in java.util.logging"><CODE>FINEST</CODE></A></td>
+   <td>
+     when an <code>IllegalStateException</code> occurs upon attempting to
+     discard a lookup service
+   </td>
+ </tr>
+  <tr>
+   <td><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html#FINEST" title="class or interface in java.util.logging"><CODE>FINEST</CODE></A></td>
+   <td>whenever any task is started</td>
+ </tr>
+ 
+ <tr>
+   <td><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html#FINEST" title="class or interface in java.util.logging"><CODE>FINEST</CODE></A></td>
+   <td>whenever any task completes successfully</td>
+ </tr>
+
+ <tr>
+   <td><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html#FINEST" title="class or interface in java.util.logging"><CODE>FINEST</CODE></A></td>
+   <td>whenever a proxy is prepared</td>
+ </tr>
+ </table>
+ <p></DD>
+</DL>
+<HR>
+
+<P>
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../net/jini/lookup/JoinManager.html#JoinManager(java.lang.Object, net.jini.core.entry.Entry[], net.jini.core.lookup.ServiceID, net.jini.discovery.DiscoveryManagement, net.jini.lease.LeaseRenewalManager)">JoinManager</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;serviceProxy,
+            <A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets,
+            <A HREF="../../../net/jini/core/lookup/ServiceID.html" title="class in net.jini.core.lookup">ServiceID</A>&nbsp;serviceID,
+            <A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery">DiscoveryManagement</A>&nbsp;discoveryMgr,
+            <A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease">LeaseRenewalManager</A>&nbsp;leaseMgr)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an instance of this class that will register the
+ service with all discovered lookup services, using the supplied 
+ <code>ServiceID</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../net/jini/lookup/JoinManager.html#JoinManager(java.lang.Object, net.jini.core.entry.Entry[], net.jini.core.lookup.ServiceID, net.jini.discovery.DiscoveryManagement, net.jini.lease.LeaseRenewalManager, net.jini.config.Configuration)">JoinManager</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;serviceProxy,
+            <A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets,
+            <A HREF="../../../net/jini/core/lookup/ServiceID.html" title="class in net.jini.core.lookup">ServiceID</A>&nbsp;serviceID,
+            <A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery">DiscoveryManagement</A>&nbsp;discoveryMgr,
+            <A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease">LeaseRenewalManager</A>&nbsp;leaseMgr,
+            <A HREF="../../../net/jini/config/Configuration.html" title="interface in net.jini.config">Configuration</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an instance of this class, configured using the items
+ retrieved through the given <code>Configuration</code>, that will
+ register the service with all discovered lookup services, using the
+ supplied <code>ServiceID</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../net/jini/lookup/JoinManager.html#JoinManager(java.lang.Object, net.jini.core.entry.Entry[], net.jini.lookup.ServiceIDListener, net.jini.discovery.DiscoveryManagement, net.jini.lease.LeaseRenewalManager)">JoinManager</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;serviceProxy,
+            <A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets,
+            <A HREF="../../../net/jini/lookup/ServiceIDListener.html" title="interface in net.jini.lookup">ServiceIDListener</A>&nbsp;callback,
+            <A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery">DiscoveryManagement</A>&nbsp;discoveryMgr,
+            <A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease">LeaseRenewalManager</A>&nbsp;leaseMgr)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an instance of this class that will register the given
+ service reference with all discovered lookup services and, through
+ an event sent to the given <code>ServiceIDListener</code> object,
+ communicate the service ID assigned by the first lookup service
+ with which the service is registered.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../net/jini/lookup/JoinManager.html#JoinManager(java.lang.Object, net.jini.core.entry.Entry[], net.jini.lookup.ServiceIDListener, net.jini.discovery.DiscoveryManagement, net.jini.lease.LeaseRenewalManager, net.jini.config.Configuration)">JoinManager</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;serviceProxy,
+            <A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets,
+            <A HREF="../../../net/jini/lookup/ServiceIDListener.html" title="interface in net.jini.lookup">ServiceIDListener</A>&nbsp;callback,
+            <A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery">DiscoveryManagement</A>&nbsp;discoveryMgr,
+            <A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease">LeaseRenewalManager</A>&nbsp;leaseMgr,
+            <A HREF="../../../net/jini/config/Configuration.html" title="interface in net.jini.config">Configuration</A>&nbsp;config)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an instance of this class, configured using the items
+ retrieved through the given <code>Configuration</code> object,
+ that will register the given service reference with all discovered
+ lookup services and, through an event sent to the given
+ <code>ServiceIDListener</code> object, communicate the service ID
+ assigned by the first lookup service with which the service is
+ registered.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/lookup/JoinManager.html#addAttributes(net.jini.core.entry.Entry[])">addAttributes</A></B>(<A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates a new set of attributes with the service, in addition to
+ the service's current set of attributes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/lookup/JoinManager.html#addAttributes(net.jini.core.entry.Entry[], boolean)">addAttributes</A></B>(<A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets,
+              boolean&nbsp;checkSC)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates a new set of attributes with the service, in addition to
+ the service's current set of attributes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/lookup/JoinManager.html#getAttributes()">getAttributes</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the set of attributes currently associated
+ with the service.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery">DiscoveryManagement</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/lookup/JoinManager.html#getDiscoveryManager()">getDiscoveryManager</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the instance of <code>DiscoveryManagement</code> that was
+ either passed into the constructor, or that was created as a result
+ of <code>null</code> being input to that parameter.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../net/jini/core/lookup/ServiceRegistrar.html" title="interface in net.jini.core.lookup">ServiceRegistrar</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/lookup/JoinManager.html#getJoinSet()">getJoinSet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array of <code>ServiceRegistrar</code> objects, each
+ corresponding to a lookup service with which the service is currently
+ registered (joined).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease">LeaseRenewalManager</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/lookup/JoinManager.html#getLeaseRenewalManager()">getLeaseRenewalManager</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the instance of the <code>LeaseRenewalManager</code> class
+ that was either passed into the constructor, or that was created
+ as a result of <code>null</code> being input to that parameter.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/lookup/JoinManager.html#modifyAttributes(net.jini.core.entry.Entry[], net.jini.core.entry.Entry[])">modifyAttributes</A></B>(<A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSetTemplates,
+                 <A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changes the service's current set of attributes using the same
+ semantics as the <code>modifyAttributes</code> method of the
+ <code>ServiceRegistration</code> class.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/lookup/JoinManager.html#modifyAttributes(net.jini.core.entry.Entry[], net.jini.core.entry.Entry[], boolean)">modifyAttributes</A></B>(<A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSetTemplates,
+                 <A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets,
+                 boolean&nbsp;checkSC)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changes the service's current set of attributes using the same
+ semantics as the <code>modifyAttributes</code> method of the
+ <code>ServiceRegistration</code> class.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/lookup/JoinManager.html#replaceRegistration(java.lang.Object)">replaceRegistration</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;serviceProxy)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Registers a new reference to the service with all current and future
+ discovered lookup services.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/lookup/JoinManager.html#replaceRegistration(java.lang.Object, net.jini.core.entry.Entry[])">replaceRegistration</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;serviceProxy,
+                    <A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Registers a new reference to the service with all current and future
+ discovered lookup services, applying semantics identical to the 
+ one-argument form of this method, except with respect to the
+ registration of the given attribute sets.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/lookup/JoinManager.html#setAttributes(net.jini.core.entry.Entry[])">setAttributes</A></B>(<A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Replaces the service's current set of attributes with a new set of
+ attributes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/lookup/JoinManager.html#terminate()">terminate</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs cleanup duties related to the termination of the lookup
+ service discovery event mechanism, as well as the lease and 
+ thread management performed by the <code>JoinManager</code>.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://
 java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="JoinManager(java.lang.Object, net.jini.core.entry.Entry[], net.jini.lookup.ServiceIDListener, net.jini.discovery.DiscoveryManagement, net.jini.lease.LeaseRenewalManager)"><!-- --></A><H3>
+JoinManager</H3>
+<PRE>
+public <B>JoinManager</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;serviceProxy,
+                   <A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets,
+                   <A HREF="../../../net/jini/lookup/ServiceIDListener.html" title="interface in net.jini.lookup">ServiceIDListener</A>&nbsp;callback,
+                   <A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery">DiscoveryManagement</A>&nbsp;discoveryMgr,
+                   <A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease">LeaseRenewalManager</A>&nbsp;leaseMgr)
+            throws <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD>Constructs an instance of this class that will register the given
+ service reference with all discovered lookup services and, through
+ an event sent to the given <code>ServiceIDListener</code> object,
+ communicate the service ID assigned by the first lookup service
+ with which the service is registered. This constructor is typically
+ used by services which have not yet been assigned a service ID.
+ <p>
+ The value input to the <code>serviceProxy</code> parameter represents
+ the service reference (proxy) to register with each discovered lookup
+ service. If the <code>Object</code> input to that parameter is not
+ <code>Serializable</code>, an <code>IllegalArgumentException</code>
+ is thrown. If <code>null</code> is input to that parameter, a
+ <code>NullPointerException</code> is thrown.
+ <p>
+ The value input to the <code>attrSets</code> parameter is an array
+ of <code>Entry</code> objects, none of whose elements may be
+ <code>null</code>, that represents the new set of attributes to
+ associate with the new service reference to be registered. Passing
+ <code>null</code> as the value of the <code>attrSets</code> parameter
+ is equivalent to passing an empty array. If any of the elements
+ of the <code>attrSets</code> array are <code>null</code>, a
+ <code>NullPointerException</code> is thrown. The set of attributes
+ passed in this parameter will be associated with the service in all
+ future join processing until those attributes are changed through
+ an invocation of a method on this class such as,
+ <code>addAttributes</code>, <code>setAttributes</code>, 
+ <code>modifyAttributes</code>, or <code>replaceRegistration</code>.
+ <p>
+ When constructing this utility, the service supplies an object through
+ which notifications that indicate a lookup service has been discovered
+ or discarded will be received. At a minimum, the object supplied
+ (through the <code>discoveryMgr</code> parameter) must satisfy the
+ contract defined in the <code>DiscoveryManagement</code> interface.
+ That is, the object supplied must provide this utility with the ability
+ to set discovery listeners and to discard previously discovered
+ lookup services when they are found to be unavailable. A value of
+ <code>null</code> may be input to the <code>discoveryMgr</code>
+ parameter. When <code>null</code> is input to that parameter, an
+ instance of <code>LookupDiscoveryManager</code> is used to listen
+ for events announcing the discovery of only those lookup services
+ that are members of the public group.
+ <p>
+ The object input to the <code>leaseMgr</code> parameter provides for
+ the coordination, systematic renewal, and overall management of all
+ leases on the given service reference's residency in the lookup 
+ services that have been joined. As with the <code>discoveryMgr</code>
+ parameter, a value of <code>null</code> may be input to this
+ parameter. When <code>null</code> is input to this parameter,
+ an instance of <code>LeaseRenewalManager</code>, initially managing
+ no <code>Lease</code> objects will be used. This feature allows a
+ service to either use a single entity to manage all of its leases,
+ or to use separate entities: one to manage the leases unrelated to
+ the join process, and one to manage the leases that result from the
+ join process, that are accessible only within the current instance
+ of the <code>JoinManager</code>.
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>serviceProxy</CODE> - the service reference (proxy) to register with all
+                     discovered lookup services<DD><CODE>attrSets</CODE> - array of <code>Entry</code> consisting of the
+                     attribute sets with which to register the service<DD><CODE>callback</CODE> - reference to the object that should receive the
+                     event containing the service ID, assigned to the
+                     service by the first lookup service with which the
+                     service reference is registered<DD><CODE>discoveryMgr</CODE> - reference to the <code>DiscoveryManagement</code>
+                     object this class should use to manage lookup
+                     service discovery on behalf of the given service<DD><CODE>leaseMgr</CODE> - reference to the <code>LeaseRenewalManager</code>
+                     object this class should use to manage the leases
+                     on the given service's residency in the lookup 
+                     services that have been joined
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the object input to the
+         <code>serviceProxy</code> parameter is not serializable
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if either <code>null</code> is
+         input to the <code>serviceProxy</code> parameter, or at least
+         one of the elements of the <code>attrSets</code> parameter is
+         <code>null</code>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE> - if initiation of discovery process results
+         in <code>IOException</code> when socket allocation occurs
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html" title="class or interface in java.lang">IllegalStateException</A></CODE> - if this method is called on 
+         a terminated <code>JoinManager</code> instance. Note that this 
+         exception is implementation-specific.<DT><B>See Also:</B><DD><A HREF="../../../net/jini/lookup/ServiceIDListener.html" title="interface in net.jini.lookup"><CODE>ServiceIDListener</CODE></A>, 
+<A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery"><CODE>DiscoveryManagement</CODE></A>, 
+<A HREF="../../../net/jini/discovery/LookupDiscoveryManager.html" title="class in net.jini.discovery"><CODE>LookupDiscoveryManager</CODE></A>, 
+<A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease"><CODE>LeaseRenewalManager</CODE></A></DL>
+</DL>
+<HR>
+
+<A NAME="JoinManager(java.lang.Object, net.jini.core.entry.Entry[], net.jini.lookup.ServiceIDListener, net.jini.discovery.DiscoveryManagement, net.jini.lease.LeaseRenewalManager, net.jini.config.Configuration)"><!-- --></A><H3>
+JoinManager</H3>
+<PRE>
+public <B>JoinManager</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;serviceProxy,
+                   <A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets,
+                   <A HREF="../../../net/jini/lookup/ServiceIDListener.html" title="interface in net.jini.lookup">ServiceIDListener</A>&nbsp;callback,
+                   <A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery">DiscoveryManagement</A>&nbsp;discoveryMgr,
+                   <A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease">LeaseRenewalManager</A>&nbsp;leaseMgr,
+                   <A HREF="../../../net/jini/config/Configuration.html" title="interface in net.jini.config">Configuration</A>&nbsp;config)
+            throws <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A>,
+                   <A HREF="../../../net/jini/config/ConfigurationException.html" title="class in net.jini.config">ConfigurationException</A></PRE>
+<DL>
+<DD>Constructs an instance of this class, configured using the items
+ retrieved through the given <code>Configuration</code> object,
+ that will register the given service reference with all discovered
+ lookup services and, through an event sent to the given
+ <code>ServiceIDListener</code> object, communicate the service ID
+ assigned by the first lookup service with which the service is
+ registered. This constructor is typically used by services which
+ have not yet been assigned a service ID, and which wish to allow
+ for deployment-time configuration of the service's join processing.
+ <p>
+ The items used to configure the current instance of this class
+ are obtained through the object input to the <code>config</code>
+ parameter. If <code>null</code> is input to that parameter, a
+ <code>NullPointerException</code> is thrown.
+ <p>
+ The object this utility will use to manage lookup service discovery on
+ behalf of the given service can be supplied through either the
+ <code>discoveryMgr</code> parameter or through an entry contained
+ in the given <code>Configuration</code>. If <code>null</code> is input
+ to the <code>discoveryMgr</code> parameter, an attempt will first be
+ made to retrieve from the given <code>Configuration</code>, an entry
+ named "discoveryManager" (described above). If such an object is
+ successfully retrieved from the given <code>Configuration</code>, that 
+ object will be used to perform the lookup service discovery management
+ required by this utility.
+ <p>
+ If <code>null</code> is input to the <code>discoveryMgr</code>
+ parameter, and no entry named "discoveryManager" is specified in the
+ given <code>Configuration</code>, then an instance of the utility class
+ <code>LookupDiscoveryManager</code> will be used to listen for events
+ announcing the discovery of only those lookup services that are
+ members of the public group.
+ <p>
+ As with the <code>discoveryMgr</code> parameter, the object this 
+ utility will use to perform lease management on behalf of the given
+ service can be supplied through either the <code>leaseMgr</code>
+ parameter or through an entry contained in the given
+ <code>Configuration</code>. If <code>null</code> is input to the
+ <code>leaseMgr</code> parameter, an attempt will first be made to
+ retrieve from the given <code>Configuration</code>, an entry named
+ "leaseManager" (described above). If such an object is successfully
+ retrieved from the given <code>Configuration</code>, that object
+ will be used to perform the lease management required by this utility.
+ <p>
+ If <code>null</code> is input to the <code>leaseMgr</code>
+ parameter, and no entry named "leaseManager" is specified in the
+ given <code>Configuration</code>, then an instance of the utility
+ class <code>LeaseRenewalManager</code> that takes the given
+ <code>Configuration</code> will be created (initially managing no
+ leases) and used to perform all required lease renewal management
+ on behalf of the given service.
+ <p>
+ Except for the <code>config</code> parameter and the additional 
+ semantics imposed by that parameter (as noted above), all other
+ parameters of this form of the constructor, along with their
+ associated semantics, are identical to that of the five-argument
+ constructor that takes a <code>ServiceIDListener</code>.
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>serviceProxy</CODE> - the service reference (proxy) to register with all
+                     discovered lookup services<DD><CODE>attrSets</CODE> - array of <code>Entry</code> consisting of the
+                     attribute sets with which to register the service<DD><CODE>callback</CODE> - reference to the <code>ServiceIDListener</code>
+                     object that should receive the event containing the
+                     service ID assigned to the service by the first
+                     lookup service with which the service reference
+                     is registered<DD><CODE>discoveryMgr</CODE> - reference to the <code>DiscoveryManagement</code>
+                     object this class should use to manage lookup
+                     service discovery on behalf of the given service<DD><CODE>leaseMgr</CODE> - reference to the <code>LeaseRenewalManager</code>
+                     object this class should use to manage the leases
+                     on the given service's residency in the lookup 
+                     services that have been joined<DD><CODE>config</CODE> - instance of <code>Configuration</code> through
+                     which the items used to configure the current
+                     instance of this class are obtained
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the object input to the
+         <code>serviceProxy</code> parameter is not serializable
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>null</code> is input
+         to the <code>serviceProxy</code> parameter or the
+         <code>config</code> parameter, or if at least one of the
+         elements of the <code>attrSets</code> parameter is
+         <code>null</code>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE> - if initiation of discovery process results
+         in <code>IOException</code> when socket allocation occurs
+<DD><CODE><A HREF="../../../net/jini/config/ConfigurationException.html" title="class in net.jini.config">ConfigurationException</A></CODE> - if an exception
+         occurs while retrieving an item from the given
+         <code>Configuration</code> object
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html" title="class or interface in java.lang">IllegalStateException</A></CODE> - if this method is called on 
+         a terminated <code>JoinManager</code> instance. Note that this 
+         exception is implementation-specific.<DT><B>See Also:</B><DD><A HREF="../../../net/jini/lookup/ServiceIDListener.html" title="interface in net.jini.lookup"><CODE>ServiceIDListener</CODE></A>, 
+<A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery"><CODE>DiscoveryManagement</CODE></A>, 
+<A HREF="../../../net/jini/discovery/LookupDiscoveryManager.html" title="class in net.jini.discovery"><CODE>LookupDiscoveryManager</CODE></A>, 
+<A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease"><CODE>LeaseRenewalManager</CODE></A>, 
+<A HREF="../../../net/jini/config/Configuration.html" title="interface in net.jini.config"><CODE>Configuration</CODE></A>, 
+<A HREF="../../../net/jini/config/ConfigurationException.html" title="class in net.jini.config"><CODE>ConfigurationException</CODE></A></DL>
+</DL>
+<HR>
+
+<A NAME="JoinManager(java.lang.Object, net.jini.core.entry.Entry[], net.jini.core.lookup.ServiceID, net.jini.discovery.DiscoveryManagement, net.jini.lease.LeaseRenewalManager)"><!-- --></A><H3>
+JoinManager</H3>
+<PRE>
+public <B>JoinManager</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;serviceProxy,
+                   <A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets,
+                   <A HREF="../../../net/jini/core/lookup/ServiceID.html" title="class in net.jini.core.lookup">ServiceID</A>&nbsp;serviceID,
+                   <A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery">DiscoveryManagement</A>&nbsp;discoveryMgr,
+                   <A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease">LeaseRenewalManager</A>&nbsp;leaseMgr)
+            throws <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></PRE>
+<DL>
+<DD>Constructs an instance of this class that will register the
+ service with all discovered lookup services, using the supplied 
+ <code>ServiceID</code>. This constructor is typically used by
+ services which have already been assigned a service ID (possibly
+ by the service provider itself or as a result of a prior registration
+ with some lookup service), and which do not wish to allow for
+ deployment-time configuration of the service's join processing.
+ <p>
+ Except that the desired <code>ServiceID</code> is supplied through the
+ <code>serviceID</code> parameter rather than through a notification
+ sent to a <code>ServiceIDListener</code>, all other parameters
+ of this form of the constructor, along with their associated semantics,
+ are identical to that of the five-argument constructor that takes
+ a <code>ServiceIDListener</code>.
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>serviceProxy</CODE> - a reference to the service requesting the services
+                     of this class<DD><CODE>attrSets</CODE> - array of <code>Entry</code> consisting of the
+                     attribute sets with which to register the service<DD><CODE>serviceID</CODE> - an instance of <code>ServiceID</code> with which to
+                     register the service with all desired lookup
+                     services<DD><CODE>discoveryMgr</CODE> - reference to the <code>DiscoveryManagement</code>
+                     object this class should use to manage the given
+                     service's lookup service discovery duties<DD><CODE>leaseMgr</CODE> - reference to the <code>LeaseRenewalManager</code>
+                     object this class should use to manage the leases
+                     on the given service's residency in the lookup 
+                     services that have been joined
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the object input to the
+         <code>serviceProxy</code> parameter is not serializable
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if either <code>null</code> is
+         input to the <code>serviceProxy</code> parameter, or at least
+         one of the elements of the <code>attrSets</code> parameter is
+         <code>null</code>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE> - if initiation of discovery process results
+         in <code>IOException</code> when socket allocation occurs
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html" title="class or interface in java.lang">IllegalStateException</A></CODE> - if this method is called on 
+         a terminated <code>JoinManager</code> instance. Note that this 
+         exception is implementation-specific.<DT><B>See Also:</B><DD><A HREF="../../../net/jini/core/lookup/ServiceID.html" title="class in net.jini.core.lookup"><CODE>ServiceID</CODE></A>, 
+<A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery"><CODE>DiscoveryManagement</CODE></A>, 
+<A HREF="../../../net/jini/discovery/LookupDiscoveryManager.html" title="class in net.jini.discovery"><CODE>LookupDiscoveryManager</CODE></A>, 
+<A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease"><CODE>LeaseRenewalManager</CODE></A></DL>
+</DL>
+<HR>
+
+<A NAME="JoinManager(java.lang.Object, net.jini.core.entry.Entry[], net.jini.core.lookup.ServiceID, net.jini.discovery.DiscoveryManagement, net.jini.lease.LeaseRenewalManager, net.jini.config.Configuration)"><!-- --></A><H3>
+JoinManager</H3>
+<PRE>
+public <B>JoinManager</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;serviceProxy,
+                   <A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets,
+                   <A HREF="../../../net/jini/core/lookup/ServiceID.html" title="class in net.jini.core.lookup">ServiceID</A>&nbsp;serviceID,
+                   <A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery">DiscoveryManagement</A>&nbsp;discoveryMgr,
+                   <A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease">LeaseRenewalManager</A>&nbsp;leaseMgr,
+                   <A HREF="../../../net/jini/config/Configuration.html" title="interface in net.jini.config">Configuration</A>&nbsp;config)
+            throws <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A>,
+                   <A HREF="../../../net/jini/config/ConfigurationException.html" title="class in net.jini.config">ConfigurationException</A></PRE>
+<DL>
+<DD>Constructs an instance of this class, configured using the items
+ retrieved through the given <code>Configuration</code>, that will
+ register the service with all discovered lookup services, using the
+ supplied <code>ServiceID</code>. This constructor is typically used by
+ services which have already been assigned a service ID (possibly
+ by the service provider itself or as a result of a prior registration
+ with some lookup service), and which wish to allow for deployment-time
+ configuration of the service's join processing.
+ <p>
+ The items used to configure the current instance of this class
+ are obtained through the object input to the <code>config</code>
+ parameter. If <code>null</code> is input to that parameter, a
+ <code>NullPointerException</code> is thrown.
+ <p>
+ Except that the desired <code>ServiceID</code> is supplied through the
+ <code>serviceID</code> parameter rather than through a notification
+ sent to a <code>ServiceIDListener</code>, all other parameters
+ of this form of the constructor, along with their associated semantics,
+ are identical to that of the six-argument constructor that takes
+ a <code>ServiceIDListener</code>.
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>serviceProxy</CODE> - a reference to the service requesting the services
+                     of this class<DD><CODE>attrSets</CODE> - array of <code>Entry</code> consisting of the
+                     attribute sets with which to register the service.<DD><CODE>serviceID</CODE> - an instance of <code>ServiceID</code> with which to
+                     register the service with all desired lookup
+                     services<DD><CODE>discoveryMgr</CODE> - reference to the <code>DiscoveryManagement</code>
+                     object this class should use to manage lookup
+                     service discovery on behalf of the given service<DD><CODE>leaseMgr</CODE> - reference to the <code>LeaseRenewalManager</code>
+                     object this class should use to manage the leases
+                     on the given service's residency in the lookup 
+                     services that have been joined<DD><CODE>config</CODE> - instance of <code>Configuration</code> through
+                     which the items used to configure the current
+                     instance of this class are obtained
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the object input to the
+         <code>serviceProxy</code> parameter is not serializable
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>null</code> is input
+         to the <code>serviceProxy</code> parameter or the
+         <code>config</code> parameter, or if at least one of the
+         elements of the <code>attrSets</code> parameter is
+         <code>null</code>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/io/IOException.html" title="class or interface in java.io">IOException</A></CODE> - if initiation of discovery process results
+         in <code>IOException</code> when socket allocation occurs
+<DD><CODE><A HREF="../../../net/jini/config/ConfigurationException.html" title="class in net.jini.config">ConfigurationException</A></CODE> - if an exception
+         occurs while retrieving an item from the given
+         <code>Configuration</code> object
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalStateException.html" title="class or interface in java.lang">IllegalStateException</A></CODE> - if this method is called on 
+         a terminated <code>JoinManager</code> instance. Note that this 
+         exception is implementation-specific.<DT><B>See Also:</B><DD><A HREF="../../../net/jini/core/lookup/ServiceID.html" title="class in net.jini.core.lookup"><CODE>ServiceID</CODE></A>, 
+<A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery"><CODE>DiscoveryManagement</CODE></A>, 
+<A HREF="../../../net/jini/discovery/LookupDiscoveryManager.html" title="class in net.jini.discovery"><CODE>LookupDiscoveryManager</CODE></A>, 
+<A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease"><CODE>LeaseRenewalManager</CODE></A>, 
+<A HREF="../../../net/jini/config/Configuration.html" title="interface in net.jini.config"><CODE>Configuration</CODE></A>, 
+<A HREF="../../../net/jini/config/ConfigurationException.html" title="class in net.jini.config"><CODE>ConfigurationException</CODE></A></DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="getDiscoveryManager()"><!-- --></A><H3>
+getDiscoveryManager</H3>
+<PRE>
+public <A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery">DiscoveryManagement</A> <B>getDiscoveryManager</B>()</PRE>
+<DL>
+<DD>Returns the instance of <code>DiscoveryManagement</code> that was
+ either passed into the constructor, or that was created as a result
+ of <code>null</code> being input to that parameter.
+ <p>
+ The object returned by this method encapsulates the mechanism by which
+ either the <code>JoinManager</code> or the entity itself can set
+ discovery listeners and discard previously discovered lookup services
+ when they are found to be unavailable.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the instance of the <code>DiscoveryManagement</code> interface
+         that was either passed into the constructor, or that was
+         created as a result of <code>null</code> being input to that
+         parameter.<DT><B>See Also:</B><DD><A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery"><CODE>DiscoveryManagement</CODE></A>, 
+<A HREF="../../../net/jini/discovery/LookupDiscoveryManager.html" title="class in net.jini.discovery"><CODE>LookupDiscoveryManager</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLeaseRenewalManager()"><!-- --></A><H3>
+getLeaseRenewalManager</H3>
+<PRE>
+public <A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease">LeaseRenewalManager</A> <B>getLeaseRenewalManager</B>()</PRE>
+<DL>
+<DD>Returns the instance of the <code>LeaseRenewalManager</code> class
+ that was either passed into the constructor, or that was created
+ as a result of <code>null</code> being input to that parameter.
+ <p>
+ The object returned by this method manages the leases requested and
+ held by the <code>JoinManager</code>. Although it may also manage
+ leases unrelated to the join process that are requested and held by
+ the service itself, the leases with which the <code>JoinManager</code>
+ is concerned are the leases that correspond to the service registration
+ requests made with each lookup service the service wishes to join.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the instance of the <code>LeaseRenewalManager</code> class
+         that was either passed into the constructor, or that was
+         created as a result of <code>null</code> being input to that
+         parameter.<DT><B>See Also:</B><DD><A HREF="../../../net/jini/discovery/DiscoveryManagement.html" title="interface in net.jini.discovery"><CODE>DiscoveryManagement</CODE></A>, 
+<A HREF="../../../net/jini/lease/LeaseRenewalManager.html" title="class in net.jini.lease"><CODE>LeaseRenewalManager</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getJoinSet()"><!-- --></A><H3>
+getJoinSet</H3>
+<PRE>
+public <A HREF="../../../net/jini/core/lookup/ServiceRegistrar.html" title="interface in net.jini.core.lookup">ServiceRegistrar</A>[] <B>getJoinSet</B>()</PRE>
+<DL>
+<DD>Returns an array of <code>ServiceRegistrar</code> objects, each
+ corresponding to a lookup service with which the service is currently
+ registered (joined). If there are no lookup services with which the
+ service is currently registered, this method returns the empty array.
+ This method returns a new array upon each invocation.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>array of instances of <code>ServiceRegistrar</code>, each
+         corresponding to a lookup service with which the service is
+         currently registered<DT><B>See Also:</B><DD><A HREF="../../../net/jini/core/lookup/ServiceRegistrar.html" title="interface in net.jini.core.lookup"><CODE>ServiceRegistrar</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getAttributes()"><!-- --></A><H3>
+getAttributes</H3>
+<PRE>
+public <A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[] <B>getAttributes</B>()</PRE>
+<DL>
+<DD>Returns an array containing the set of attributes currently associated
+ with the service. If the service is not currently associated with an
+ attribute set, this method returns the empty array. This method returns
+ a new array upon each invocation.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>array of instances of <code>Entry</code> consisting of the
+         set of attributes with which the service is registered in
+         each lookup service that it has joined<DT><B>See Also:</B><DD><A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry"><CODE>Entry</CODE></A>, 
+<A HREF="../../../net/jini/lookup/JoinManager.html#setAttributes(net.jini.core.entry.Entry[])"><CODE>setAttributes(net.jini.core.entry.Entry[])</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAttributes(net.jini.core.entry.Entry[])"><!-- --></A><H3>
+addAttributes</H3>
+<PRE>
+public void <B>addAttributes</B>(<A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets)</PRE>
+<DL>
+<DD>Associates a new set of attributes with the service, in addition to
+ the service's current set of attributes. The association of this new
+ set of attributes with the service will be propagated to each lookup
+ service with which the service is registered. Note that this
+ propagation is performed asynchronously, thus there is no guarantee
+ that the propagation of the attributes to all lookup services with
+ which the service is registered will have completed upon return from
+ this method.
+ <p>
+ An invocation of this method with duplicate elements in the 
+ <code>attrSets</code> parameter (where duplication means attribute
+ equality as defined by calling the <code>MarshalledObject.equals</code>
+ method on field values) is equivalent to performing the invocation
+ with the duplicates removed from that parameter.
+ <p>
+ Note that because there is no guarantee that attribute propagation
+ will have completed upon return from this method, services that 
+ invoke this method must take care not to modify the contents of the 
+ <code>attrSets</code> parameter. Doing so could cause the service's
+ attribute state to be corrupted or inconsistent on a subset of the
+ lookup services with which the service is registered as compared with
+ the state reflected on the remaining lookup services. It is for this
+ reason that the effects of modifying the contents of the
+ <code>attrSets</code> parameter, after this method is invoked, are
+ undefined.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>attrSets</CODE> - array of <code>Entry</code> consisting of the
+                 attribute sets with which to augment the service's
+                 current set of attributes
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if either <code>null</code> is
+         input to the <code>attrSets</code> parameter, or one or more
+         of the elements of the <code>attrSets</code> parameter is
+         <code>null</code><DT><B>See Also:</B><DD><A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry"><CODE>Entry</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAttributes(net.jini.core.entry.Entry[], boolean)"><!-- --></A><H3>
+addAttributes</H3>
+<PRE>
+public void <B>addAttributes</B>(<A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets,
+                          boolean&nbsp;checkSC)</PRE>
+<DL>
+<DD>Associates a new set of attributes with the service, in addition to
+ the service's current set of attributes. The association of this new
+ set of attributes with the service will be propagated to each lookup
+ service with which the service is registered. Note that this
+ propagation is performed asynchronously, thus there is no guarantee
+ that the propagation of the attributes to all lookup services with
+ which the service is registered will have completed upon return from
+ this method.
+ <p>
+ An invocation of this method with duplicate elements in the 
+ <code>attrSets</code> parameter (where duplication means attribute
+ equality as defined by calling the <code>MarshalledObject.equals</code>
+ method on field values) is equivalent to performing the invocation
+ with the duplicates removed from that parameter.
+ <p>
+ Note that because there is no guarantee that attribute propagation
+ will have completed upon return from this method, services that 
+ invoke this method must take care not to modify the contents of the 
+ <code>attrSets</code> parameter. Doing so could cause the service's
+ attribute state to be corrupted or inconsistent on a subset of the
+ lookup services with which the service is registered as compared with
+ the state reflected on the remaining lookup services. It is for this
+ reason that the effects of modifying the contents of the
+ <code>attrSets</code> parameter, after this method is invoked, are
+ undefined.
+ <p>
+ A service typically employs this version of <code>addAttributes</code> 
+ to prevent clients or other services from attempting to add what are
+ referred to as "service controlled attributes" to the service's set.
+ A service controlled attribute is an attribute that implements the
+ <code>ServiceControlled</code> marker interface.
+ <p>
+ Consider a printer service. With printers, there are often times error
+ conditions, that only the printer can detect (for example, a paper
+ jam or a toner low condition). To report conditions such as these to
+ interested parties, the printer typically adds an attribute to its
+ attribute set, resulting in an event being sent that notifies clients
+ that have registered interest in such events. When the condition is
+ corrected, the printer would then remove the attribute from its set
+ by invoking the <code>modifyAttributes</code> method in the appropriate
+ manner.
+ <p>
+ Attributes representing conditions that only the service can know about
+ or control are good candidates for being defined as service controlled
+ attributes. That is, the service provider (the developer of the printer
+ service for example) would define the attributes that represent
+ conditions such as those just described to implement the
+ <code>ServiceControlled</code> marker interface. Thus, when other
+ entities attempt to add new attributes, services that wish to employ
+ such service controlled attributes should ultimately invoke only this
+ version of <code>addAttributes</code> (with the <code>checkSC</code>
+ parameter set to <code>true</code>), resulting in a
+ <code>SecurityException</code> if any of the attributes being added
+ happen to be service controlled attributes. In this way, only the
+ printer itself would be able to set a "paper jammed" or "toner low"
+ attribute, not some arbitrary client.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>attrSets</CODE> - array of <code>Entry</code> consisting of the
+                 attribute sets with which to augment the service's
+                 current set of attributes<DD><CODE>checkSC</CODE> - <code>boolean</code> flag indicating whether the
+                 elements of the set of attributes to add should be
+                 checked to determine if they are service controlled
+                 attributes
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if either <code>null</code> is
+         input to the <code>attrSets</code> parameter, or one or more
+         of the elements of the <code>attrSets</code> parameter is
+         <code>null</code>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/SecurityException.html" title="class or interface in java.lang">SecurityException</A></CODE> - if the <code>checkSC</code>
+         parameter is <code>true</code>, and at least one of the
+         attributes to be added is an instance of the
+         <code>ServiceControlled</code> marker interface<DT><B>See Also:</B><DD><A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry"><CODE>Entry</CODE></A>, 
+<A HREF="../../../net/jini/lookup/entry/ServiceControlled.html" title="interface in net.jini.lookup.entry"><CODE>ServiceControlled</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setAttributes(net.jini.core.entry.Entry[])"><!-- --></A><H3>
+setAttributes</H3>
+<PRE>
+public void <B>setAttributes</B>(<A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets)</PRE>
+<DL>
+<DD>Replaces the service's current set of attributes with a new set of
+ attributes. The association of this new set of attributes with the
+ service will be propagated to each lookup service with which the
+ service is registered. Note that this propagation is performed
+ asynchronously, thus there is no guarantee that the propagation of
+ the attributes to all lookup services with which the service is
+ registered will have completed upon return from this method.
+ <p>
+ An invocation of this method with duplicate elements in the 
+ <code>attrSets</code> parameter (where duplication means attribute
+ equality as defined by calling the <code>MarshalledObject.equals</code>
+ method on field values) is equivalent to performing the invocation
+ with the duplicates removed from that parameter.
+ <p>
+ Note that because there is no guarantee that attribute propagation
+ will have completed upon return from this method, services that 
+ invoke this method must take care not to modify the contents of the 
+ <code>attrSets</code> parameter. Doing so could cause the service's
+ attribute state to be corrupted or inconsistent on a subset of the
+ lookup services with which the service is registered as compared with
+ the state reflected on the remaining lookup services. It is for this
+ reason that the effects of modifying the contents of the
+ <code>attrSets</code> parameter, after this method is invoked, are
+ undefined.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>attrSets</CODE> - array of <code>Entry</code> consisting of the
+                 attribute sets with which to replace the service's
+                 current set of attributes
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/NullPointerException.html" title="class or interface in java.lang">NullPointerException</A></CODE> - if either <code>null</code> is
+         input to the <code>attrSets</code> parameter, or one or more
+         of the elements of the <code>attrSets</code> parameter is
+         <code>null</code>.<DT><B>See Also:</B><DD><A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry"><CODE>Entry</CODE></A>, 
+<A HREF="../../../net/jini/lookup/JoinManager.html#getAttributes()"><CODE>getAttributes()</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="modifyAttributes(net.jini.core.entry.Entry[], net.jini.core.entry.Entry[])"><!-- --></A><H3>
+modifyAttributes</H3>
+<PRE>
+public void <B>modifyAttributes</B>(<A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSetTemplates,
+                             <A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets)</PRE>
+<DL>
+<DD>Changes the service's current set of attributes using the same
+ semantics as the <code>modifyAttributes</code> method of the
+ <code>ServiceRegistration</code> class.
+ <p>
+ The association of the new set of attributes with the service will
+ be propagated to each lookup service with which the service is
+ registered. Note that this propagation is performed asynchronously,
+ thus there is no guarantee that the propagation of the attributes to
+ all lookup services with which the service is registered will have
+ completed upon return from this method.
+ <p>
+ Note that if the length of the array containing the templates does
+ not equal the length of the array containing the modifications, an
+ <code>IllegalArgumentException</code> will be thrown and propagated
+ through this method.
+ <p>
+ Note also that because there is no guarantee that attribute propagation
+ will have completed upon return from this method, services that 
+ invoke this method must take care not to modify the contents of the 
+ <code>attrSets</code> parameter. Doing so could cause the service's
+ attribute state to be corrupted or inconsistent on a subset of the
+ lookup services with which the service is registered as compared with
+ the state reflected on the remaining lookup services. It is for this
+ reason that the effects of modifying the contents of the
+ <code>attrSets</code> parameter, after this method is invoked, are
+ undefined.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>attrSetTemplates</CODE> - array of <code>Entry</code> used to identify
+                         which elements to modify from the service's
+                         current set of attributes<DD><CODE>attrSets</CODE> - array of <code>Entry</code> containing the
+                         actual modifications to make in the matching
+                         sets found using the 
+                         <code>attrSetTemplates</code> parameter
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the array containing the
+         templates does not equal the length of the array containing the
+         modifications<DT><B>See Also:</B><DD><A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry"><CODE>Entry</CODE></A>, 
+<A HREF="../../../net/jini/core/lookup/ServiceRegistration.html#modifyAttributes(net.jini.core.entry.Entry[], net.jini.core.entry.Entry[])"><CODE>ServiceRegistration.modifyAttributes(net.jini.core.entry.Entry[], net.jini.core.entry.Entry[])</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="modifyAttributes(net.jini.core.entry.Entry[], net.jini.core.entry.Entry[], boolean)"><!-- --></A><H3>
+modifyAttributes</H3>
+<PRE>
+public void <B>modifyAttributes</B>(<A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSetTemplates,
+                             <A HREF="../../../net/jini/core/entry/Entry.html" title="interface in net.jini.core.entry">Entry</A>[]&nbsp;attrSets,
+                             boolean&nbsp;checkSC)</PRE>
+<DL>
+<DD>Changes the service's current set of attributes using the same
+ semantics as the <code>modifyAttributes</code> method of the
+ <code>ServiceRegistration</code> class.
+ <p>
+ The association of the new set of attributes with the service will
+ be propagated to each lookup service with which the service is
+ registered. Note that this propagation is performed asynchronously,
+ thus there is no guarantee that the propagation of the attributes to
+ all lookup services with which the service is registered will have
+ completed upon return from this method.
+ <p>
+ Note that if the length of the array containing the templates does
+ not equal the length of the array containing the modifications, an
+ <code>IllegalArgumentException</code> will be thrown and propagated
+ through this method.
+ <p>
+ Note also that because there is no guarantee that attribute propagation
+ will have completed upon return from this method, services that 
+ invoke this method must take care not to modify the contents of the 
+ <code>attrSets</code> parameter. Doing so could cause the service's
+ attribute state to be corrupted or inconsistent on a subset of the
+ lookup services with which the service is registered as compared with
+ the state reflected on the remaining lookup services. It is for this
+ reason that the effects of modifying the contents of the
+ <code>attrSets</code> parameter, after this method is invoked, are
+ undefined.
+ <p>
+ A service typically employs this version of 
+ <code>modifyAttributes</code> to prevent clients or other services
+ from attempting to modify what are referred to as "service controlled
+ attributes" in the service's set. A service controlled attribute is an
+ attribute that implements the <code>ServiceControlled</code> marker
+ interface.
+ <p>
+ Attributes representing conditions that only the service can know about
+ or control are good candidates for being defined as service controlled
+ attributes. When other entities attempt to modify a service's
+ attributes, if the service wishes to employ such service controlled
+ attributes, the service should ultimately invoke only this version 
+ of <code>modifyAttributes</code> (with the <code>checkSC</code>
+ parameter set to <code>true</code>), resulting in a
+ <code>SecurityException</code> if any of the attributes being modified
+ happen to be service controlled attributes.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>attrSetTemplates</CODE> - array of <code>Entry</code> used to identify
+                         which elements to modify from the service's
+                         current set of attributes<DD><CODE>attrSets</CODE> - array of <code>Entry</code> containing the
+                         actual modifications to make in the matching
+                         sets found using the 
+                         <code>attrSetTemplates</code> parameter<DD><CODE>checkSC</CODE> - <code>boolean</code> flag indicating whether the

[... 206 lines stripped ...]