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

svn commit: r781470 [5/11] - /websites/staging/river/trunk/content/river/doc/api/net/jini/jeri/

Added: websites/staging/river/trunk/content/river/doc/api/net/jini/jeri/BasicJeriExporter.html
==============================================================================
--- websites/staging/river/trunk/content/river/doc/api/net/jini/jeri/BasicJeriExporter.html (added)
+++ websites/staging/river/trunk/content/river/doc/api/net/jini/jeri/BasicJeriExporter.html Fri Dec 24 20:32:23 2010
@@ -0,0 +1,935 @@
+<!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:18 EST 2010 -->
+<TITLE>
+BasicJeriExporter (Apache River v2.1.2-SNAPSHOT API Documentation)
+</TITLE>
+
+<META NAME="keywords" CONTENT="net.jini.jeri.BasicJeriExporter class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="BasicJeriExporter (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/BasicJeriExporter.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/jeri/BasicInvocationHandler.html" title="class in net.jini.jeri"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../net/jini/jeri/BasicJeriTrustVerifier.html" title="class in net.jini.jeri"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?net/jini/jeri/BasicJeriExporter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="BasicJeriExporter.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.jeri</FONT>
+<BR>
+Class BasicJeriExporter</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.jeri.BasicJeriExporter</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../net/jini/export/Exporter.html" title="interface in net.jini.export">Exporter</A></DD>
+</DL>
+<HR>
+<DL>
+<DT><PRE>public final class <B>BasicJeriExporter</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><DT>implements <A HREF="../../../net/jini/export/Exporter.html" title="interface in net.jini.export">Exporter</A></DL>
+</PRE>
+
+<P>
+An <code>Exporter</code> implementation for exporting
+ a remote object to use Jini extensible remote invocation
+ (Jini ERI).  Typically, instances of this class should be
+ obtained from a <A HREF="../../../net/jini/config/Configuration.html" title="interface in net.jini.config"><CODE>Configuration</CODE></A> rather than being explicitly
+ constructed.
+ Each instance of <code>BasicJeriExporter</code>
+ can export only a single remote object.
+
+ <p>The following properties (defined during construction) govern
+ invocation behavior and other characteristics of the exported remote
+ object and its proxy:
+ <ul>
+ <li><A HREF="../../../net/jini/jeri/ServerEndpoint.html" title="interface in net.jini.jeri"><CODE>ServerEndpoint</CODE></A>: the <code>ServerEndpoint</code> over
+ which calls are accepted.
+
+ <li><p><A HREF="../../../net/jini/jeri/InvocationLayerFactory.html" title="interface in net.jini.jeri"><CODE>InvocationLayerFactory</CODE></A>: a factory used to obtain the remote
+ object's proxy and invocation dispatcher.
+
+ <li><p><i>enableDGC</i> flag: if <code>true</code>, distributed
+ garbage collection (DGC) is enabled for the exported remote object,
+ and the <A HREF="../../../net/jini/jeri/BasicObjectEndpoint.html" title="class in net.jini.jeri"><CODE>BasicObjectEndpoint</CODE></A> produced by this exporter
+ participates in DGC and thus constitutes a strong remote reference
+ to the remote object; if <code>false</code>, DGC is not enabled for
+ the remote object, and the <code>BasicObjectEndpoint</code> does
+ not participate in DGC and thus is a weak remote reference, so it
+ does not prevent the remote object from being garbage collected.
+
+ <li><p><i>keepAlive</i> flag: if <code>true</code>, the virtual
+ machine is kept alive (with a non-daemon thread) while the remote
+ object remains exported via this exporter.
+
+ <li><p><A HREF="../../../net/jini/id/Uuid.html" title="class in net.jini.id"><CODE>Uuid</CODE></A>: the object identifier to use for the
+ remote object; if <code>null</code>, a unique object identifier is
+ chosen for the remote object using <A HREF="../../../net/jini/id/UuidFactory.html#generate()"><CODE>UuidFactory.generate</CODE></A>.
+ </ul>
+
+ <p>If DGC is not enabled for a remote object, then the
+ implementation always only weakly references the remote object.  If
+ DGC is enabled for a remote object, then the implementation weakly
+ references the remote object when its referenced set is empty and
+ strongly references the remote object when its referenced set is
+ not empty (see below).  If the implementation weakly references the
+ remote object and the weak reference is cleared, the remote object
+ becomes effectively unexported.
+
+ <p>Enabling DGC is not advisable in some circumstances.  DGC should
+ not be enabled for a remote object exported with a well known
+ object identifier.  Enabling DGC with a secure remote object is
+ generally discouraged, because DGC communication is always made in
+ a client-side context in which there are no client constraints and
+ no client subject, so it can leave the remote object open to denial
+ of service attacks.  Some transport providers may not support making
+ requests without a client subject, so even if DGC is enabled in the
+ case where such a transport provider is used, DGC will be effectively
+ disabled on the client side.
+
+ <p>Multiple remote objects can be exported on the same server endpoint,
+ and the same remote object can be exported multiple times on different
+ server endpoints with the only restriction being that a given pair of
+ object identifier and listen endpoint (derived from the server endpoint)
+ can only have one active export at any given time.
+ 
+ <p>Two instances of this class are equal only if they are references to
+ the same (<code>==</code>) object.
+ 
+ <p>The server endpoint is not transmitted in the remote reference; only the
+ derived client endpoint is transmitted.
+
+ <p>Remote objects exported with instances of this class can call <A HREF="../../../net/jini/export/ServerContext.html#getServerContextElement(java.lang.Class)"><CODE>ServerContext.getServerContextElement</CODE></A>, passing the class <A HREF="../../../net/jini/io/context/ClientSubject.html" title="interface in net.jini.io.context"><CODE>ClientSubject</CODE></A> to obtain the authenticated identity of the client (if
+ any) for an incoming remote call, or passing the class <A HREF="../../../net/jini/io/context/ClientHost.html" title="interface in net.jini.io.context"><CODE>ClientHost</CODE></A> to obtain the address of the client host.
+ 
+ <p>For remote objects exported with instances of this class, there is no
+ automatic replacement of the proxy for the remote object during
+ marshalling; either the proxy must be passed explicitly, or the remote
+ object implementation class must be serializable and have a
+ <code>writeReplace</code> method that returns its proxy.
+
+ <h4>Distributed Garbage Collection</h4>
+
+ The <code>BasicJeriExporter</code> class acts as the server-side
+ DGC implementation for all remote objects exported with DGC enabled
+ using its instances.
+
+ <p>An entity known as the <i>DGC client</i> tracks the existence
+ and reachability of live remote references
+ (<code>BasicObjectEndpoint</code> instances that participate in
+ DGC) for a <code>BasicObjectEndpoint</code> class in some
+ (potentially) remote virtual machine.  A DGC client is identified
+ by a universally unique identifier (a <code>Uuid</code>).  A DGC
+ client sends <i>dirty calls</i> and <i>clean calls</i> to the
+ <A HREF="../../../net/jini/jeri/Endpoint.html" title="interface in net.jini.jeri"><CODE>Endpoint</CODE></A> of a live remote reference to inform the
+ server-side DGC implementation when the number of live remote
+ references to a given remote object it is tracking increases from
+ zero to greater than zero and decreases from greater than zero to
+ zero, respectively.  A DGC client also sends dirty calls to the
+ <code>Endpoint</code> of live remote references it is tracking to
+ renew its lease.  The client-side behavior of dirty and clean calls
+ is specified by <A HREF="../../../net/jini/jeri/BasicObjectEndpoint.html" title="class in net.jini.jeri"><CODE>BasicObjectEndpoint</CODE></A>.
+
+ <p>On the server side, for every remote object exported with DGC
+ enabled, the implementation maintains a <i>referenced set</i>,
+ which contains the <code>Uuid</code>s of the DGC clients that are
+ known to have live remote references to the remote object.  The
+ contents of the referenced set are modified as a result of dirty
+ calls, clean calls, and expiration of leases (see below).  While
+ the referenced set is not empty, the implementation strongly
+ references the remote object, so that it will not be garbage
+ collected.  While the referenced set is empty, the implementation
+ only weakly references the remote object, so that it may be garbage
+ collected (if it is not otherwise strongly reachable locally).  If
+ a remote object is garbage collected, it becomes effectively
+ unexported.  If a remote object that is an instance of <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/server/Unreferenced.html" title="class or interface in java.rmi.server"><CODE>Unreferenced</CODE></A> is exported with DGC enabled, then whenever the size
+ of its referenced set transitions from greater than zero to zero,
+ its <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/server/Unreferenced.html#unreferenced()" title="class or interface in java.rmi.server"><CODE>unreferenced</CODE></A> method will be
+ invoked (before the strong reference is dropped).  Note that a
+ referenced set spans multiple exports of the same (identical)
+ remote object with <code>BasicJeriExporter</code>.
+
+ <p>For every <code>RequestDispatcher</code> passed by
+ <code>BasicJeriExporter</code> to a <code>ListenEndpoint</code> as
+ part of exporting, whenever it has at least one remote object
+ exported with DGC enabled, it also has an implicitly exported
+ remote object that represents the server-side DGC implementation.
+ This remote object is effectively exported with an object
+ identifier of <code>d32cd1bc-273c-11b2-8841-080020c9e4a1</code> and
+ an <code>InvocationDispatcher</code> that behaves like a <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html" title="class in net.jini.jeri"><CODE>BasicInvocationDispatcher</CODE></A> with no server constraints, with a
+ <A HREF="../../../net/jini/jeri/BasicInvocationDispatcher.html#createMarshalInputStream(java.lang.Object, net.jini.jeri.InboundRequest, boolean, java.util.Collection)"><CODE>createMarshalInputStream</CODE></A> implementation that returns a <A HREF="../../../net/jini/io/MarshalInputStream.html" title="class in net.jini.io"><CODE>MarshalInputStream</CODE></A> that ignores codebase annotations, and with
+ support for at least the following remote methods:
+
+ <pre>
+     long dirty(Uuid clientID, long sequenceNum, Uuid[] ids)
+         throws <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/RemoteException.html" title="class or interface in java.rmi"><CODE>RemoteException</CODE></A>;
+
+     void clean(Uuid clientID, long sequenceNum, Uuid[] ids, boolean strong)
+         throws RemoteException;
+ </pre>
+
+ <code>clientID</code> identifies the DGC client that is making the
+ dirty or clean call, and <code>sequenceNum</code> identifies the
+ sequence number of the dirty or clean call with respect to other
+ dirty and clean calls from the same DGC client.  The sequence
+ numbers identify the correct order of semantic interpretation of
+ dirty and clean calls from the same DGC client, regardless of the
+ order in which they arrive.  The well-known object identifier for
+ the server-side DGC implementation is reserved; attempting to
+ export any other remote object with that object identifier always
+ throws an <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/server/ExportException.html" title="class or interface in java.rmi.server"><CODE>ExportException</CODE></A>.
+
+ <p>A dirty call is processed as follows:
+
+ <ul>
+
+ <li>It establishes or renews the DGC lease for the identified DGC
+ client.  The duration of the granted lease, which is chosen by the
+ implementation, is conveyed as the value returned by the dirty
+ call, in milliseconds starting from the some time during the
+ processing of the dirty call.  While the lease for a DGC client is
+ valid (not expired), the DGC client is preserved in referenced sets
+ of exported remote objects.
+
+ <li><p>It adds the DGC client's <code>Uuid</code> to the referenced
+ sets of the exported remote objects identified by <code>ids</code>,
+ if any, so that they are prevented from being garbage collected.
+ For each <code>Uuid</code> in <code>ids</code>:
+
+ <blockquote>
+
+ The identified remote object is the remote object exported with
+ that <code>Uuid</code> on the <code>ListenEndpoint</code> (and thus
+ <code>RequestDispatcher</code>) that the dirty call was received
+ on.  If no such exported remote object exists (for example, if it
+ has been garbage collected), then that <code>Uuid</code> in
+ <code>ids</code> is ignored.  If the sequence number is less than
+ the last recorded sequence number of a dirty or clean call for the
+ identified remote object from the same DGC client, then the remote
+ object's referenced set is not modified.  Otherwise, the DGC
+ client's <code>Uuid</code> is added to the remote object's
+ referenced set (if not already present).  If this addition causes
+ the referenced set to transition from empty to non-empty, then the
+ implementation starts strongly referencing the remote object.
+
+ </blockquote>
+
+ </ul>
+
+ <p>A clean call is processed as follows:
+
+ <ul>
+
+ <li>It removes the DGC client's <code>Uuid</code> from the
+ referenced sets of the exported remote objects identified by
+ <code>ids</code>, so that they are not prevented from being garbage
+ collected by the given DGC client.  For each <code>Uuid</code> in
+ <code>ids</code>:
+
+ <blockquote>
+
+ <p>The identified remote object is the remote object exported with
+ that <code>Uuid</code> on the <code>ListenEndpoint</code> (and thus
+ <code>RequestDispatcher</code>) that the dirty call was received
+ on.  If no such exported remote object exists (for example, if it
+ has been garbage collected), then that <code>Uuid</code> in
+ <code>ids</code> is ignored.  If the sequence number is less then
+ the last recorded sequence number of a dirty or clean call for the
+ identified remote object from the same DGC client, then the remote
+ object's referenced set is not modified.  Otherwise, the DGC
+ client's <code>Uuid</code> is removed from the remote object's
+ referenced set (if it is present).  If this removal causes the
+ referenced set to transition from non-empty to empty, then the
+ implementation starts only weakly referencing the remote object
+ (and before doing so, if the remote object is an instance of
+ <code>Unreferenced</code>, its <code>unreferenced</code> method is
+ invoked).  If <code>strong</code> is <code>true</code>, then a
+ record is kept of the specified sequence number from the DGC client
+ for some reasonable period of time, in the event of a dirty call
+ that might arrive later with a lower sequence number.
+
+ </blockquote>
+
+ </ul>
+
+ <p>If the implementation detects that the most recently granted DGC
+ lease for a given DGC client has expired, then it assumes that the
+ DGC client has abnormally terminated, and the DGC client's
+ <code>Uuid</code> is removed from the referenced sets of all
+ exported remote objects.  If this removal causes a referenced set
+ to transition from non-empty to empty, then the implementation
+ starts only weakly referencing the corresponding remote object (and
+ before doing so, if the remote object is an instance of
+ <code>Unreferenced</code>, its <code>unreferenced</code> method is
+ invoked).
+
+ <p>Unexporting a remote object with a
+ <code>BasicJeriExporter</code> causes the removal of DGC client
+ <code>Uuid</code>s from the remote object's referenced set that
+ were only present because of dirty calls that were received as a
+ result of exporting it with that <code>BasicJeriExporter</code>.
+ If the remote object remains exported with DGC enabled by another
+ <code>BasicJeriExporter</code> and this removal causes the
+ referenced set to transition from non-empty to empty, then the
+ implementation starts only weakly referencing the remote object
+ (and before doing so, if the remote object is an instance of
+ <code>Unreferenced</code>, its <code>unreferenced</code> method is
+ invoked).
+
+ <p>When the implementation invokes a remote object's
+ <code>unreferenced</code> method, it does so with the security
+ context and context class loader in effect when the remote object
+ was exported.  If the remote object is currently exported more than
+ once, then the security context and context class loader in effect
+ for any one of those exports are used.
+<P>
+
+<P>
+<DL>
+<DT><B>Since:</B></DT>
+  <DD>2.0</DD>
+<DT><B>Author:</B></DT>
+  <DD>Sun Microsystems, Inc.</DD>
+<DT><B>Implementation Specifics:</B></DT>
+  <DD><p>This implementation 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.jeri.BasicJeriExporter</code> to log
+ information at the following levels:
+
+ <table summary="Describes what is logged by BasicJeriExporter at various
+        logging levels" border=1 cellpadding=5>
+
+ <tr> <th> Level <th> Description
+
+ <tr> <td> <A HREF="../../../com/sun/jini/logging/Levels.html#FAILED"><CODE>FAILED</CODE></A> <td> incoming request for
+ unrecognized object identifier (no such object)
+
+ <tr> <td> <A HREF="../../../com/sun/jini/logging/Levels.html#FAILED"><CODE>FAILED</CODE></A> <td> I/O exception
+ dispatching incoming request
+
+ <tr> <td> <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html#FINE" title="class or interface in java.util.logging"><CODE>FINE</CODE></A> <td> successful export of object
+ 
+ <tr> <td> <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html#FINE" title="class or interface in java.util.logging"><CODE>FINE</CODE></A> <td> attempted unexport of object
+
+ <tr> <td> <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html#FINE" title="class or interface in java.util.logging"><CODE>FINE</CODE></A> <td> garbage collection of
+ exported object
+
+ <tr> <td> <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html#FINE" title="class or interface in java.util.logging"><CODE>FINEST</CODE></A> <td> detailed implementation
+ activity
+
+ </table></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/jeri/BasicJeriExporter.html#BasicJeriExporter(net.jini.jeri.ServerEndpoint, net.jini.jeri.InvocationLayerFactory)">BasicJeriExporter</A></B>(<A HREF="../../../net/jini/jeri/ServerEndpoint.html" title="interface in net.jini.jeri">ServerEndpoint</A>&nbsp;se,
+                  <A HREF="../../../net/jini/jeri/InvocationLayerFactory.html" title="interface in net.jini.jeri">InvocationLayerFactory</A>&nbsp;ilf)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>BasicJeriExporter</code> with the given server
+ endpoint and invocation layer factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicJeriExporter.html#BasicJeriExporter(net.jini.jeri.ServerEndpoint, net.jini.jeri.InvocationLayerFactory, boolean, boolean)">BasicJeriExporter</A></B>(<A HREF="../../../net/jini/jeri/ServerEndpoint.html" title="interface in net.jini.jeri">ServerEndpoint</A>&nbsp;se,
+                  <A HREF="../../../net/jini/jeri/InvocationLayerFactory.html" title="interface in net.jini.jeri">InvocationLayerFactory</A>&nbsp;ilf,
+                  boolean&nbsp;enableDGC,
+                  boolean&nbsp;keepAlive)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>BasicJeriExporter</code> with the given server
+ endpoint, invocation layer factory, <code>enableDGC</code> flag, and
+ <code>keepAlive</code> flag.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicJeriExporter.html#BasicJeriExporter(net.jini.jeri.ServerEndpoint, net.jini.jeri.InvocationLayerFactory, boolean, boolean, net.jini.id.Uuid)">BasicJeriExporter</A></B>(<A HREF="../../../net/jini/jeri/ServerEndpoint.html" title="interface in net.jini.jeri">ServerEndpoint</A>&nbsp;se,
+                  <A HREF="../../../net/jini/jeri/InvocationLayerFactory.html" title="interface in net.jini.jeri">InvocationLayerFactory</A>&nbsp;ilf,
+                  boolean&nbsp;enableDGC,
+                  boolean&nbsp;keepAlive,
+                  <A HREF="../../../net/jini/id/Uuid.html" title="class in net.jini.id">Uuid</A>&nbsp;id)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>BasicJeriExporter</code> with the given server
+ endpoint, invocation layer factory, <code>enableDGC</code> flag,
+ <code>keepAlive</code> flag, and object identifier.</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;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicJeriExporter.html#export(java.rmi.Remote)">export</A></B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A>&nbsp;impl)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exports the specified remote object and returns a proxy for the
+ remote object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicJeriExporter.html#getEnableDGC()">getEnableDGC</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if DGC is enabled on the server endpoint to
+ the object corresponding to this exporter; otherwise
+ returns <code>false</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../net/jini/jeri/InvocationLayerFactory.html" title="interface in net.jini.jeri">InvocationLayerFactory</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicJeriExporter.html#getInvocationLayerFactory()">getInvocationLayerFactory</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>InvocationLayerFactory</code> for this
+ exporter.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicJeriExporter.html#getKeepAlive()">getKeepAlive</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the virtual machine is kept alive while
+ the object corresponding to this exporter is exported; otherwise
+ returns <code>false</code>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../net/jini/id/Uuid.html" title="class in net.jini.id">Uuid</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicJeriExporter.html#getObjectIdentifier()">getObjectIdentifier</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the object identifier for this exporter.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../net/jini/jeri/ServerEndpoint.html" title="interface in net.jini.jeri">ServerEndpoint</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicJeriExporter.html#getServerEndpoint()">getServerEndpoint</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the server endpoint for this exporter.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicJeriExporter.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the string representation for this exporter.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../net/jini/jeri/BasicJeriExporter.html#unexport(boolean)">unexport</A></B>(boolean&nbsp;force)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unexports the remote object exported via the exporter's
+ <A HREF="../../../net/jini/jeri/BasicJeriExporter.html#export(java.rmi.Remote)"><CODE>export</CODE></A> method such that incoming remote calls
+ to the object identifier in this exporter are no longer accepted
+ through the server endpoint in this exporter.</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#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="BasicJeriExporter(net.jini.jeri.ServerEndpoint, net.jini.jeri.InvocationLayerFactory)"><!-- --></A><H3>
+BasicJeriExporter</H3>
+<PRE>
+public <B>BasicJeriExporter</B>(<A HREF="../../../net/jini/jeri/ServerEndpoint.html" title="interface in net.jini.jeri">ServerEndpoint</A>&nbsp;se,
+                         <A HREF="../../../net/jini/jeri/InvocationLayerFactory.html" title="interface in net.jini.jeri">InvocationLayerFactory</A>&nbsp;ilf)</PRE>
+<DL>
+<DD>Creates a new <code>BasicJeriExporter</code> with the given server
+ endpoint and invocation layer factory.  The other properties of the
+ exporter default as follows: the <code>enableDGC</code> flag is
+ <code>false</code>, the <code>keepAlive</code> flag is
+ <code>true</code>, and the object identifier is chosen by invoking
+ <A HREF="../../../net/jini/id/UuidFactory.html#generate()"><CODE>UuidFactory.generate</CODE></A>.
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>se</CODE> - the server endpoint over which calls may be accepted<DD><CODE>ilf</CODE> - the factory for creating the remote object's
+                proxy and invocation dispatcher
+<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 <code>se</code> or <code>ilf</code>
+                is <code>null</code></DL>
+</DL>
+<HR>
+
+<A NAME="BasicJeriExporter(net.jini.jeri.ServerEndpoint, net.jini.jeri.InvocationLayerFactory, boolean, boolean)"><!-- --></A><H3>
+BasicJeriExporter</H3>
+<PRE>
+public <B>BasicJeriExporter</B>(<A HREF="../../../net/jini/jeri/ServerEndpoint.html" title="interface in net.jini.jeri">ServerEndpoint</A>&nbsp;se,
+                         <A HREF="../../../net/jini/jeri/InvocationLayerFactory.html" title="interface in net.jini.jeri">InvocationLayerFactory</A>&nbsp;ilf,
+                         boolean&nbsp;enableDGC,
+                         boolean&nbsp;keepAlive)</PRE>
+<DL>
+<DD>Creates a new <code>BasicJeriExporter</code> with the given server
+ endpoint, invocation layer factory, <code>enableDGC</code> flag, and
+ <code>keepAlive</code> flag.  The object identifier is chosen by
+ invoking <A HREF="../../../net/jini/id/UuidFactory.html#generate()"><CODE>UuidFactory.generate</CODE></A>.
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>se</CODE> - the server endpoint over which calls may be accepted<DD><CODE>ilf</CODE> - the factory for creating the remote object's
+                proxy and invocation dispatcher<DD><CODE>enableDGC</CODE> - if <code>true</code>, DGC is enabled to the object
+                on this server endpoint<DD><CODE>keepAlive</CODE> - if <code>true</code>, the VM is kept alive
+                while the object (exported via this exporter) remains
+                exported
+<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 <code>se</code> or <code>ilf</code>
+                is <code>null</code></DL>
+</DL>
+<HR>
+
+<A NAME="BasicJeriExporter(net.jini.jeri.ServerEndpoint, net.jini.jeri.InvocationLayerFactory, boolean, boolean, net.jini.id.Uuid)"><!-- --></A><H3>
+BasicJeriExporter</H3>
+<PRE>
+public <B>BasicJeriExporter</B>(<A HREF="../../../net/jini/jeri/ServerEndpoint.html" title="interface in net.jini.jeri">ServerEndpoint</A>&nbsp;se,
+                         <A HREF="../../../net/jini/jeri/InvocationLayerFactory.html" title="interface in net.jini.jeri">InvocationLayerFactory</A>&nbsp;ilf,
+                         boolean&nbsp;enableDGC,
+                         boolean&nbsp;keepAlive,
+                         <A HREF="../../../net/jini/id/Uuid.html" title="class in net.jini.id">Uuid</A>&nbsp;id)</PRE>
+<DL>
+<DD>Creates a new <code>BasicJeriExporter</code> with the given server
+ endpoint, invocation layer factory, <code>enableDGC</code> flag,
+ <code>keepAlive</code> flag, and object identifier.  If
+ <code>id</code> is <code>null</code>, the object identifier is
+ chosen by invoking <A HREF="../../../net/jini/id/UuidFactory.html#generate()"><CODE>UuidFactory.generate</CODE></A>.
+<P>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>se</CODE> - the server endpoint over which calls may be accepted<DD><CODE>ilf</CODE> - the factory for creating the remote object's proxy
+                and invocation dispatcher<DD><CODE>enableDGC</CODE> - if <code>true</code>, DGC is enabled to the object
+                on this server endpoint<DD><CODE>keepAlive</CODE> - if <code>true</code>, the VM is kept alive
+                while the object (exported via this exporter) remains
+                exported<DD><CODE>id</CODE> - an object identifier or <code>null</code>
+<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 <code>se</code> or <code>ilf</code>
+                is <code>null</code></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="getServerEndpoint()"><!-- --></A><H3>
+getServerEndpoint</H3>
+<PRE>
+public <A HREF="../../../net/jini/jeri/ServerEndpoint.html" title="interface in net.jini.jeri">ServerEndpoint</A> <B>getServerEndpoint</B>()</PRE>
+<DL>
+<DD>Returns the server endpoint for this exporter.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the server endpoint</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getInvocationLayerFactory()"><!-- --></A><H3>
+getInvocationLayerFactory</H3>
+<PRE>
+public <A HREF="../../../net/jini/jeri/InvocationLayerFactory.html" title="interface in net.jini.jeri">InvocationLayerFactory</A> <B>getInvocationLayerFactory</B>()</PRE>
+<DL>
+<DD>Returns the <code>InvocationLayerFactory</code> for this
+ exporter.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the factory</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getEnableDGC()"><!-- --></A><H3>
+getEnableDGC</H3>
+<PRE>
+public boolean <B>getEnableDGC</B>()</PRE>
+<DL>
+<DD>Returns <code>true</code> if DGC is enabled on the server endpoint to
+ the object corresponding to this exporter; otherwise
+ returns <code>false</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><code>true</code> if DGC is enabled;
+                <code>false</code> otherwise</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getKeepAlive()"><!-- --></A><H3>
+getKeepAlive</H3>
+<PRE>
+public boolean <B>getKeepAlive</B>()</PRE>
+<DL>
+<DD>Returns <code>true</code> if the virtual machine is kept alive while
+ the object corresponding to this exporter is exported; otherwise
+ returns <code>false</code>.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD><code>true</code> if VM is kept alive while object is
+          exported; <code>false</code> otherwise</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getObjectIdentifier()"><!-- --></A><H3>
+getObjectIdentifier</H3>
+<PRE>
+public <A HREF="../../../net/jini/id/Uuid.html" title="class in net.jini.id">Uuid</A> <B>getObjectIdentifier</B>()</PRE>
+<DL>
+<DD>Returns the object identifier for this exporter.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the object identifier</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="export(java.rmi.Remote)"><!-- --></A><H3>
+export</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A> <B>export</B>(<A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/Remote.html" title="class or interface in java.rmi">Remote</A>&nbsp;impl)
+              throws <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/server/ExportException.html" title="class or interface in java.rmi.server">ExportException</A></PRE>
+<DL>
+<DD>Exports the specified remote object and returns a proxy for the
+ remote object.  This method cannot be called more than once to
+ export a remote object or an <code>IllegalStateException</code> will
+ be thrown.
+
+ <p>A <A HREF="../../../net/jini/jeri/BasicObjectEndpoint.html" title="class in net.jini.jeri"><CODE>BasicObjectEndpoint</CODE></A> instance is created with the object
+ identifier of this exporter, the <A HREF="../../../net/jini/jeri/Endpoint.html" title="interface in net.jini.jeri"><CODE>Endpoint</CODE></A> obtained from
+ listening on the server endpoint (see below), and the
+ <code>enableDGC</code> flag of this exporter.
+
+ <p>The client <code>Endpoint</code> for the
+ <code>BasicObjectEndpoint</code> is obtained by invoking <A HREF="../../../net/jini/jeri/ServerEndpoint.html#enumerateListenEndpoints(net.jini.jeri.ServerEndpoint.ListenContext)"><CODE>enumerateListenEndpoints</CODE></A> on
+ the server endpoint with a <A HREF="../../../net/jini/jeri/ServerEndpoint.ListenContext.html" title="interface in net.jini.jeri"><CODE>ServerEndpoint.ListenContext</CODE></A>
+ whose <A HREF="../../../net/jini/jeri/ServerEndpoint.ListenContext.html#addListenEndpoint(net.jini.jeri.ServerEndpoint.ListenEndpoint)"><CODE>addListenEndpoint</CODE></A> method is implemented as follows: <ul>
+
+ <li>Invokes <A HREF="../../../net/jini/jeri/ServerEndpoint.ListenEndpoint.html#checkPermissions()"><CODE>checkPermissions</CODE></A> on the supplied listen endpoint.
+
+ <li>If the supplied listen endpoint has the same class and is equal
+ to another listen endpoint that has already been listened on,
+ returns the <A HREF="../../../net/jini/jeri/ServerEndpoint.ListenCookie.html" title="interface in net.jini.jeri"><CODE>ServerEndpoint.ListenCookie</CODE></A> corresponding to the
+ previous <code>listen</code> operation.  Otherwise, it creates a
+ <A HREF="../../../net/jini/jeri/RequestDispatcher.html" title="interface in net.jini.jeri"><CODE>RequestDispatcher</CODE></A> to handle inbound requests dispatched by
+ the listen endpoint, invokes <A HREF="../../../net/jini/jeri/ServerEndpoint.ListenEndpoint.html#listen(net.jini.jeri.RequestDispatcher)"><CODE>listen</CODE></A> on the listen endpoint
+ (passing the request dispatcher) within an action passed to the
+ <A HREF="../../../net/jini/security/Security.html#doPrivileged(java.security.PrivilegedAction)"><CODE>Security.doPrivileged</CODE></A> method, and
+ returns the <code>ServerEndpoint.ListenCookie</code> obtained by
+ invoking <A HREF="../../../net/jini/jeri/ServerEndpoint.ListenHandle.html#getCookie()"><CODE>getCookie</CODE></A> on
+ the <A HREF="../../../net/jini/jeri/ServerEndpoint.ListenHandle.html" title="interface in net.jini.jeri"><CODE>ServerEndpoint.ListenHandle</CODE></A> returned from the
+ <code>listen</code> invocation.
+ </ul>
+
+ <p>A <code>RequestDispatcher</code> for a listen endpoint handles a
+ dispatched inbound request (when its <A HREF="../../../net/jini/jeri/RequestDispatcher.html#dispatch(net.jini.jeri.InboundRequest)"><CODE>dispatch</CODE></A> method is invoked) as follows.
+ The request dispatcher reads the object identifer of the target
+ object being invoked by invoking <A HREF="../../../net/jini/id/UuidFactory.html#read(java.io.InputStream)"><CODE>UuidFactory.read</CODE></A> on the request input stream of the inbound
+ request.  If no exported object corresponds to the object identifier
+ read, it closes the request input stream, writes <code>0x00</code>
+ to the response output stream, and closes the response output
+ stream.  Otherwise, it writes <code>0x01</code> to the response
+ output stream, and invokes the <A HREF="../../../net/jini/jeri/InvocationDispatcher.html#dispatch(java.rmi.Remote, net.jini.jeri.InboundRequest, java.util.Collection)"><CODE>dispatch</CODE></A> method on the invocation dispatcher passing the target
+ object, the inbound request, and the server context collection (see
+ below).
+
+ <p>A proxy and an invocation dispatcher are created by
+ calling the <A HREF="../../../net/jini/jeri/InvocationLayerFactory.html#createInstances(java.rmi.Remote, net.jini.jeri.ObjectEndpoint, net.jini.jeri.ServerCapabilities)"><CODE>createInstances</CODE></A> method of this exporter's invocation layer factory,
+ passing the remote object, the <code>BasicObjectEndpoint</code>, and
+ the server endpoint (as the <A HREF="../../../net/jini/jeri/ServerCapabilities.html" title="interface in net.jini.jeri"><CODE>ServerCapabilities</CODE></A>). The proxy
+ is returned by this method. The invocation dispatcher is called for
+ each incoming remote call to this exporter's object identifier
+ received from this exporter's server endpoint, passing the remote
+ object and the <A HREF="../../../net/jini/jeri/InboundRequest.html" title="interface in net.jini.jeri"><CODE>InboundRequest</CODE></A> received from the transport
+ layer.
+
+ <p>Each call to the invocation dispatcher's <A HREF="../../../net/jini/jeri/InvocationDispatcher.html#dispatch(java.rmi.Remote, net.jini.jeri.InboundRequest, java.util.Collection)"><CODE>dispatch</CODE></A> method is invoked with
+ the following thread context:
+ <ul>
+ <li><code>dispatch</code> is invoked in a <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/security/PrivilegedAction.html" title="class or interface in java.security"><CODE>PrivilegedAction</CODE></A> wrapped by a <A HREF="../../../net/jini/security/SecurityContext.html" title="interface in net.jini.security"><CODE>SecurityContext</CODE></A>
+     obtained when this method was invoked, with the <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/security/AccessControlContext.html" title="class or interface in java.security"><CODE>AccessControlContext</CODE></A> of that <code>SecurityContext</code>
+     in effect.
+ <li>The context class loader is the context class loader
+     in effect when this method was invoked.
+ <li>Each call to the dispatcher is made using <A HREF="../../../net/jini/export/ServerContext.html#doWithServerContext(java.lang.Runnable, java.util.Collection)"><CODE>ServerContext.doWithServerContext</CODE></A> with a server context
+     collection that is an unmodifiable view of the context
+     collection populated by invoking the <A HREF="../../../net/jini/jeri/InboundRequest.html#populateContext(java.util.Collection)"><CODE>populateContext</CODE></A> method on the
+     inbound request passing a modifiable collection.  The invocation
+     dispatcher's <A HREF="../../../net/jini/jeri/InvocationDispatcher.html#dispatch(java.rmi.Remote, net.jini.jeri.InboundRequest, java.util.Collection)"><CODE>dispatch</CODE></A>
+     method is invoked with the <code>impl</code>, the inbound
+     request, and that modifiable server context collection.
+ </ul>
+
+ <p>There is no replacement of the proxy for the implementation
+ object during marshalling; either the proxy must be passed
+ explicitly in a remote call, or the implementation class must be
+ serializable and have a <code>writeReplace</code> method that
+ returns the proxy.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../net/jini/export/Exporter.html#export(java.rmi.Remote)">export</A></CODE> in interface <CODE><A HREF="../../../net/jini/export/Exporter.html" title="interface in net.jini.export">Exporter</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>impl</CODE> - a remote object to export
+<DT><B>Returns:</B><DD>a proxy for the remote object
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/server/ExportException.html" title="class or interface in java.rmi.server">ExportException</A></CODE> - if an object is already exported
+                with the same object identifier and server endpoint, or
+                the invocation layer factory cannot create a proxy or
+                invocation dispatcher, or some other problem occurs while
+                exporting the object
+<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>impl</code> is <code>null</code>
+<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 an object has already been exported
+                with this <code>Exporter</code> instance
+<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 invoking the
+                <code>checkPermissions</code> method on any of the listen
+                endpoints throws a <code>SecurityException</code></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="unexport(boolean)"><!-- --></A><H3>
+unexport</H3>
+<PRE>
+public boolean <B>unexport</B>(boolean&nbsp;force)</PRE>
+<DL>
+<DD>Unexports the remote object exported via the exporter's
+ <A HREF="../../../net/jini/jeri/BasicJeriExporter.html#export(java.rmi.Remote)"><CODE>export</CODE></A> method such that incoming remote calls
+ to the object identifier in this exporter are no longer accepted
+ through the server endpoint in this exporter.
+
+ <p>If <code>force</code> is <code>true</code>, the object
+ is forcibly unexported even if there are pending or in-progress remote
+ calls to the object identifier through the server endpoint.  If
+ <code>force</code> is <code>false</code>, the object is only
+ unexported if there are no pending or in-progress remote calls to the
+ object identifier through the server endpoint.
+
+ <p>The return value is <code>true</code> if the object is (or was
+ previously) unexported, and <code>false</code> if the object is still
+ exported.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../net/jini/export/Exporter.html#unexport(boolean)">unexport</A></CODE> in interface <CODE><A HREF="../../../net/jini/export/Exporter.html" title="interface in net.jini.export">Exporter</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>force</CODE> - if <code>true</code>, the remote object will be
+ unexported even if there are remote calls pending or in progress;
+ if <code>false</code>, the remote object may only be unexported if
+ there are no known remote calls pending or in progress
+<DT><B>Returns:</B><DD><code>true</code> if the remote object is unexported when
+ this method returns and <code>false</code> otherwise
+<DT><B>Throws:</B>
+<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 an object has not been exported
+ with this <code>Exporter</code> instance</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns the string representation for this exporter.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><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></CODE> in class <CODE><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></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the string representation for this exporter</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" 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_bottom_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/BasicJeriExporter.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/jeri/BasicInvocationHandler.html" title="class in net.jini.jeri"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../net/jini/jeri/BasicJeriTrustVerifier.html" title="class in net.jini.jeri"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../index.html?net/jini/jeri/BasicJeriExporter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
+&nbsp;<A HREF="BasicJeriExporter.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_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+Copyright 2007, multiple authors.<br>Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0" target="child" >Apache License, Version 2.0</a>, see the <a href="../../../doc-files/NOTICE" target="child" >NOTICE</a> file for attributions.
+</BODY>
+</HTML>