public final class LookupLocatorDiscovery extends Object implements DiscoveryManagement, DiscoveryLocatorManagement
 Because this class participates in only the unicast discovery protocol,
 and because the unicast discovery protocol imposes no restriction on the
 physical location of the entity relative to a lookup service, this utility
 can be used to discover lookup services running on hosts that are located
 far from, or near to, the host on which the entity is running. This lack
 of a restriction on location brings with it a requirement that the
 discovering entity supply this class with specific information about the
 desired lookup services; namely, the location of the device(s) hosting
 each lookup service. This information is supplied through an instance
 of the LookupLocator class,
 or its subclass ConstrainableLookupLocator.
LookupLocatorLookupLocatorDiscovery supports the
 following configuration entries; where each configuration entry name
 is associated with the component name
 net.jini.discovery.LookupLocatorDiscovery. Note that the
 configuration entries specified here are specific to this implementation
 of LookupLocatorDiscovery. Unless otherwise stated, each
 entry is retrieved from the configuration only once per instance of
 this utility, where each such retrieval is performed in the constructor.
 
 | • | initialUnicastDelayRange | |
|---|---|---|
| Type: | long | |
| Default: | 0 milliseconds | |
| Description: | With respect to when this utility is started, this entry controls
       how long to wait before attempting unicast discovery.
       If the value is positive, initial unicast discovery requests
       will be delayed by a random value between 0andinitialUnicastDelayRangemilliseconds. Once the wait
       period is up, theLookupLocators specified at construction
       time are used for initiating unicast discovery requests, unless the
       managedLookupLocators have been changed in the interim;
       in which case, no delayed unicast discovery requests are performed.
       Note that this entry only has effect when this utility is initialized.
       It does not delay discovery requests that are initiated if the managedLookupLocators are subsequently changed. | |
| • | registrarPreparer | |
|---|---|---|
| Type: | ProxyPreparer | |
| Default: | new  | |
| Description: | Preparer for the proxies to the lookup services that are
          discovered and used by this utility. This preparer should perform all operations required to use a newly received proxy to a lookup service, which may including verifying trust in the proxy, granting permissions, and setting constraints. 
          Currently, none of the methods on the
           | |
| • | executorService | |
|---|---|---|
| Type: | ExecutorService | |
| Default: | new 
              | |
| Description: | The object that pools and manages the various threads executed by this utility. This object should not be shared with other components in the application that employs this utility. | |
| • | wakeupManager | |
|---|---|---|
| Type: | WakeupManager | |
| Default: | new 
      | |
| Description: | Object that pools and manages the various tasks that are
            initially executed by the object corresponding to the executorServiceentry
            of this component, but which fail during that initial execution.
            This object schedules the re-execution of such a failed task -
            in theexecutorServiceobject - at various times in the future, (employing a
            "backoff strategy"). The re-execution of the failed task will
            continue to be scheduled by this object until the task finally
            succeeds. This object should not be shared with other components
            in the application that employs this utility. | |
 This implementation of LookupLocatorDiscovery uses the
 Logger named net.jini.discovery.LookupLocatorDiscovery
 to log information at the following logging levels: 
| Level | Description | 
|---|---|
| INFO | when any exception occurs in a task or thread, while attempting unicast discovery of a given locator | 
| INFO | when any exception occurs while attempting to prepare a proxy | 
| HANDLED | when an exception is handled during unicast discovery. | 
| FINEST | whenever any thread or task is started | 
| FINEST | whenever any thread (except the Notifierthread) or task
     completes successfully | 
| FINEST | whenever a discovered or discarded event is sent | 
| FINEST | whenever a proxy is prepared | 
| FINEST | when an IOExceptionoccurs upon attempting to close the
     socket after a unicast discovery attempt has either completed
     successfully or failed | 
 This implementation of LookupLocatorDiscovery determines
 the constraints (if any) to apply to unicast discovery for a given
 LookupLocator instance
 by calling the 
 getConstraints method of that instance, if it implements the
 RemoteMethodControl
 interface. If the LookupLocator instance does not implement
 RemoteMethodControl,
 then no constraints are applied to unicast discovery for that instance.
 
 For more information on constraining unicast discovery, refer to the
 documentation for the ConstrainableLookupLocator class.
| Constructor and Description | 
|---|
| LookupLocatorDiscovery(LookupLocator[] locators)Creates an instance of this class ( LookupLocatorDiscovery),
 with an initial array ofLookupLocators to be managed. | 
| LookupLocatorDiscovery(LookupLocator[] locators,
                      Configuration config)Constructs a new lookup locator discovery object, set to discover the
 given set of locators, and having the given  Configuration. | 
| Modifier and Type | Method and Description | 
|---|---|
| void | addDiscoveryListener(DiscoveryListener l)Add a DiscoveryListener to the listener set. | 
| void | addLocators(LookupLocator[] locators)Adds a set of locators to the managed set of locators. | 
| void | discard(ServiceRegistrar proxy)Removes an instance of  ServiceRegistrarfrom the
 managed set of lookup services, making the corresponding lookup
 service eligible for re-discovery. | 
| LookupLocator[] | getDiscoveredLocators()Returns the set of  LookupLocatorobjects representing the
 desired lookup services that are currently discovered. | 
| LookupLocator[] | getLocators()Returns an array consisting of the elements of the managed set
 of locators; that is, instances of  LookupLocatorin
 which each instance corresponds to a specific lookup service to
 discover. | 
| ServiceRegistrar[] | getRegistrars()Returns an array of instances of  ServiceRegistrar, each
 corresponding to a proxy to one of the currently discovered lookup
 services. | 
| LookupLocator[] | getUndiscoveredLocators()Returns the set of  LookupLocatorobjects representing the
 desired lookup services that have not yet been discovered. | 
| void | removeDiscoveryListener(DiscoveryListener l)Remove a DiscoveryListener from the listener set. | 
| void | removeLocators(LookupLocator[] locators)Deletes a set of locators from the managed set of locators, and discards
 any already-discovered lookup service that corresponds to a deleted
 locator. | 
| void | setLocators(LookupLocator[] locators)Replaces all of the locators in the managed set with locators from
 a new set, and discards any already-discovered lookup service that
 corresponds to a locator that is removed from the managed set
 as a result of an invocation of this method. | 
| void | terminate()Terminates all threads, ending all locator discovery processing being
 performed by the current instance of this class. | 
| String | toString() | 
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitaddDiscoveryListener, discard, getRegistrars, removeDiscoveryListener, terminateaddLocators, getLocators, removeLocators, setLocatorspublic LookupLocatorDiscovery(LookupLocator[] locators)
LookupLocatorDiscovery),
 with an initial array of LookupLocators to be managed.
 For each managed LookupLocator, unicast discovery is
 performed to obtain a ServiceRegistrar proxy for that
 lookup service.locators - the locators to discoverNullPointerException - input array contains at least
         one null elementpublic LookupLocatorDiscovery(LookupLocator[] locators, Configuration config) throws ConfigurationException
Configuration.
 
 For each managed LookupLocator, unicast discovery is
 performed to obtain a ServiceRegistrar proxy for that
 lookup service.
locators - the locators to discoverconfig - an instance of Configuration, used to
                 obtain the objects needed to configure the current
                 instance of this classConfigurationException - indicates an exception
         occurred while retrieving an item from the given
         ConfigurationNullPointerException - input array contains at least
         one null element or null is input
         for the configurationpublic void addDiscoveryListener(DiscoveryListener l)
addDiscoveryListener in interface DiscoveryManagementl - the new DiscoveryListener to addNullPointerException - this exception occurs when
         null is input to the listener parameter
         l.IllegalStateException - this exception occurs when
         this method is called after the terminate
         method has been called.removeDiscoveryListener(net.jini.discovery.DiscoveryListener)public void removeDiscoveryListener(DiscoveryListener l)
removeDiscoveryListener in interface DiscoveryManagementl - the existing DiscoveryListener to removeIllegalStateException - this exception occurs when
         this method is called after the terminate
         method has been called.addDiscoveryListener(net.jini.discovery.DiscoveryListener)public ServiceRegistrar[] getRegistrars()
ServiceRegistrar, each
 corresponding to a proxy to one of the currently discovered lookup
 services. For each invocation of this method, a new array is returned.getRegistrars in interface DiscoveryManagementServiceRegistrar, each
         corresponding to a proxy to one of the currently discovered
         lookup servicesIllegalStateException - this exception occurs when
         this method is called after the terminate
         method has been called.ServiceRegistrar, 
DiscoveryManagement.removeDiscoveryListener(net.jini.discovery.DiscoveryListener)public void discard(ServiceRegistrar proxy)
ServiceRegistrar from the
 managed set of lookup services, making the corresponding lookup
 service eligible for re-discovery. This method takes no action if
 the parameter input to this method is null, or if it
 does not match (using equals) any of the elements in
 the managed set.discard in interface DiscoveryManagementproxy - the instance of ServiceRegistrar to discard
              from the managed set of lookup servicesIllegalStateException - this exception occurs when
         this method is called after the terminate
         method has been called.ServiceRegistrar, 
DiscoveryManagement.discard(net.jini.core.lookup.ServiceRegistrar)public void terminate()
After this method has been invoked, no new lookup services will be discovered, and the effect of any new operations performed on the current instance of this class are undefined.
terminate in interface DiscoveryManagementDiscoveryManagement.terminate()public LookupLocator[] getLocators()
LookupLocator in
 which each instance corresponds to a specific lookup service to
 discover. The returned set will include both the set of 
 LookupLocators corresponding to lookup services 
 that have already been discovered as well as the set of those
 that have not yet been discovered. If the managed set of locators
 is empty, this method will return the empty array. This method
 returns a new array upon each invocation.getLocators in interface DiscoveryLocatorManagementLookupLocator array consisting of the elements
         of the managed set of locatorsIllegalStateException - this exception occurs when
         this method is called after the terminate
         method has been called.DiscoveryLocatorManagement.getLocators(), 
setLocators(net.jini.core.discovery.LookupLocator[])public void addLocators(LookupLocator[] locators)
LookupLocator.equals
 method) elements already in the managed set will be ignored. If the
 empty array is input, the managed set of locators will not change.addLocators in interface DiscoveryLocatorManagementlocators - LookupLocator array consisting of the
                 locators to add to the managed set.NullPointerException - this exception occurs when
         either null is input to the locators
         parameter, or one or more of the elements of the
         locators parameter is null.IllegalStateException - this exception occurs when
         this method is called after the terminate
         method has been called.DiscoveryLocatorManagement.addLocators(net.jini.core.discovery.LookupLocator[]), 
removeLocators(net.jini.core.discovery.LookupLocator[])public void setLocators(LookupLocator[] locators)
 If the empty array is input, locator discovery will cease until this
 method is invoked with an input parameter that is non-null
 and non-empty.
setLocators in interface DiscoveryLocatorManagementlocators - LookupLocator array consisting of the 
                 locators that will replace the current locators in the
                 managed set.NullPointerException - this exception occurs when
         either null is input to the locators
         parameter, or one or more of the elements of the
         locators parameter is null.IllegalStateException - this exception occurs when
         this method is called after the terminate
         method has been called.DiscoveryLocatorManagement.setLocators(net.jini.core.discovery.LookupLocator[]), 
getLocators()public void removeLocators(LookupLocator[] locators)
If the empty array is input, this method takes no action.
removeLocators in interface DiscoveryLocatorManagementlocators - LookupLocator array consisting of the
                 locators that will be removed from the managed set.NullPointerException - this exception occurs when
         either null is input to the locators
         parameter, or one or more of the elements of the
         locators parameter is null.IllegalStateException - this exception occurs when
         this method is called after the terminate
         method has been called.DiscoveryLocatorManagement.removeLocators(net.jini.core.discovery.LookupLocator[]), 
addLocators(net.jini.core.discovery.LookupLocator[])public LookupLocator[] getDiscoveredLocators()
LookupLocator objects representing the
 desired lookup services that are currently discovered. If no lookup
 services are currently discovered, this method returns the empty array.
 This method returns a new array upon each invocation.LookupLocator array consisting of the elements
         from the managed set of locators that correspond to lookup
         services that have already been discovered.IllegalStateException - this exception occurs when
         this method is called after the terminate
         method has been called.public LookupLocator[] getUndiscoveredLocators()
LookupLocator objects representing the
 desired lookup services that have not yet been discovered. If all
 of the desired lookup services are currently discovered, this method
 returns the empty array. This method returns a new array upon each
 invocation.LookupLocator array consisting of the elements
         from the managed set of locators that correspond to lookup
         services that have not yet been discovered.IllegalStateException - this exception occurs when
         this method is called after the terminate
         method has been called.Copyright 2007-2013, multiple authors.
Licensed under the Apache License, Version 2.0, see the NOTICE file for attributions.