View Javadoc
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.core.lookup;
20  
21  import java.rmi.RemoteException;
22  import net.jini.core.lease.*;
23  import net.jini.core.entry.Entry;
24  
25  /**
26   * A registered service item is manipulated using an instance of this class.
27   * This is not a remote interface; each implementation of the lookup service
28   * exports proxy objects that implement this interface local the client.  The
29   * proxy methods obey normal RMI remote interface semantics.  Every method
30   * invocation (on both ServiceRegistrar and ServiceRegistration) is atomic
31   * with respect to other invocations.
32   * 
33   * @author Sun Microsystems, Inc.
34   *
35   * @see ServiceRegistrar
36   *
37   * @since 1.0
38   */
39  public interface ServiceRegistration {
40  
41      /**
42       * Returns the service ID for this service. Note that this method 
43       * does not make a remote call.
44       *
45       * @return the ServiceID for this service.
46       */
47      ServiceID getServiceID();
48  
49      /**
50       * Returns the lease that controls the service registration, allowing
51       * the lease to be renewed or cancelled.  Note that this does not make
52       * a remote call.
53       *
54       * @return the lease that controls this service registration.
55       */
56      Lease getLease();
57  
58      /**
59       * Adds the specified attribute sets (those that aren't duplicates of
60       * existing attribute sets) to the registered service item.  Note that
61       * this operation has no effect on existing attribute sets of the
62       * service item, and can be repeated in an idempotent fashion.
63       *
64       * @param attrSets attribute sets to add
65       * @throws UnknownLeaseException the registration lease has expired
66       *         or been cancelled.
67       * @throws java.rmi.RemoteException when a connection issue occurs.
68       */
69      void addAttributes(Entry[] attrSets)
70  	throws UnknownLeaseException, RemoteException;
71  
72      /**
73       * Modifies existing attribute sets. The lengths of attrSetTemplates and
74       * attrSets must be equal, or IllegalArgumentException is thrown.  The
75       * service item's attribute sets are modified as follows.  For each array
76       * index i: if attrSets[i] is null, then every entry that matches
77       * attrSetTemplates[i] is deleted; otherwise, for every non-null field
78       * in attrSets[i], the value of that field is stored into the
79       * corresponding field of every entry that matches attrSetTemplates[i].
80       * The class of attrSets[i] must be the same as, or a superclass of, the
81       * class of attrSetTemplates[i], or IllegalArgumentException is thrown.
82       * If the modifications result in duplicate entries within the service
83       * item, the duplicates are eliminated.
84       * <p>
85       * Note that it is possible to use modifyAttributes in ways that are not
86       * idempotent.  The attribute schema should be designed in such a way
87       * that all intended uses of this method can be performed in an
88       * idempotent fashion.  Also note that modifyAttributes does not provide
89       * a means for setting a field to null; it is assumed that the attribute
90       * schema is designed in such a way that this is not necessary.
91       *
92       * @param attrSetTemplates attribute set templates to match
93       * @param attrSets modifications to make to matching attribute sets
94       * @throws UnknownLeaseException the registration lease has expired
95       *         or been cancelled
96       * @throws IllegalArgumentException lengths of attrSetTemplates and
97       *         attrSets are not equal, or class of an attrSets element is 
98       *         not the same as, or a superclass of, the class of the
99       *         corresponding attrSetTemplates element
100      * @throws java.rmi.RemoteException when a connection issue occurs.
101      */
102     void modifyAttributes(Entry[] attrSetTemplates, Entry[] attrSets)
103 	throws UnknownLeaseException, RemoteException;
104 
105     /**
106      * Deletes all of the service item's existing attributes, and replaces
107      * them with the specified attribute sets.  Any duplicate attribute sets
108      * are eliminated in the stored representation of the item.
109      *
110      * @param attrSets attribute sets to use
111      * @throws UnknownLeaseException the registration lease has expired
112      *         or been cancelled
113      * @throws java.rmi.RemoteException when a connection issue occurs.
114      */
115     void setAttributes(Entry[] attrSets)
116 	throws UnknownLeaseException, RemoteException;
117 }