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/08 12:35:43 UTC

svn commit: r780268 [9/28] - in /websites/staging/river/trunk/content/river/docs: ./ release-notes/ specs/ specs/images/

Added: websites/staging/river/trunk/content/river/docs/release-notes/servicediscovery.html
==============================================================================
--- websites/staging/river/trunk/content/river/docs/release-notes/servicediscovery.html (added)
+++ websites/staging/river/trunk/content/river/docs/release-notes/servicediscovery.html Wed Dec  8 11:35:41 2010
@@ -0,0 +1,663 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE- 2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+	<link href="/river/css/site.css" rel="stylesheet" type="text/css">
+	<link href="/river/css/type-settings.css" rel="stylesheet" type="text/css">
+
+	<title>Apache River - </title>
+
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body>
+<div class="white_box">
+<div class="header">
+  <div class="header_l">
+    <div class="header_r">
+    </div>
+  </div>
+</div>
+<div class="content">
+  <div class="content_l">
+    <div class="content_r">
+      <div>
+
+<!-- Banner -->
+                                                                        
+                                                                        
+            <div id="header_background">
+	<div id="river_logo">
+		<a href="/river"><img src="/river/images/apache_river_v2b_small.png"/></a>
+<img src="/river/images/apache-incubator-logo.png"/>
+
+	</div>
+	</div>
+                                    
+    <table border="0">
+    <tbody>
+        <tr>
+        <td style="overflow: hidden;" valign="top" width="100%">
+          <div class="wiki-content">
+<!--
+ ! Licensed to the Apache Software Foundation (ASF) under one
+ ! or more contributor license agreements.  See the NOTICE file
+ ! distributed with this work for additional information
+ ! regarding copyright ownership. The ASF licenses this file
+ ! to you under the Apache License, Version 2.0 (the
+ ! "License"); you may not use this file except in compliance
+ ! with the License. You may obtain a copy of the License at
+ ! 
+ !      http://www.apache.org/licenses/LICENSE-2.0
+ ! 
+ ! Unless required by applicable law or agreed to in writing, software
+ ! distributed under the License is distributed on an "AS IS" BASIS,
+ ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ! See the License for the specific language governing permissions and
+ ! limitations under the License.
+ !-->
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<body text="#000000" bgcolor="#ffffff" link="#9b37cc"
+      vlink="#cc1877" alink="#ffffff">
+
+<p><title>Jini Service Discovery Utilities Release Notes</title></p>
+<p><center>
+<h1>Jini Service Discovery Utilities
+  <BR>River v2.1.2 Release Notes
+</h1>
+</center>
+<HR>
+<UL>
+<H3>Description</H3></p>
+<p>The class
+<a href="../api/net/jini/lookup/ServiceDiscoveryManager.html"> <code>net.jini.lookup.ServiceDiscoveryManager</code></a>
+is a utility class that can be used to help a Jini technology-enabled 
+service or client (<i>Jini service</i> or <i>Jini client</i>) 
+acquire services of interest that are registered with lookup services 
+with which the service or client wishes to interact.
+<p>
+The specification for the
+<a href="../api/net/jini/lookup/ServiceDiscoveryManager.html"> <code>ServiceDiscoveryManager</code></a>
+utility is contained in the  <i>Jini Service Discovery Utilities Specification</i>, 
+which is available in <a href="../specs/html/servicediscutil-spec.html">html</a>.
+<p></p>
+<H3>Changes since the v2.0.1 release</H3>
+
+<li>[<a href='https://issues.apache.org/jira/browse/RIVER-324'>RIVER-324</a>] -         
+Under certain circumstances, the ServiceDiscoveryManager internal LookupCache 
+implementation can incorrectly  process attribute change events before the 
+lookup snapshot is processed.
+</li>
+
+<H3>Changes since the v2.0.1 release</H3>
+
+<dl>
+  <dt> <b>Configuration</b>
+  <dd> In this release, no new configuration entries have been added, nor have any other
+       changes occurred with respect to the configuration.
+       <p>
+       A full list of supported configuration entries is given in this utility's
+       <a href="../api/net/jini/lookup/ServiceDiscoveryManager.html#sdmConfigEntries"> class documentation</a>.
+       <p>
+
+<dt> <b>Logging</b>
+  <dd> In this release, no changes have occurred with respect to the logging mechanism
+       employed by the service discovery manager implementation, which logs diagnostic information to the
+       <a href="http://java.sun.com/j2se/1.4/docs/api/java/util/logging/Logger.html"> <code>Logger</code></a>
+       named <code>net.jini.lookup.ServiceDiscoveryManager</code>. For a description of the
+       information that is logged, as well as the associated logging levels, refer to the
+       <a href="../api/net/jini/lookup/ServiceDiscoveryManager.html#sdmLogging"> class documentation</a>.
+       <p>
+
+<dt> <b>Bug Fixes of Interest</b>
+  <dd> A number of bugs have been addressed in this release of the
+       service discovery manager. What follows is a description of those
+       bugs that might be of interest:
+  <p>
+
+<dt><b>4972100: SDM NPE in getServiceItems when blocking lookup called before
+filter is applied</b><dt>
+  <dd> When one of the blocking versions of the <code>lookup</code> method is
+       invoked, there are conditions in which a <code>NullPointerException</code>
+       can occur. One possible scenario in which this bug can occur is as follows:
+
+<pre><code>SDM.lookup(duration)
+  SDM creates cache ----- RegisterListenerTask(wait for events)
+                          LookupTask begins
+                            get snapshot (lookup state)
+                            -- done --
+wait(duration)
+       *** start targetted service ***
+                          NOMATCH_MATCH event received
+                          NotifyEventTask (process event)
+                          NewOldServiceTask (new service)
+                            addToMap -- (item,null)
+exit wait
+call cach.lookup()
+                            filterMaybeDiscard()
+getServiceItems()
+map(item,null) ===> NPE
+                              filter -- map(item,filteredItem)</code></pre>
+
+If the timing is right, <code>getServiceItems</code> can be entered
+       before the filter is applied and the non-<code>null</code>
+       <code>filteredItem</code> is placed in the map. If this occurs,
+       <code>getServiceItems</code> will attempt to access
+       <code>filteredItem.srvc</code>, which will result in a
+       <code>NullPointerException</code>.
+  </dd>
+  <p>
+  <dt><b>5102733: SDM cache.notifyServiceMap does not use event ID in its decision process</b><dt>
+  <dd> Prior to this release, in the method
+       <code>ServiceDiscoveryManager.LookupCacheImpl.notifyServiceMap</code>,
+       only the sequence number of the new event and the sequence number stored
+       in the <code>EventReg</code> element of the <code>eventRegMap</code> were       compared when determining whether or not there is a "gap" in the event
+       sequence; in which case, a snapshot would be requested from the associated
+       lookup service. This could result in multiple unnecessary snapshots being       requested; and thus, unnecessary network traffic and resource usage.
+       <p>
+       To understand how this problem could occur, consider the following scenario:
+
+<pre>1 activatable lookup service registered with Phoenix (or RMID)
+4 services registered with that lookup service
+1 client using a cache to discover the services
+
+>>> phoenix -stop (or rmid -stop) to stop the lookup service
+>>> all 4 services eventually discard the lookup service
+>>> the client eventually discards the lookup service
+>>> restart phoenix (or rmid) before 30 minutes have expired
+    (to restart the lookup service and recover its state before
+    the client's original event registration [E0] has a chance
+    to expire)</pre>
+
+When the client rediscovers the lookup service, its cache requests
+       a new event registration [E1]. But the lookup service still has E0
+       in its state.
+       <p>
+       When the services rediscover the lookup service, they reregister with
+       the lookup service, and the lookup service sends a serviceAdded
+       (<code>NOMATCH_MATCH</code>) event to both E0 and E1 for each of the
+       services. The cache's event listener receives both sets of events.
+       <p>
+       Prior to fixing this bug, <code>notifyServiceMap</code> only analyzed the       sequence numbers of the events. It did not distinguish which event
+       registration each event corresponded to. Because E0 was recovered after
+       the lookup service went down and was restarted, the sequence numbers
+       of the events sent to that registration were greater than
+       <code>Integer.MAX_VALUE</code>, which resulted in a "gap" in the sequence so
+       that clients would know that they might have missed events. Because E1 was
+       not interrupted by a shutdown/restart, its sequence numbers started at 0.       Thus, when serviceAdded events arrived for E0 and for E1, the sequence
+       looked something like the following to <code>notifyServiceMap</code>:
+
+<pre>event 0 --> Service0 added: Event ID = 0 - seq# 2147483650
+event 1 --> Service0 added: Event ID = 1 - seq# 0
+
+event 2 --> Service1 added: Event ID = 0 - seq# 2147483651
+event 3 --> Service1 added: Event ID = 1 - seq# 1
+
+event 4 --> Service2 added: Event ID = 0 - seq# 2147483652
+event 5 --> Service2 added: Event ID = 1 - seq# 2
+
+event 6 --> Service3 added: Event ID = 0 - seq# 2147483653
+event 7 --> Service3 added: Event ID = 1 - seq# 3</pre>
+
+Because <code>notifyServiceMap</code> did not consider the event ID,
+       it appeared to <code>notifyServiceMap</code> that it was receiving a
+       stream of events in which the sequence numbers looked like:
+
+<pre>{ 2147483650, 0, 2147483651, 1, 2147483652, 2, 2147483653, 3 }</pre>
+
+To <code>notifyServiceMap</code>, the sequence appeared to be
+       alternately "moving backward" and "moving forward" with a large
+       gap. In each case though, <code>notifyServiceMap</code> interpreted
+       the difference between sequence numbers as a gap; that is,
+
+<pre>(if event_(n+1)_seq# != 1 + event_n_seq#, then a gap is declared).</pre>
+
+Thus, as each event was received, <code>notifyServiceMap</code>
+       declared a gap, and a new snapshot was requested; which meant that for
+       the four services, there were eight total snapshots requested.
+
+To address this bug, the method <code>notifyServiceMap</code> was
+       modified to consider the event ID when determining whether or not
+       an event sequence contains a gap; which now results in the appropriate
+       behavior.
+  </dd>
+  <p>
+  <dt><b>6208587: SDM should create default LDM only when no DiscoveryManagement is configured</b><dt>
+  <dd> Prior to interrogating the configuration for a
+       <a href="../api/net/jini/discovery/DiscoveryManagement.html"> <code>DiscoveryManagement</code></a>
+       item (entry name = <b><i>discoveryManager</i></b>), a default
+       <a href="../api/net/jini/discovery/LookupDiscoveryManager.html"> <code>LookupDiscoveryManager</code></a>
+       is first created. Although that manager is initialized to discover no groups and no locators,
+       the <a href="../api/net/jini/discovery/LookupDiscovery.html"> <code>LookupDiscovery</code></a>
+       instance used by the default discovery manager to perform group discovery creates
+       a thread to listen for and process multicast announcements, as well as
+       additional, related threads. Thus, if a deployer configures a <i>discoveryManagement</i>
+       item, the creation of the default lookup discovery manager -- and the threads
+       that manager ultimately creates -- is unnecessary, and wastes resources.
+       <p>
+       This bug has been fixed.
+  </dd>
+  <p>
+  <dt> <b>Notes Of Interest</b>
+  <dd>
+       <p>
+       <b>Note 1: Service Reference Comparison</b>
+       <p>
+       The ability to appropriately compare two different service references
+       is very important to the
+       <a href="../api/net/jini/lookup/ServiceDiscoveryManager.html"> <code>ServiceDiscoveryManager</code></a>
+       in general, and the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       in particular. Currently, there are three mechanisms used to accurately
+       compare service references. Each mechanism is applied in different situations,
+       to achieve different goals.
+       <p>
+       When storing and managing service references, it is important to be able
+       to determine when two different references (proxies) refer to the same
+       back-end service (such references are referred to as <i>duplicates</i>)
+       so that the storage and management of any duplicate references can be
+       avoided. In addition to identifying duplicate references, the ability to
+       determine when a previously discovered service has been replaced with a
+       new version is also important so that consistent state may be maintained,       and entities that wish to know about such events can be informed.
+       Finally, when an entity wishes to discard (make eligible for rediscovery)
+       a particular service reference received from the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>,
+       it is important for the <code>LookupCache</code> to be able to compare the
+       reference provided by the entity to each of the previously stored references
+       so that the appropriate reference can be accurately selected for discard.       <p>
+       <b>Comparison by <a href="../api/net/jini/core/lookup/ServiceID.html"> <code>net.jini.core.lookup.ServiceID</code></a></b>
+       <p>
+       To identify, and thus avoid storing, duplicate service references, the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       compares the instances of <a href="../api/net/jini/core/lookup/ServiceID.html"> <code>ServiceID</code></a>
+       associated with each reference. Recall that an individual well-behaved service of
+       interest will usually register with multiple lookup services, and for
+       each lookup service with which that service registers, the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       will receive a separate event containing a reference to the service. When the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       receives events from multiple lookup services, the
+       <a href="../api/net/jini/core/lookup/ServiceID.html"> <code>ServiceID</code></a>
+       (retrieved from the service reference in the event) is used to distinguish the
+       service references from each other. In this way, when a new event arrives containing
+       a reference associated with the same service as an already-stored reference,
+       the <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       can determine whether or not the new reference is a duplicate; in which case, the
+       duplicate is ignored.
+       <p>
+       <b>Comparison by <a href="../api/net/jini/io/MarshalledInstance.html"> <code>net.jini.io.MarshalledInstance.fullyEquals</code></a></b>
+       <p>
+       With respect to determining when a previously discovered service has been
+       replaced with a new version, the <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a> typically relies
+       on the event mechanism of the lookup service(s) with which that service is
+       registered to indicate that such an event has occurred. But there are
+       situations where the events from the lookup services do not provide enough
+       information to make such a determination. In those cases, the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a> employs
+       <a href="../api/net/jini/io/MarshalledInstance.html"> <code>MarshalledInstance.fullyEquals</code></a>
+       to make the determination.
+       <p>
+       When a well-behaved service is replaced with a new version, the new
+       version is typically reregistered with each lookup service with
+       which the old version is registered. As described in the
+       <a href="../specs/html/lookup-spec.html"><i>Jini(TM) Lookup Service Specification</i></a>,
+       each lookup service with which this reregistration process occurs first
+       sends a service-removed event (<code>TRANSITION_MATCH_NOMATCH</code>), and
+       then sends a separate service-added event (<code>TRANSITION_NOMATCH_MATCH</code>).
+       In this case, there is no ambiguity, and thus no need for the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       to compare the new and old service references. This is because the
+       combination of service-removed and service-added events from each
+       lookup service is an explicit indication that the service has been
+       replaced. Note that, as described in the specification, the lookup
+       service only sends a service-changed event (<code>TRANSITION_MATCH_MATCH</code>)
+       when the attributes of the service have been modified; not when the
+       service itself has been changed (replaced). Thus, if the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       receives a <code>TRANSITION_MATCH_MATCH</code> event, then it is guaranteed
+       that the service referenced in that event has not been replaced with a new
+       version.
+       <p>
+       Whenever the following conditions are satisfied, the <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       will use <a href="../api/net/jini/io/MarshalledInstance.html"> <code>MarshalledInstance.fullyEquals</code></a>
+       to compare two service references:
+       <p>
+         <ul>
+           <li> The references are duplicates (same <a href="../api/net/jini/core/lookup/ServiceID.html"> <code>ServiceID</code></a>)
+           <li> The <b><i>possibility</i></b> exists that the references may refer to different versions of the service
+         </ul>
+       <p>
+       When determining whether or not these conditions (in particular, the
+       second condition) are satisfied, the <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a> generally
+       takes a conservative approach. That is, only when it is absolutely
+       sure that two duplicates refer to the same version (such as when a
+       <code>TRANSITION_MATCH_MATCH</code> event is received), will the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       refrain from using
+       <a href="../api/net/jini/io/MarshalledInstance.html"> <code>MarshalledInstance.fullyEquals</code></a>
+       to compare the duplicate references; otherwise, duplicate references are
+       always compared using
+       <a href="../api/net/jini/io/MarshalledInstance.html"> <code>MarshalledInstance.fullyEquals</code></a>.
+       <p>
+       One example of a situation where the <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       employs <a href="../api/net/jini/io/MarshalledInstance.html"> <code>MarshalledInstance.fullyEquals</code></a>
+       is the situation
+       where a lookup service of interest is newly discovered or rediscovered.
+       In this situation, the <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       retrieves a snapshot of the services of interest that currently reside in that
+       lookup service. This is done so that previously undiscovered service references,
+       as well as new versions of previously discovered service references, can
+       both be stored, duplicates can be ignored, and clients can be sent the
+       appropriate notifications. Whenever a reference from the snapshot is a
+       duplicate of a previously discovered service reference, the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       always compares the two references using
+       <a href="../api/net/jini/io/MarshalledInstance.html"> <code>MarshalledInstance.fullyEquals</code></a>.
+       This is because the possibility always exists that the references may refer to different
+       versions of the service.
+       <p>
+       Another example of a situation where the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       employs <a href="../api/net/jini/io/MarshalledInstance.html"> <code>MarshalledInstance.fullyEquals</code></a>
+       is when a <code>TRANSITION_NOMATCH_MATCH</code> event is received that
+       contains a reference that is a duplicate of a previously discovered
+       reference. When such an event is received, the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       must allow for the possibility that the reference contained
+       in the event refers to a different version of the service
+       than that referenced by the previously discovered service reference.
+       This is because the event may represent either the second half of a
+       <code>TRANSITION_MATCH_NOMATCH</code>/<code>TRANSITION_NOMATCH_MATCH</code>
+       (remove/add) event pair, or it may be a notification of the initial
+       registration of a new version of the service with one of the (multiple)
+       lookup services targeted by the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       during the service discovery process.
+       <p>
+       To understand the last example described above, consider the situation
+       where a service initially registers with one lookup service and then
+       registers with a second lookup service. If the same version of the
+       service is registered with each lookup service, both lookup services
+       will send the same event -- a <code>TRANSITION_NOMATCH_MATCH</code>
+       event -- to indicate that a new service has registered with the
+       associated lookup service. In this case, there is no ambiguity for the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>;
+       the second reference can be safely ignored because the references are
+       duplicates that refer to the exact same service.
+       <p>
+       But suppose that prior to registering with the second lookup service,
+       the service is replaced with a new version. In that case, the second
+       lookup service will still send a <code>TRANSITION_NOMATCH_MATCH</code> event, but
+       if the appropriate action is not taken to determine that the old version
+       of the service has been replaced, the new version of the service will
+       be ignored by the <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>.
+       This is because the two references will have the same
+       <a href="../api/net/jini/core/lookup/ServiceID.html"> <code>ServiceID</code></a>,
+       and thus the <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       will identify the two references as duplicates; ultimately ignoring the new reference.
+       Of course, if the service is well-behaved, because the new version of the service will
+       eventually reregister with the first lookup service, that lookup service
+will
+       eventually send a <code>TRANSITION_MATCH_NOMATCH</code> event followed by a
+       <code>TRANSITION_NOMATCH_MATCH</code> event to indicate that the service
+has been
+       replaced. But the <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       must still identify and handle this situation in order to prevent possible state
+       corruption, even though that corruption may be only temporary.
+       <p>
+       Thus, whenever a <code>TRANSITION_NOMATCH_MATCH</code> event is received
+and the
+       associated service reference is a duplicate of a previously discovered
+       reference, the <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       will always compare the two references using
+       <a href="../api/net/jini/io/MarshalledInstance.html"> <code>MarshalledInstance.fullyEquals</code></a>
+       to determine whether or not the references refer to the same version of the service.
+       When they do reference the same version, the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       ignores the duplicate reference; otherwise, the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       sends a service-removed event followed by a service-added event to indicate
+       that the old version of the service has been replaced.
+       <p>
+       <b>Comparison by <a href="http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html#equals"> <code>equals</code></a></b>
+       <p>
+       The mechanism employed by the <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a> to select (from
+       storage) a given reference for discard is the
+       <a href="http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html#equals"> <code>equals</code></a>
+       method provided by the discovered service itself. The
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       relies on the provider of each service to override the
+       <a href="http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html#equals"> <code>equals</code></a>
+       method with an implementation that allows
+       for the identification of the service reference an entity wishes to
+       be discarded. Although the default implementation of
+       <a href="http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html#equals"> <code>equals</code></a>
+       often times may be sufficient for proper identification, service providers
+       are still encouraged to provide each service with its own well-defined
+       implementation of <a href="http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html#equals"> <code>equals</code></a>.
+       <p>
+       In addition to the
+       <a href="http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html#equals"> <code>equals</code></a>
+       method, each service should also
+       provide a proper implementation of the
+       <a href="http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html#hashCode"> <code>hashCode</code></a> method.
+       This is because references to the service may be stored in, or interact with,
+       container classes (for example,
+       <a href="http://java.sun.com/j2se/1.4/docs/api/java/util/HashMap.html"> <code>HashMap</code></a>)
+       where the service's <a href="http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html#equals"> <code>equals</code></a>
+       and <a href="http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html#hashCode"> <code>hashCode</code></a>
+       methods may be invoked "under the covers" by the container object with
+       which the service is interacting. From the point of view of the
+       <a href="../api/net/jini/lookup/ServiceDiscoveryManager.html"> <code>ServiceDiscoveryManager</code></a>
+       and the <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>,
+       providing an appropriate implementation for both the
+       <a href="http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html#equals"> <code>equals</code></a>
+       method and the
+       <a href="http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html#hashCode"> <code>hashCode</code></a>
+       method is a key characteristic of good behavior in a Jini service.
+
+<p>
+       <b>Note 2: The Service Discovery Filtering Mechanism</b>
+       <p>
+       The specification of the
+       <a href="../api/net/jini/lookup/ServiceItemFilter.html"> <code>ServiceItemFilter</code></a>
+       interface specifies what it means to <i>filter</i> a service reference selected as a
+       candidate for discovery. In particular, instances of
+       <a href="../api/net/jini/lookup/ServiceItemFilter.html"> <code>ServiceItemFilter</code></a>
+       can be defined to perform proxy preparation. Thus, through the client-defined filter
+       (through the
+       <a href="../api/net/jini/lookup/ServiceItemFilter.html#check"> <code>check</code></a>
+       method), clients can request that the
+       <a href="../api/net/jini/lookup/ServiceDiscoveryManager.html"> <code>ServiceDiscoveryManager</code></a>,
+       rather than the client itself, perform any desired proxy preparation
+       as part of the service discovery process.
+       <p>
+       To understand why this is important, consider what can happen when
+       the client performs preparation of its discovered proxies outside of the
+       <a href="../api/net/jini/lookup/ServiceDiscoveryManager.html"> <code>ServiceDiscoveryManager</code></a>.
+       When proxy preparation is performed outside of the service discovery
+       manager, the client risks encountering a cycle where a matching service is
+       discovered by the
+       <a href="../api/net/jini/lookup/ServiceDiscoveryManager.html"> <code>ServiceDiscoveryManager</code></a>,
+       is found to be untrusted when the client prepares the proxy, is discarded       by the client because it is untrusted, and is then ultimately rediscovered
+       because it still matches the original discovery criteria. Such a cycle
+       will generally repeat indefinitely because the service is not likely to
+       become trusted at any point in the future. Supplying the
+       <a href="../api/net/jini/lookup/ServiceDiscoveryManager.html"> <code>ServiceDiscoveryManager</code></a>
+       with the means to perform proxy preparation on the client's behalf
+       provides the client with a mechanism for avoiding such a cycle.
+       <p>
+       For more information, please refer to the section titled,
+       <i>SD.5.2 The <code>ServiceItemFilter</code> Interface</i>, contained in
+the
+       <a href="../specs/html/servicediscutil-spec.html"><i>Jini(TM) Service Discovery Utilities Specification</i></a>.
+
+<p>
+       <b>Note 3: The Service Discovery Event Mechanism</b>
+       <p>
+       The specification of the
+       <a href="../api/net/jini/lookup/ServiceDiscoveryListener.html"> <code>ServiceDiscoveryListener</code></a>
+       interface describes how the filtering mechanism and the event mechanism provided by instances of
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>net.jini.lookup.LookupCache</code></a>
+       interact.
+       <p>
+       Additionally, this specification specifies that instances of the
+       <a href="../api/net/jini/lookup/LookupCache.html"> <code>LookupCache</code></a>
+       use the method
+       <a href="../api/net/jini/io/MarshalledInstance.html"> <code>net.jini.io.MarshalledInstance.fullyEquals</code></a>
+       to determine when a service has changed in some fundamental way (for example,
+       when a service is replaced with a new version).
+       <p>
+       For more information, please refer to the section titled,
+       <i>SD.5.4 The <code>ServiceDiscoveryListener</code> Interface</i>, contained in the
+       <a href="../specs/html/servicediscutil-spec.html"><i>Jini(TM) Service Discovery Utilities Specification</i></a>
+       <p>
+</dl>
+
+<!-- No issues for now
+<p>
+<H3>Known Issues (& Workarounds)</H3>
+    Currently, there are no known issues regarding the <code>ServiceDiscoveryManager</code>
+    utility.
+<p>
+-->
+
+<p></ul>
+<hr>
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+<ul>
+     <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>
+</ul>
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.</p>
+<p></body>
+</html></p>
+          </div>
+        </td>
+        <td valign="top">
+          <div class="navigation">
+            <div class="navigation_top">
+              <div class="navigation_bottom"> 
+<!-- sidenav -->                                                                        
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="news.html">News</a></li>
+</ul>
+<h3 id="community">Community</h3>
+<ul>
+<li><a href="supported-platforms.html">Supported platforms</a></li>
+<li><a href="get-involved.html">Get Involved</a></li>
+<li><a href="http://www.apache.org/licenses/LICENSE-2.0">License</a></li>
+<li><a href="downloads.html">Downloads</a></li>
+<li>Documentation<ul>
+<li><a href="http://people.apache.org/~sijskes/doc/index.html">Original Jini Wiki</a></li>
+<li><a href="user-guide-glossary.html">Glossary</a></li>
+<li><a href="documentation.html">Cookbook</a></li>
+<li><a href="javadoc.html">Javadoc</a></li>
+</ul>
+</li>
+<li><a href="success-stories.html">Success Stories</a></li>
+<li><a href="mailing-lists.html">Mailing Lists</a></li>
+<li><a href="committers.html">Committers</a></li>
+<li><a href="found-a-bug.html">Found a Bug</a>?</li>
+</ul>
+<h3 id="development">Development</h3>
+<ul>
+<li><a href="javadoc.html">Javadoc</a></li>
+<li><a href="source-code.html">Source Code</a></li>
+<li><a href="building-river.html">Building River</a></li>
+<li><a href="roadmap.html">Roadmap</a></li>
+<li><a href="development-process.html">Development Process</a></li>
+<li><a href="https://issues.apache.org/jira/browse/RIVER">Issue Tracker</a></li>
+<li><a href="http://wiki.apache.org/river/">Wiki</a></li>
+</ul>
+<h3 id="search">Search</h3>
+<DIV>
+<FORM action="http://www.google.com/search" method="get" style="font-size: 10px;">
+<INPUT name="ie" type="hidden" value="UTF-8"></INPUT>
+<INPUT name="oe" type="hidden" value="UTF-8"></INPUT>
+  <INPUT maxlength="255" name="q" size="15" type="text" value></INPUT><BR></BR>
+  <INPUT name="btnG" type="submit" value="Search"></INPUT>
+  <INPUT name="domains" type="hidden" value="incubator.apache.org/river"></INPUT>
+  <INPUT name="sitesearch" type="hidden" value="incubator.apache.org/river"></INPUT>
+</FORM>
+</DIV>
+
+<ul>
+<li><a href="sitemap.html">Sitemap</a></li>
+</ul>
+<h3 id="the_foundation">The Foundation</h3>
+<ul>
+<li><a href="http://www.apache.org">Apache</a></li>
+<li><a href="http://www.apache.org/foundation/thanks.html">Sponsors</a></li>
+<li><a href="http://www.apache.org/foundation/how-it-works.html">How it works</a></li>
+<li><a href="http://incubator.apache.org/">Incubator</a></li>
+</ul>
+<!-- sidenav -->                                                                        
+              </div>
+            </div>   
+          </div>
+        </td>
+        </tr>
+    </tbody>
+        </table>
+
+<!--
+        <div class="bottom_red_bar"></div>
+-->
+      </div>
+    </div>
+  </div>
+</div>
+<div class="black_box">
+<div class="footer">
+  <div class="footer_l">
+    <div class="footer_r">
+      <div>
+
+      </div>
+    </div>
+  </div>
+</div>
+</div>
+</div>
+<!--
+<div class="design_attribution">Page Template Design By Marc Prud'hommeaux based on <a href="http://activemq.apache.org/">ActiveMQ template</a></div>
+-->
+<div class="copyright_footer">
+<p>Copyright &copy; 2010 The Apache Software Foundation, Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.<br>Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+</div>
+<script src="skeleton_files/urchin.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+_uacct = "UA-1940143-1";
+urchinTracker();
+</script>
+
+</body></html>

Added: websites/staging/river/trunk/content/river/docs/release-notes/servicestarter.html
==============================================================================
--- websites/staging/river/trunk/content/river/docs/release-notes/servicestarter.html (added)
+++ websites/staging/river/trunk/content/river/docs/release-notes/servicestarter.html Wed Dec  8 11:35:41 2010
@@ -0,0 +1,298 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE- 2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+	<link href="/river/css/site.css" rel="stylesheet" type="text/css">
+	<link href="/river/css/type-settings.css" rel="stylesheet" type="text/css">
+
+	<title>Apache River - </title>
+
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body>
+<div class="white_box">
+<div class="header">
+  <div class="header_l">
+    <div class="header_r">
+    </div>
+  </div>
+</div>
+<div class="content">
+  <div class="content_l">
+    <div class="content_r">
+      <div>
+
+<!-- Banner -->
+                                                                        
+                                                                        
+            <div id="header_background">
+	<div id="river_logo">
+		<a href="/river"><img src="/river/images/apache_river_v2b_small.png"/></a>
+<img src="/river/images/apache-incubator-logo.png"/>
+
+	</div>
+	</div>
+                                    
+    <table border="0">
+    <tbody>
+        <tr>
+        <td style="overflow: hidden;" valign="top" width="100%">
+          <div class="wiki-content">
+<!--
+ ! Licensed to the Apache Software Foundation (ASF) under one
+ ! or more contributor license agreements.  See the NOTICE file
+ ! distributed with this work for additional information
+ ! regarding copyright ownership. The ASF licenses this file
+ ! to you under the Apache License, Version 2.0 (the
+ ! "License"); you may not use this file except in compliance
+ ! with the License. You may obtain a copy of the License at
+ ! 
+ !      http://www.apache.org/licenses/LICENSE-2.0
+ ! 
+ ! Unless required by applicable law or agreed to in writing, software
+ ! distributed under the License is distributed on an "AS IS" BASIS,
+ ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ! See the License for the specific language governing permissions and
+ ! limitations under the License.
+ !-->
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+
+<p><body text="#000000" bgcolor="#ffffff" link="#9b37cc"
+      vlink="#cc1877" alink="#ffffff">
+<a name="top">
+<title>Release Notes for Service Starter</title></p>
+<p><center>
+<h1><code>com.sun.jini.start</code><br>
+Apache River v2.1.2 Release Notes</h1>
+</center>
+<HR>
+<UL>
+<H3>Description</H3>
+The Service Starter package is a collection of utilities and APIs 
+used to launch the contributed services provided in the 
+Apache River release.</p>
+<H3>Changes since the v2.1.1 release</H3>
+<dl>
+  <dt> <b>None</b></dt>
+
+</dl>
+
+<H3>Changes since the v2.0.1 release</H3>
+<dl>
+  <dt> <b>Bug Fixes of Interest</b></dt>
+  <dd> The following bugs have been addressed in this release:
+  <p>
+  <dl>
+  <dt><b>
+      4835830: Add per-service proxy preparer support
+      </b></dt>
+  <dd>Per-service proxy preparer support has been added to
+      <code>NonActivatableServiceDescriptor</code> and
+      <code>SharedActivatableServiceDescriptor</code> via constructor
+      overloads that take proxy preparer parameters. This allows users
+      to individually prepare the service proxies returned by service
+      starter framework.
+      <P>
+  <dt><b>
+      4856937: Service starter should permit specifying dynamic policy provider
+      </b></dt>
+  <dd><code>ActivateWrapper</code> supports the
+      the <code>java.security.Security</code> property
+      <code>com.sun.jini.start.servicePolicyProvider</code>, which allows users
+      to specify the fully qualified class name of a dynamic policy provider to
+      use for wrapping individual service policies in a "shared" environment.
+      A custom service policy provider can be very useful when trying to
+      debug security related issues. See the start package documentation for
+      more detail.
+      <P>
+  <dt><b>
+      4858623: change ExportClassLoader to use context class loader for parent
+      </b></dt>
+  <dd><code>ActivateWrapper.ExportClassLoader</code> now uses the calling context's
+      class loader as its parent (versus the application classpath, used previously).
+      This allows "container" applications more control over the class loader
+      hierarchy used when launching services.
+      <P>
+  <dt><b>
+      6211452: change ActivateWrapper.ExportClassLoader to subclass PreferredClassLoader
+      </b></dt>
+  <dd><code>ActivateWrapper.ExportClassLoader</code> now extends
+      <code>PreferredClassLoader</code> instead of <code>URLClassLoader</code>.
+      A service can now specify a preferred list for its import class path,
+      to ensure that any classes that need to be annotated with the server's
+      codebase get loaded by the server's class loader rather than accidentally
+      being resolved in the container.
+      <P>
+  <dt><b>
+      4868839: Make utility class constructors private
+      </b></dt>
+  <dd>The following utility classes simply contain static methods and
+      are not meant to be instantiated:
+      <UL>
+      <LI><code>ClassLoaderUtil</code>
+      <LI><code>DestroySharedGroup</code>
+      <LI><code>HTTPDStatus</code>
+      </UL>
+      To ensure this, private constructors have been added to each of the
+      above classes.
+      <P>
+  <dt><b>
+      4936006: ServiceDescriptor's should support non-file-based classpath entries
+      </b></dt>
+  <dd>The <code>importCodebase</code> parameter in the constructors for
+      <code>NonActivatableServiceDescriptor</code> and
+      <code>SharedActivatableServiceDescriptor</code> now support either:
+      <UL>
+      <LI>a space delimited set of <code>URL</code>(s) representing a codebase or
+      <LI>a <code>File.pathSeparator</code> delimited set of class paths.
+      <UL>
+      <P>
+</dl>
+
+<!-- N/A
+<p>
+<H3>Known Issues (& Workarounds)</H3>
+<p>
+-->
+
+</ul>
+<hr>
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+<ul>
+     <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>
+</ul>
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+</body>
+</html>
+          </div>
+        </td>
+        <td valign="top">
+          <div class="navigation">
+            <div class="navigation_top">
+              <div class="navigation_bottom"> 
+<!-- sidenav -->                                                                        
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="news.html">News</a></li>
+</ul>
+<h3 id="community">Community</h3>
+<ul>
+<li><a href="supported-platforms.html">Supported platforms</a></li>
+<li><a href="get-involved.html">Get Involved</a></li>
+<li><a href="http://www.apache.org/licenses/LICENSE-2.0">License</a></li>
+<li><a href="downloads.html">Downloads</a></li>
+<li>Documentation<ul>
+<li><a href="http://people.apache.org/~sijskes/doc/index.html">Original Jini Wiki</a></li>
+<li><a href="user-guide-glossary.html">Glossary</a></li>
+<li><a href="documentation.html">Cookbook</a></li>
+<li><a href="javadoc.html">Javadoc</a></li>
+</ul>
+</li>
+<li><a href="success-stories.html">Success Stories</a></li>
+<li><a href="mailing-lists.html">Mailing Lists</a></li>
+<li><a href="committers.html">Committers</a></li>
+<li><a href="found-a-bug.html">Found a Bug</a>?</li>
+</ul>
+<h3 id="development">Development</h3>
+<ul>
+<li><a href="javadoc.html">Javadoc</a></li>
+<li><a href="source-code.html">Source Code</a></li>
+<li><a href="building-river.html">Building River</a></li>
+<li><a href="roadmap.html">Roadmap</a></li>
+<li><a href="development-process.html">Development Process</a></li>
+<li><a href="https://issues.apache.org/jira/browse/RIVER">Issue Tracker</a></li>
+<li><a href="http://wiki.apache.org/river/">Wiki</a></li>
+</ul>
+<h3 id="search">Search</h3>
+<DIV>
+<FORM action="http://www.google.com/search" method="get" style="font-size: 10px;">
+<INPUT name="ie" type="hidden" value="UTF-8"></INPUT>
+<INPUT name="oe" type="hidden" value="UTF-8"></INPUT>
+  <INPUT maxlength="255" name="q" size="15" type="text" value></INPUT><BR></BR>
+  <INPUT name="btnG" type="submit" value="Search"></INPUT>
+  <INPUT name="domains" type="hidden" value="incubator.apache.org/river"></INPUT>
+  <INPUT name="sitesearch" type="hidden" value="incubator.apache.org/river"></INPUT>
+</FORM>
+</DIV>
+
+<ul>
+<li><a href="sitemap.html">Sitemap</a></li>
+</ul>
+<h3 id="the_foundation">The Foundation</h3>
+<ul>
+<li><a href="http://www.apache.org">Apache</a></li>
+<li><a href="http://www.apache.org/foundation/thanks.html">Sponsors</a></li>
+<li><a href="http://www.apache.org/foundation/how-it-works.html">How it works</a></li>
+<li><a href="http://incubator.apache.org/">Incubator</a></li>
+</ul>
+<!-- sidenav -->                                                                        
+              </div>
+            </div>   
+          </div>
+        </td>
+        </tr>
+    </tbody>
+        </table>
+
+<!--
+        <div class="bottom_red_bar"></div>
+-->
+      </div>
+    </div>
+  </div>
+</div>
+<div class="black_box">
+<div class="footer">
+  <div class="footer_l">
+    <div class="footer_r">
+      <div>
+
+      </div>
+    </div>
+  </div>
+</div>
+</div>
+</div>
+<!--
+<div class="design_attribution">Page Template Design By Marc Prud'hommeaux based on <a href="http://activemq.apache.org/">ActiveMQ template</a></div>
+-->
+<div class="copyright_footer">
+<p>Copyright &copy; 2010 The Apache Software Foundation, Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.<br>Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+</div>
+<script src="skeleton_files/urchin.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+_uacct = "UA-1940143-1";
+urchinTracker();
+</script>
+
+</body></html>

Added: websites/staging/river/trunk/content/river/docs/simpleproxyverification.pdf
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/river/trunk/content/river/docs/simpleproxyverification.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: websites/staging/river/trunk/content/river/docs/smartproxyverification.pdf
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/river/trunk/content/river/docs/smartproxyverification.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: websites/staging/river/trunk/content/river/docs/spec-index.html
==============================================================================
--- websites/staging/river/trunk/content/river/docs/spec-index.html (added)
+++ websites/staging/river/trunk/content/river/docs/spec-index.html Wed Dec  8 11:35:41 2010
@@ -0,0 +1,317 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE- 2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+	<link href="/river/css/site.css" rel="stylesheet" type="text/css">
+	<link href="/river/css/type-settings.css" rel="stylesheet" type="text/css">
+
+	<title>Apache River - </title>
+
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+<body>
+<div class="white_box">
+<div class="header">
+  <div class="header_l">
+    <div class="header_r">
+    </div>
+  </div>
+</div>
+<div class="content">
+  <div class="content_l">
+    <div class="content_r">
+      <div>
+
+<!-- Banner -->
+                                                                        
+                                                                        
+            <div id="header_background">
+	<div id="river_logo">
+		<a href="/river"><img src="/river/images/apache_river_v2b_small.png"/></a>
+<img src="/river/images/apache-incubator-logo.png"/>
+
+	</div>
+	</div>
+                                    
+    <table border="0">
+    <tbody>
+        <tr>
+        <td style="overflow: hidden;" valign="top" width="100%">
+          <div class="wiki-content">
+<!--
+ ! Licensed to the Apache Software Foundation (ASF) under one
+ ! or more contributor license agreements.  See the NOTICE file
+ ! distributed with this work for additional information
+ ! regarding copyright ownership. The ASF licenses this file
+ ! to you under the Apache License, Version 2.0 (the
+ ! "License"); you may not use this file except in compliance
+ ! with the License. You may obtain a copy of the License at
+ ! 
+ !      http://www.apache.org/licenses/LICENSE-2.0
+ ! 
+ ! Unless required by applicable law or agreed to in writing, software
+ ! distributed under the License is distributed on an "AS IS" BASIS,
+ ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ! See the License for the specific language governing permissions and
+ ! limitations under the License.
+ !-->
+
+<p><title>Jini Specifications</title></p>
+<body text="#000000" bgcolor="#ffffff" link="#9b37cc"
+      vlink="#cc1877" alink="#ffffff">
+
+<h1><center>Jini(TM) Network Technology Specifications<br>Apache River v2.1.2</center></h1>
+
+<UL>
+<p>
+The following specifications are available in HTML in this v2.1.2 release.
+
+</P>
+<p>
+The existing specifications were accepted as standards of the Jini Community(SM) 
+through the Jini Community Decision Process (JDP) and have been inherited by the
+Apache River project.  Modifications are
+to be expected based on learnings from Apache River's continued development.
+</P>
+    <ul>
+        <li><i><a href="specs/html/discovery-spec.html">
+        Jini Discovery and Join Specification</i></a>
+        <li><i><a href="specs/html/entry-spec.html">
+        Jini Entry Specification</i></a>
+        <li><i><a href="specs/html/lease-spec.html">
+        Jini Distributed Leasing Specification</i></a> 
+        <li><i><a href="specs/html/event-spec.html">
+        Jini Distributed Events Specification</i></a> 
+        <li><i><a href="specs/html/txn-spec.html">
+        Jini Transaction Specification</i></a> 
+        <li><i><a href="specs/html/lookup-spec.html">
+        Jini Lookup Service Specification</i></a> 
+    </ul></ul>
+
+<p><HR>
+<p><br />
+    <ul><ul>
+    <li><i><a href="specs/html/jxpnote-spec.html">
+        Introduction to Helper Utilities and Services</i></a> 
+    <li><i><a href="specs/html/discoveryutil-spec.html">
+        Jini Discovery Utilities Specification</i></a><br />
+    <li><i><a href="specs/html/leaseutil-spec.html">
+        Jini Lease Utilities Specification</i></a>
+    <li><i><a href="specs/html/joinutil-spec.html">
+        Jini Join Utilities Specification</i></a>
+    <li><i><a href="specs/html/servicediscutil-spec.html">
+        Jini Service Discovery Utilities Specification</i></a>
+    <li><i><a href="specs/html/schema-spec.html">
+        Jini Lookup Attribute Schema Specification</i></a>
+    <li><i><a href="specs/html/lds-spec.html">
+        Jini Lookup Discovery Service Specification</i></a>
+    <li><i><a href="specs/html/lrs-spec.html">
+        Jini Lease Renewal Service Specification</i></a>
+    <li><i><a href="specs/html/mailbox-spec.html">
+        Jini Event Mailbox Service Specification</i></a>
+    </ul></ul>
+<HR>
+    <ul><ul>
+        <li><a href="specs/html/js-spec.html"><i>
+        JavaSpaces Service Specification</i></a>
+    </ul></ul>
+<HR>
+    <ul><ul>
+        <li><a href="specs/html/serviceui-spec.html"><i>
+        ServiceUI Specification</i></a>
+    </ul></ul>
+<HR>
+<UL><UL></p>
+<div class="codehilite"><pre><span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/activation/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.activation<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/config/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.config<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/constraint/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.constraint<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/core/constraint/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.core.constraint<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/entry/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.entry<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/export/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.export<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/id/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.id<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/iiop/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.iiop<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/io/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.io<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/io/context/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.io.context<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/jeri/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.jeri<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/jeri/connection/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.jeri.connection<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/jeri/http/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.jeri.http<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/jeri/kerberos/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.jeri.kerberos<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/jeri/ssl/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.jeri.ssl<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/jeri/tcp/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.jeri.tcp<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/jrmp/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.jrmp<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/loader/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.loader<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/loader/pref/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.loader.pref<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/security/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.security<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/security/policy/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.security.policy<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/security/proxytrust/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.security.proxytrust<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/space/package-summary.html&quot;</span><span class="nt">&gt;</span> JavaSpace05 extension<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/url/file/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.url.file<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/url/httpmd/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.url.httpmd<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+
+<span class="nt">&lt;LI&gt;&lt;i&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;specs/api/net/jini/url/https/package-summary.html&quot;</span><span class="nt">&gt;</span> net.jini.url.https<span class="nt">&lt;/i&gt;&lt;/a&gt;</span>
+</pre></div>
+
+
+<p></UL></UL></UL>
+<hr>
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+<ul>
+     <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>
+</ul>
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.</p>
+<p></body>
+</html></p>
+          </div>
+        </td>
+        <td valign="top">
+          <div class="navigation">
+            <div class="navigation_top">
+              <div class="navigation_bottom"> 
+<!-- sidenav -->                                                                        
+<ul>
+<li><a href="index.html">Home</a></li>
+<li><a href="news.html">News</a></li>
+</ul>
+<h3 id="community">Community</h3>
+<ul>
+<li><a href="supported-platforms.html">Supported platforms</a></li>
+<li><a href="get-involved.html">Get Involved</a></li>
+<li><a href="http://www.apache.org/licenses/LICENSE-2.0">License</a></li>
+<li><a href="downloads.html">Downloads</a></li>
+<li>Documentation<ul>
+<li><a href="http://people.apache.org/~sijskes/doc/index.html">Original Jini Wiki</a></li>
+<li><a href="user-guide-glossary.html">Glossary</a></li>
+<li><a href="documentation.html">Cookbook</a></li>
+<li><a href="javadoc.html">Javadoc</a></li>
+</ul>
+</li>
+<li><a href="success-stories.html">Success Stories</a></li>
+<li><a href="mailing-lists.html">Mailing Lists</a></li>
+<li><a href="committers.html">Committers</a></li>
+<li><a href="found-a-bug.html">Found a Bug</a>?</li>
+</ul>
+<h3 id="development">Development</h3>
+<ul>
+<li><a href="javadoc.html">Javadoc</a></li>
+<li><a href="source-code.html">Source Code</a></li>
+<li><a href="building-river.html">Building River</a></li>
+<li><a href="roadmap.html">Roadmap</a></li>
+<li><a href="development-process.html">Development Process</a></li>
+<li><a href="https://issues.apache.org/jira/browse/RIVER">Issue Tracker</a></li>
+<li><a href="http://wiki.apache.org/river/">Wiki</a></li>
+</ul>
+<h3 id="search">Search</h3>
+<DIV>
+<FORM action="http://www.google.com/search" method="get" style="font-size: 10px;">
+<INPUT name="ie" type="hidden" value="UTF-8"></INPUT>
+<INPUT name="oe" type="hidden" value="UTF-8"></INPUT>
+  <INPUT maxlength="255" name="q" size="15" type="text" value></INPUT><BR></BR>
+  <INPUT name="btnG" type="submit" value="Search"></INPUT>
+  <INPUT name="domains" type="hidden" value="incubator.apache.org/river"></INPUT>
+  <INPUT name="sitesearch" type="hidden" value="incubator.apache.org/river"></INPUT>
+</FORM>
+</DIV>
+
+<ul>
+<li><a href="sitemap.html">Sitemap</a></li>
+</ul>
+<h3 id="the_foundation">The Foundation</h3>
+<ul>
+<li><a href="http://www.apache.org">Apache</a></li>
+<li><a href="http://www.apache.org/foundation/thanks.html">Sponsors</a></li>
+<li><a href="http://www.apache.org/foundation/how-it-works.html">How it works</a></li>
+<li><a href="http://incubator.apache.org/">Incubator</a></li>
+</ul>
+<!-- sidenav -->                                                                        
+              </div>
+            </div>   
+          </div>
+        </td>
+        </tr>
+    </tbody>
+        </table>
+
+<!--
+        <div class="bottom_red_bar"></div>
+-->
+      </div>
+    </div>
+  </div>
+</div>
+<div class="black_box">
+<div class="footer">
+  <div class="footer_l">
+    <div class="footer_r">
+      <div>
+
+      </div>
+    </div>
+  </div>
+</div>
+</div>
+</div>
+<!--
+<div class="design_attribution">Page Template Design By Marc Prud'hommeaux based on <a href="http://activemq.apache.org/">ActiveMQ template</a></div>
+-->
+<div class="copyright_footer">
+<p>Copyright &copy; 2010 The Apache Software Foundation, Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.<br>Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
+</div>
+<script src="skeleton_files/urchin.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+_uacct = "UA-1940143-1";
+urchinTracker();
+</script>
+
+</body></html>