1 /*
2 * Copyright 1996-2004 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26 package java.rmi.server;
27
28 import java.rmi;
29
30 /**
31 * <code>RemoteRef</code> represents the handle for a remote object. A
32 * <code>RemoteStub</code> uses a remote reference to carry out a
33 * remote method invocation to a remote object.
34 *
35 * @author Ann Wollrath
36 * @since JDK1.1
37 * @see java.rmi.server.RemoteStub
38 */
39 public interface RemoteRef extends java.io.Externalizable {
40
41 /** indicate compatibility with JDK 1.1.x version of class. */
42 static final long serialVersionUID = 3632638527362204081L;
43
44 /**
45 * Initialize the server package prefix: assumes that the
46 * implementation of server ref classes (e.g., UnicastRef,
47 * UnicastServerRef) are located in the package defined by the
48 * prefix.
49 */
50 final static String packagePrefix = "sun.rmi.server";
51
52 /**
53 * Invoke a method. This form of delegating method invocation
54 * to the reference allows the reference to take care of
55 * setting up the connection to the remote host, marshaling
56 * some representation for the method and parameters, then
57 * communicating the method invocation to the remote host.
58 * This method either returns the result of a method invocation
59 * on the remote object which resides on the remote host or
60 * throws a RemoteException if the call failed or an
61 * application-level exception if the remote invocation throws
62 * an exception.
63 *
64 * @param obj the object that contains the RemoteRef (e.g., the
65 * RemoteStub for the object.
66 * @param method the method to be invoked
67 * @param params the parameter list
68 * @param opnum a hash that may be used to represent the method
69 * @return result of remote method invocation
70 * @exception Exception if any exception occurs during remote method
71 * invocation
72 * @since 1.2
73 */
74 Object invoke(Remote obj,
75 java.lang.reflect.Method method,
76 Object[] params,
77 long opnum)
78 throws Exception;
79
80 /**
81 * Creates an appropriate call object for a new remote method
82 * invocation on this object. Passing operation array and index,
83 * allows the stubs generator to assign the operation indexes and
84 * interpret them. The remote reference may need the operation to
85 * encode in the call.
86 *
87 * @since JDK1.1
88 * @deprecated 1.2 style stubs no longer use this method. Instead of
89 * using a sequence of method calls on the stub's the remote reference
90 * (<code>newCall</code>, <code>invoke</code>, and <code>done</code>), a
91 * stub uses a single method, <code>invoke(Remote, Method, Object[],
92 * int)</code>, on the remote reference to carry out parameter
93 * marshalling, remote method executing and unmarshalling of the return
94 * value.
95 *
96 * @param obj remote stub through which to make call
97 * @param op array of stub operations
98 * @param opnum operation number
99 * @param hash stub/skeleton interface hash
100 * @return call object representing remote call
101 * @throws RemoteException if failed to initiate new remote call
102 * @see #invoke(Remote,java.lang.reflect.Method,Object[],long)
103 */
104 @Deprecated
105 RemoteCall newCall(RemoteObject obj, Operation[] op, int opnum, long hash)
106 throws RemoteException;
107
108 /**
109 * Executes the remote call.
110 *
111 * Invoke will raise any "user" exceptions which
112 * should pass through and not be caught by the stub. If any
113 * exception is raised during the remote invocation, invoke should
114 * take care of cleaning up the connection before raising the
115 * "user" or remote exception.
116 *
117 * @since JDK1.1
118 * @deprecated 1.2 style stubs no longer use this method. Instead of
119 * using a sequence of method calls to the remote reference
120 * (<code>newCall</code>, <code>invoke</code>, and <code>done</code>), a
121 * stub uses a single method, <code>invoke(Remote, Method, Object[],
122 * int)</code>, on the remote reference to carry out parameter
123 * marshalling, remote method executing and unmarshalling of the return
124 * value.
125 *
126 * @param call object representing remote call
127 * @throws Exception if any exception occurs during remote method
128 * @see #invoke(Remote,java.lang.reflect.Method,Object[],long)
129 */
130 @Deprecated
131 void invoke(RemoteCall call) throws Exception;
132
133 /**
134 * Allows the remote reference to clean up (or reuse) the connection.
135 * Done should only be called if the invoke returns successfully
136 * (non-exceptionally) to the stub.
137 *
138 * @since JDK1.1
139 * @deprecated 1.2 style stubs no longer use this method. Instead of
140 * using a sequence of method calls to the remote reference
141 * (<code>newCall</code>, <code>invoke</code>, and <code>done</code>), a
142 * stub uses a single method, <code>invoke(Remote, Method, Object[],
143 * int)</code>, on the remote reference to carry out parameter
144 * marshalling, remote method executing and unmarshalling of the return
145 * value.
146 *
147 * @param call object representing remote call
148 * @throws RemoteException if remote error occurs during call cleanup
149 * @see #invoke(Remote,java.lang.reflect.Method,Object[],long)
150 */
151 @Deprecated
152 void done(RemoteCall call) throws RemoteException;
153
154 /**
155 * Returns the class name of the ref type to be serialized onto
156 * the stream 'out'.
157 * @param out the output stream to which the reference will be serialized
158 * @return the class name (without package qualification) of the reference
159 * type
160 * @since JDK1.1
161 */
162 String getRefClass(java.io.ObjectOutput out);
163
164 /**
165 * Returns a hashcode for a remote object. Two remote object stubs
166 * that refer to the same remote object will have the same hash code
167 * (in order to support remote objects as keys in hash tables).
168 *
169 * @return remote object hashcode
170 * @see java.util.Hashtable
171 * @since JDK1.1
172 */
173 int remoteHashCode();
174
175 /**
176 * Compares two remote objects for equality.
177 * Returns a boolean that indicates whether this remote object is
178 * equivalent to the specified Object. This method is used when a
179 * remote object is stored in a hashtable.
180 * @param obj the Object to compare with
181 * @return true if these Objects are equal; false otherwise.
182 * @see java.util.Hashtable
183 * @since JDK1.1
184 */
185 boolean remoteEquals(RemoteRef obj);
186
187 /**
188 * Returns a String that represents the reference of this remote
189 * object.
190 * @return string representing remote object reference
191 * @since JDK1.1
192 */
193 String remoteToString();
194
195 }