1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 package net.jini.lookup; 20 21 import net.jini.core.lookup.ServiceItem; 22 23 /** 24 * The <code>LookupCache</code> interface defines the methods provided 25 * by the object created and returned by the 26 * {@link net.jini.lookup.ServiceDiscoveryManager ServiceDiscoveryManager} 27 * when a client-like entity invokes the 28 * {@link net.jini.lookup.ServiceDiscoveryManager#createLookupCache 29 * createLookupCache} method. It is within the object returned by that 30 * method that discovered service references, matching criteria defined 31 * by the entity, are stored. Through this interface, the entity may 32 * retrieve one or more of the stored service references, register and 33 * un-register with the cache's event mechanism, discard previously 34 * discovered service references to make them eligible for re-discovery, 35 * and terminate all of the cache's processing. 36 * 37 * @author Sun Microsystems, Inc. 38 * 39 * @see ServiceDiscoveryManager 40 */ 41 public interface LookupCache { 42 /** 43 * Finds a <code>ServiceItem</code> object that satisfies the given 44 * <code>filter</code> parameter. 45 * <p> 46 * The service item returned must have been previously discovered to 47 * be both registered with one or more of the lookup services in the 48 * managed set, and to match criteria defined by the entity. 49 * <p> 50 * The semantics of the <code>filter</code> argument are identical 51 * to those of the <code>filter</code> argument specified for a 52 * number of the methods defined in the interface of the 53 * <code>ServiceDiscoveryManager</code> utility class. This argument 54 * is intended to allow an entity to separate its filtering into two 55 * steps: an initial filter applied during the discovery phase, and 56 * a finer resolution filter applied upon retrieval from the cache. 57 * As with the methods of the <code>ServiceDiscoveryManager</code>, if 58 * <code>null</code> is the value of this argument, then no additional 59 * filtering will be performed. 60 * 61 * @param filter used for matching <code>ServiceItem</code>s. A null 62 * value means no additional filtering should be applied. 63 * 64 * @return ServiceItem that satisfies the filter, and that was 65 * previously discovered to be registered with one 66 * or more lookup services in the managed set. A 67 * <code>null</code> value will be returned if no 68 * <code>ServiceItem</code> is found that matches 69 * the criteria or if the cache is empty. 70 */ 71 public ServiceItem lookup(ServiceItemFilter filter); 72 73 /** 74 * Finds an array of instances of <code>ServiceItem</code> that each 75 * satisfy the given <code>filter</code> parameter. 76 * <p> 77 * Each service item contained in the returned array must have been 78 * previously discovered to be both registered with one or more of the 79 * lookup services in the managed set, and to match criteria defined 80 * by the entity. 81 * <p> 82 * The semantics of the <code>filter</code> argument are 83 * identical to those of the <code>filter</code> argument specified 84 * for a number of the methods defined in the interface of the 85 * <code>ServiceDiscoveryManager</code> utility class. This argument is 86 * intended to allow an entity to separate its filtering into two 87 * steps: an initial filter applied during the discovery phase, and 88 * a finer resolution filter applied upon retrieval from the cache. 89 * As with the methods of the <code>ServiceDiscoveryManager</code>, if 90 * <code>null</code> is the value of this argument, then no 91 * additional filtering will be performed. 92 * 93 * @param filter used for matching <code>ServiceItem</code>s. 94 * A null value means no additional filtering should 95 * be applied. 96 * 97 * @param maxMatches maximum number of matches to return. If this 98 * value is set to <code>Integer.MAX_VALUE</code> 99 * then all elements in the cache that match the 100 * criteria will be returned. 101 * 102 * @return ServiceItem[] array whose elements each satisfy the filter, 103 * and that were previously discovered to be 104 * registered with one or more lookup services in 105 * the managed set. An empty array will be returned 106 * if no <code>ServiceItem</code> is found that 107 * matches the criteria or if the cache is empty. 108 * 109 * @throws java.lang.IllegalArgumentException if <code>maxMatches</code> 110 * is a negative number. 111 */ 112 public ServiceItem[] lookup(ServiceItemFilter filter, int maxMatches); 113 114 /** 115 * Registers a <code>ServiceDiscoveryListener</code> object with 116 * the event mechanism of a <code>LookupCache</code>. The listener 117 * object will receive a <code>ServiceDiscoveryEvent</code> upon the 118 * discovery, removal, or modification of one of the cache's 119 * services. Once a listener is registered, it will be notified of 120 * all service references discovered to date, and will be notified as 121 * new services are discovered and existing services are modified or 122 * discarded. 123 * 124 * If the parameter value duplicates (using <code>equals</code>) another 125 * element in the set of listeners, no action is taken. If the parameter 126 * value is <code>null</code>, a <code>NullPointerException</code> is 127 * thrown. 128 * 129 * @param listener the <code>ServiceDiscoveryListener</code> object to 130 * register. 131 * 132 * @throws java.lang.NullPointerException this exception occurs when 133 * <code>null</code> is input to the <code>listener</code> 134 * parameter. 135 * @see #removeListener 136 * 137 */ 138 public void addListener(ServiceDiscoveryListener listener); 139 140 /** 141 * Removes a <code>ServiceDiscoveryListener</code> object from the set 142 * of listeners currently registered with the <code>LookupCache</code>. 143 * Once all listeners are removed from the cache's set of listeners, 144 * the cache will send no more <code>ServiceDiscoveryEvent</code> 145 * notifications. 146 * 147 * If the parameter value is <code>null</code>, or if the parameter value 148 * does not exist in the managed set of listeners, no action is taken. 149 * 150 * @param listener the <code>ServiceDiscoveryListener</code> object to 151 * remove. 152 * @see #addListener 153 */ 154 public void removeListener(ServiceDiscoveryListener listener); 155 156 /** 157 * Deletes a service reference from the cache and causes a notification 158 * to be sent to all registered listeners indicating that the service 159 * has been discarded. 160 * 161 * @param serviceReference the service reference to discard. 162 */ 163 public void discard(Object serviceReference); 164 165 /** 166 * Performs cleanup duties related to the termination of 167 * the processing being performed by a particular instance of 168 * <code>LookupCache</code>. For that instance, this method cancels 169 * all event leases granted by the lookup services that supplied the 170 * contents of the cache, and un-exports all remote listener objects 171 * registered with those lookup services. The <code>terminate</code> 172 * method is typically called when the entity is no longer interested 173 * in the contents of the <code>LookupCache</code>. 174 */ 175 void terminate(); 176 }