." Copyright 2003-2006 Sun Microsystems, Inc.  All Rights Reserved.
." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
."
." This code is free software; you can redistribute it and/or modify it
." under the terms of the GNU General Public License version 2 only, as
." published by the Free Software Foundation.
."
." This code is distributed in the hope that it will be useful, but WITHOUT
." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
." FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
." version 2 for more details (a copy is included in the LICENSE file that
." accompanied this code).
."
." You should have received a copy of the GNU General Public License version
." 2 along with this work; if not, write to the Free Software Foundation,
." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
."
." Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
." or visit www.oracle.com if you need additional information or have any
." questions.
."
.TH rmiregistry 1 "04 May 2009"
." Generated from HTML by html2man (author: Eric Armstrong)

.LP
.SH "Name"
rmiregistry \- The Java Remote Object Registry
.LP
.RS 3

.LP
.LP
The \f3rmiregistry\fP command starts a remote object registry on the specified port on the current host.
.LP
.RE
.SH "SYNOPSIS"
.LP

.LP
.nf
\f3
.fl
rmiregistry [\fP\f4port\fP\f3]
.fl
\fP
.fi

.LP
.SH "DESCRIPTION"
.LP

.LP
.LP
The \f3rmiregistry\fP command creates and starts a remote object registry on the specified \f2port\fP on the current host. If \f2port\fP is omitted, the registry is started on port 1099. The \f3rmiregistry\fP command produces no output and is typically run in the background. For example:
.LP
.LP
\f2rmiregistry &\fP
.LP
.LP
A remote object registry is a bootstrap naming service that is used by RMI servers on the same host to bind remote objects to names. Clients on local and remote hosts can then look up remote objects and make remote method invocations.
.LP
.LP
The registry is typically used to locate the first remote object on which an application needs to invoke methods. That object in turn will provide application\-specific support for finding other objects.
.LP
.LP
The methods of the \f2java.rmi.registry.LocateRegistry\fP class are used to get a registry operating on the local host or local host and port.
.LP
.LP
The URL\-based methods of the \f2java.rmi.Naming\fP class operate on a registry and can be used to look up a remote object on any host, and on the local host: bind a simple (string) name to a remote object, rebind a new name to a remote object (overriding the old binding), unbind a remote object, and list the URLs bound in the registry.
.LP
.SH "OPTIONS"
.LP

.LP
.RS 3
.TP 3
\-J 
Used in conjunction with any \f2java\fP option, it passes the option following the \f2\-J\fP (no spaces between the \-J and the option) on to the \f2java\fP interpreter. 
.RE

.LP
.SH "SEE ALSO"
.LP

.LP
.LP
java(1), 
.na
\f2java.rmi.registry.LocateRegistry\fP @
.fi
http://java.sun.com/javase/6/docs/api/java/rmi/registry/LocateRegistry.html and 
.na
\f2java.rmi.Naming\fP @
.fi
http://java.sun.com/javase/6/docs/api/java/rmi/Naming.html
.LP

.LP
 
