/* * @(#)Registry.java 1.18 03/12/19 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package java.rmi.registry; import java.rmi.AccessException; import java.rmi.AlreadyBoundException; import java.rmi.NotBoundException; import java.rmi.Remote; import java.rmi.RemoteException; /** * Registry is a remote interface to a simple remote * object registry that provides methods for storing and retrieving * remote object references bound with arbitrary string names. The * bind, unbind, and rebind * methods are used to alter the name bindings in the registry, and * the lookup and list methods are used to * query the current name bindings. * *

In its typical usage, a Registry enables RMI client * bootstrapping: it provides a simple means for a client to obtain an * initial reference to a remote object. Therefore, a registry's * remote object implementation is typically exported with a * well-known address, such as with a well-known {@link * java.rmi.server.ObjID#REGISTRY_ID ObjID} and TCP port number * (default is {@link #REGISTRY_PORT 1099}). * *

The {@link LocateRegistry} class provides a programmatic API for * constructing a bootstrap reference to a Registry at a * remote address (see the static getRegistry methods) * and for creating and exporting a Registry in the * current VM on a particular local address (see the static * createRegistry methods). * *

A Registry implementation may choose to restrict * access to some or all of its methods (for example, methods that * mutate the registry's bindings may be restricted to calls * originating from the local host). If a Registry * method chooses to deny access for a given invocation, its * implementation may throw {@link java.rmi.AccessException}, which * (because it extends {@link java.rmi.RemoteException}) will be * wrapped in a {@link java.rmi.ServerException} when caught by a * remote client. * *

The names used for bindings in a Registry are pure * strings, not parsed. A service which stores its remote reference * in a Registry may wish to use a package name as a * prefix in the name binding to reduce the likelihood of name * collisions in the registry. * * @author Ann Wollrath * @author Peter Jones * @version 1.18, 03/12/19 * @since JDK1.1 * @see LocateRegistry */ public interface Registry extends Remote { /** Well known port for registry. */ public static final int REGISTRY_PORT = 1099; /** * Returns the remote reference bound to the specified * name in this registry. * * @param name the name for the remote reference to look up * * @return a reference to a remote object * * @throws NotBoundException if name is not currently bound * * @throws RemoteException if remote communication with the * registry failed; if exception is a ServerException * containing an AccessException, then the registry * denies the caller access to perform this operation * * @throws AccessException if this registry is local and it denies * the caller access to perform this operation * * @throws NullPointerException if name is null */ public Remote lookup(String name) throws RemoteException, NotBoundException, AccessException; /** * Binds a remote reference to the specified name in * this registry. * * @param name the name to associate with the remote reference * @param obj a reference to a remote object (usually a stub) * * @throws AlreadyBoundException if name is already bound * * @throws RemoteException if remote communication with the * registry failed; if exception is a ServerException * containing an AccessException, then the registry * denies the caller access to perform this operation (if * originating from a non-local host, for example) * * @throws AccessException if this registry is local and it denies * the caller access to perform this operation * * @throws NullPointerException if name is * null, or if obj is null */ public void bind(String name, Remote obj) throws RemoteException, AlreadyBoundException, AccessException; /** * Removes the binding for the specified name in * this registry. * * @param name the name of the binding to remove * * @throws NotBoundException if name is not currently bound * * @throws RemoteException if remote communication with the * registry failed; if exception is a ServerException * containing an AccessException, then the registry * denies the caller access to perform this operation (if * originating from a non-local host, for example) * * @throws AccessException if this registry is local and it denies * the caller access to perform this operation * * @throws NullPointerException if name is null */ public void unbind(String name) throws RemoteException, NotBoundException, AccessException; /** * Replaces the binding for the specified name in * this registry with the supplied remote reference. If there is * an existing binding for the specified name, it is * discarded. * * @param name the name to associate with the remote reference * @param obj a reference to a remote object (usually a stub) * * @throws RemoteException if remote communication with the * registry failed; if exception is a ServerException * containing an AccessException, then the registry * denies the caller access to perform this operation (if * originating from a non-local host, for example) * * @throws AccessException if this registry is local and it denies * the caller access to perform this operation * * @throws NullPointerException if name is * null, or if obj is null */ public void rebind(String name, Remote obj) throws RemoteException, AccessException; /** * Returns an array of the names bound in this registry. The * array will contain a snapshot of the names bound in this * registry at the time of the given invocation of this method. * * @return an array of the names bound in this registry * * @throws RemoteException if remote communication with the * registry failed; if exception is a ServerException * containing an AccessException, then the registry * denies the caller access to perform this operation * * @throws AccessException if this registry is local and it denies * the caller access to perform this operation */ public String[] list() throws RemoteException, AccessException; }