.'" t
." Copyright 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
." CA 95054 USA or visit www.sun.com if you need additional information or
." have any questions.
." ` 
.TH rmid 1 "05 Aug 2006"
." Generated by html2roff
.\\"  Changed by: Ann Wollrath \- JavaSoft East,  2\-Mar\-2000 
.\\"  Changed by: Jen McGinn \- Jini Technology Software,  6\-Mar\-2000 
.LP
.SH NAME
rmid \- The Java RMI Activation System Daemon
.LP

.LP
.LP
\f3rmid\fP starts the activation system daemon that allows objects to be registered and activated in a virtual machine (VM).
.LP
.SH "SYNOPSIS"
.LP

.LP
.nf
\f3
.fl
rmid [options]
.fl
\fP
.fi

.LP
.SH "DESCRIPTION"
.LP

.LP
.LP
The \f3rmid\fP tool starts the activation system daemon. The activation system daemon must be started before activatable objects can be either registered with the activation system or activated in a VM. See the 
.na
\f2Java RMI Specification\fP @
.fi
http://java.sun.com/javase/6/docs/platform/rmi/spec/rmitoc.html and 
.na
\f2Activation tutorials\fP @
.fi
http://java.sun.com/javase/6/docs/technotes/guides/rmi/activation/overview.html for details on how to write programs that use activatable remote objects.
.LP
.LP
The daemon can be started by executing the \f2rmid\fP command, and specifying a security policy file, as follows:
.LP
.nf
\f3
.fl
    rmid \-J\-Djava.security.policy=rmid.policy
.fl
\fP
.fi

.LP
.LP
\f3Note:\fP When running Sun's implementation of \f2rmid\fP, by default you will need to specify a security policy file so that \f2rmid\fP can verify whether or not the information in each \f2ActivationGroupDesc\fP is allowed to be used to launch a VM for an activation group. Specifically, the command and options specified by the \f2CommandEnvironment\fP and any \f2Properties\fP passed to an \f2ActivationGroupDesc\fP's constructor must now be explicitly allowed in the security policy file for \f2rmid\fP. The value of the \f2sun.rmi.activation.execPolicy\fP property dictates the policy that \f2rmid\fP uses to determine whether or not the information in an \f2ActivationGroupDesc\fP may be used to launch a VM for an activation group.
.LP
.LP
Executing \f2rmid\fP by default
.LP
.RS 3
.TP 2
*
starts the Activator and an internal registry on the default port, 1098, and 
.TP 2
*
binds an \f2ActivationSystem\fP to the name \f2java.rmi.activation.ActivationSystem\fP in this internal registry. 
.RE

.LP
.LP
To specify an alternate port for the registry, you must specify the \f2\-port\fP option when starting up \f2rmid\fP. For example,
.LP
.nf
\f3
.fl
    rmid \-J\-Djava.security.policy=rmid.policy \-port 1099
.fl
\fP
.fi

.LP
.LP
starts the activation system daemon and a registry on the registry's default port, 1099.
.LP
.SS 
Starting rmid from
inetd/xinetd
.LP
.LP
An alternative to starting \f2rmid\fP from the command line is to configure \f2inetd\fP (Solaris) or \f2xinetd\fP (Linux) to start \f2rmid\fP on demand.
.LP
.LP
When \f2rmid\fP starts up, it attempts to obtain an inherited channel (inherited from \f2inetd\fP/\f2xinetd\fP) by invoking the \f2System.inheritedChannel\fP method. If the inherited channel is \f2null\fP or not an instance of \f2java.nio.channels.ServerSocketChannel\fP, then \f2rmid\fP assumes that it was not started by \f2inetd\fP/\f2xinetd\fP, and it starts up as described above.
.LP
.LP
If the inherited channel is a \f2ServerSocketChannel\fP instance, then \f2rmid\fP uses the \f2java.net.ServerSocket\fP obtained from the \f2ServerSocketChannel\fP as the server socket that accepts requests for the remote objects it exports, namely the registry in which the \f2java.rmi.activation.ActivationSystem\fP is bound and the \f2java.rmi.activation.Activator\fP remote object. In this mode, \f2rmid\fP behaves the same as when it is started from the command line, \f2except\fP:
.LP
.RS 3
.TP 2
*
Output printed to \f2System.err\fP is redirected to a file. This file is located in the directory specified by the \f2java.io.tmpdir\fP system property (typically \f2/var/tmp\fP or \f2/tmp\fP) with the prefix \f2"rmid\-err"\fP and the suffix \f2"tmp"\fP. 
.TP 2
*
The \f2\-port\fP option is disallowed. If this option is specified, \f2rmid\fP will exit with an error message. 
.TP 2
*
The \f2\-log\fP option is required. If this option is not specified, \f2rmid\fP will exit with an error message. 
.RE

.LP
.LP
See the man pages for \f2inetd\fP (Solaris) or \f2xinetd\fP (Linux) for details on how to configure services to be started on demand.
.LP
.SH "OPTIONS"
.LP

.LP
.TP 3
\-C<someCommandLineOption> 
Specifies an option that is passed as a command\-line argument to each child process (activation group) of \f2rmid\fP when that process is created. For example, you could pass a property to each virtual machine spawned by the activation system daemon: 
.nf
\f3
.fl
    rmid \-C\-Dsome.property=value
.fl
\fP
.fi
This ability to pass command\-line arguments to child processes can be useful for debugging. For example, the following command: 
.nf
\f3
.fl
    rmid \-C\-Djava.rmi.server.logCalls=true
.fl
\fP
.fi
will enable server\-call logging in all child VMs. 
.LP
.TP 3
\-J<someCommandLineOption> 
Specifies an option that is passed to the \f2java\fP interpreter running \f2rmid\fP. For example, to specify that \f2rmid\fP use a policy file named \f2rmid.policy\fP, the \f2\-J\fP option can be used to define the \f2java.security.policy\fP property on \f2rmid\fP's command line, for example: 
.nf
\f3
.fl
    rmid \-J\-Djava.security.policy=rmid.policy
.fl
\fP
.fi
.TP 3

\-J\-Dsun.rmi.activation.execPolicy=<policy> 
Specifies the policy that \f2rmid\fP employs to check commands and command\-line options used to launch the VM in which an activation group runs. Please note that this option exists only in Sun's implementation of the Java RMI activation daemon. If this property is not specified on the command line, the result is the same as if \f2\-J\-Dsun.rmi.activation.execPolicy=default\fP were specified. The possible values of \f2<policy>\fP can be \f2default\fP, \f2<policyClassName>\fP, or \f2none\fP: 
.LP
.RS 3
.TP 2
*
\f3default (or if this property is \fP\f4unspecified\fP\f3)\fP 
.LP
The default \f2execPolicy\fP allows \f2rmid\fP to execute commands with specific command\-line options only if \f2rmid\fP has been granted permission to execute those commands and options in the security policy file that \f2rmid\fP uses. Only the default activation group implementation can be used with the \f2default\fP execution policy. 
.LP
\f2rmid\fP launches a VM for an activation group using the information in the group's registered activation group descriptor, an \f2ActivationGroupDesc\fP. The group descriptor specifies an optional \f2ActivationGroupDesc.CommandEnvironment\fP which includes the \f2command\fP to execute to start the activation group as well as any command line \f2options\fP to be added to the command line. By default, \f2rmid\fP uses the \f2java\fP command found in \f2java.home\fP. The group descriptor also contains \f2properties\fP overrides that are added to the command line as options defined as: 
.nf
\f3
.fl
    \-D\fP\f4<property>\fP\f3=\fP\f4<value>\fP\f3
.fl
\fP
.fi
.LP
The permission \f2com.sun.rmi.rmid.ExecPermission\fP is used to grant \f2rmid\fP permission to execute a command, specified in the group descriptor's \f2CommandEnvironment\fP to launch an activation group. The permission \f2com.sun.rmi.rmid.ExecOptionPermission\fP is used to allow \f2rmid\fP to use command\-line options, specified as properties overrides in the group descriptor or as options in the \f2CommandEnvironment\fP, when launching the activation group. 
.LP
When granting \f2rmid\fP permission to execute various commands and options, the permissions \f2ExecPermission\fP and \f2ExecOptionPermission\fP need to be granted universally (i.e., granted to all code sources).  
.TP 3
ExecPermission 
The \f2ExecPermission\fP class represents permission for \f2rmid\fP to execute a specific \f2command\fP to launch an activation group. 
.LP
\f3Syntax\fP
.br
The \f2name\fP of an \f2ExecPermission\fP is the path name of a command to grant \f2rmid\fP permission to execute. A path name that ends in "/*" indicates all the files contained in that directory (where "/" is the file\-separator character, \f2File.separatorChar\fP). A path name that ends with "/\-" indicates all files and subdirectories contained in that directory (recursively). A path name consisting of the special token "<<ALL FILES>>" matches \f3any\fP file. 
.LP
\f3Note:\fP A path name consisting of a single "*" indicates all the files in the current directory, while a path name consisting of a single "\-" indicates all the files in the current directory and (recursively) all files and subdirectories contained in the current directory.  
.TP 3
ExecOptionPermission 
The \f2ExecOptionPermission\fP class represents permission for \f2rmid\fP to use a specific command\-line \f2option\fP when launching an activation group. The \f2name\fP of an \f2ExecOptionPermission\fP is the value of a command line option. 
.LP
\f3Syntax\fP
.br
Options support a limited wildcard scheme. An asterisk signifies a wildcard match, and it may appear as the option name itself (i.e., it matches any option), or an asterisk may appear at the end of the option name only if the asterisk follows either a "." or "=". 
.LP
For example: "*" or "\-Dfoo.*" or "\-Da.b.c=*" is valid, "*foo" or "\-Da*b" or "ab*" is not.  
.TP 3
Policy file for
rmid 
When granting \f2rmid\fP permission to execute various commands and options, the permissions \f2ExecPermission\fP and \f2ExecOptionPermission\fP need to be granted universally (i.e., granted to all code sources). It is safe to grant these permissions universally because only \f2rmid\fP checks these permissions. 
.LP
An example policy file that grants various execute permissions to \f2rmid\fP is: 
.nf
\f3
.fl
grant {
.fl
    permission com.sun.rmi.rmid.ExecPermission
.fl
        "/files/apps/java/jdk1.2.2/solaris/bin/java";
.fl

.fl
    permission com.sun.rmi.rmid.ExecPermission
.fl
        "/files/apps/java/jdk1.2.2/solaris/bin/java_g";
.fl

.fl
    permission com.sun.rmi.rmid.ExecPermission
.fl
        "/files/apps/rmidcmds/*";
.fl

.fl
    permission com.sun.rmi.rmid.ExecOptionPermission
.fl
        "\-Djava.security.policy=/files/policies/group.policy";
.fl

.fl
    permission com.sun.rmi.rmid.ExecOptionPermission
.fl
        "\-Djava.security.debug=*";
.fl

.fl
    permission com.sun.rmi.rmid.ExecOptionPermission
.fl
        "\-Dsun.rmi.*";
.fl
};
.fl
\fP
.fi
The first two permissions granted allow \f2rmid\fP to execute the 1.2.2 version of the \f2java\fP and \f2java_g\fP commands, specified by their explicit path names. Note that by default, the version of the \f2java\fP command found in \f2java.home\fP is used (the same one that \f2rmid\fP uses), and does not need to be specified in the policy file. The third permission allows \f2rmid\fP to execute any command in the directory \f2/files/apps/rmidcmds\fP. 
.LP
The fourth permission granted, an \f2ExecOptionPermission\fP, allows \f2rmid\fP to launch an activation group that defines the security policy file to be \f2/files/policies/group.policy\fP. The next permission allows the \f2java.security.debug\fP property to be used by an activation group. The last permission allows any property in the \f2sun.rmi\fP property name hierarchy to be used by activation groups. 
.LP
To start \f2rmid\fP with a policy file, the \f2java.security.policy\fP property needs to be specified on \f2rmid\fP's command line, for example: 
.RS 3

.LP
.LP
\f2rmid \-J\-Djava.security.policy=rmid.policy\fP
.LP
.RE
.TP 2
*
.TP 2
*
\f4<policyClassName>\fP 
.LP
If the default behavior is not flexible enough, an administrator can provide, when starting \f2rmid\fP, the name of a class whose \f2checkExecCommand\fP method is executed in order to check commands to be executed by rmid. 
.LP
The \f2policyClassName\fP specifies a public class with a public, no\-argument constructor and an implementation of the following \f2checkExecCommand\fP method: 
.nf
\f3
.fl
    public void checkExecCommand(ActivationGroupDesc desc,
.fl
                                 String[] command)
.fl
        throws SecurityException;
.fl
\fP
.fi
Before launching an activation group, \f2rmid\fP calls the policy's \f2checkExecCommand\fP method, passing it the activation group descriptor and an array containing the complete command to launch the activation group. If the \f2checkExecCommand\fP throws a \f2SecurityException\fP, \f2rmid\fP will not launch the activation group and an \f2ActivationException\fP will be thrown to the caller attempting to activate the object. 
.LP
.TP 2
*
\f3none\fP 
.LP
If the \f2sun.rmi.activation.execPolicy\fP property value is "none", then \f2rmid\fP will not perform any validation of commands to launch activation groups.  
.RE
.TP 3
\-log dir 
Specifies the name of the directory the activation system daemon uses to write its database and associated information. The log directory defaults to creating a directory, \f2log\fP, in the directory in which the \f2rmid\fP command was executed. 
.TP 3
\-port port 
Specifies the port \f2rmid\fP's registry uses. The activation system daemon binds the \f2ActivationSystem\fP, with the name \f2java.rmi.activation.ActivationSystem\fP, in this registry. Thus, the \f2ActivationSystem\fP on the local machine can be obtained using the following \f2Naming.lookup\fP method call: 
.nf
\f3
.fl
    import java.rmi.*; 
.fl
    import java.rmi.activation.*;
.fl

.fl
    ActivationSystem system; system = (ActivationSystem)
.fl
    Naming.lookup("//:\fP\f4port\fP/java.rmi.activation.ActivationSystem");
.fl
.fi
.TP 3
\-stop 
Stops the current invocation of \f2rmid\fP, for a port specified by the \f2\-port\fP option. If no port is specified, it will stop the \f2rmid\fP running on port 1098.   
.SH "ENVIRONMENT VARIABLES"
.LP

.LP
.TP 3
CLASSPATH 
Used to provide the system a path to user\-defined classes. Directories are separated by colons. For example: 
.nf
\f3
.fl
    .:/usr/local/java/classes
.fl
\fP
.fi

.LP
.SH "SEE ALSO"
.LP

.LP
.LP
rmic, CLASSPATH, java
.LP

.LP
 
