rmid - Java RMI 기동 시스템 demon

rmid 로 기동 시스템 demon를 개시하면(자), 객체를 Java 가상 머신 (JVM)에 등록해 기동할 수 있게 됩니다.

형식

rmid [options]

설명

rmid 툴은, 기동 시스템 demon를 개시합니다. 기동 시스템 demon를 개시하지 않으면, 기동 가능 객체를 기동 시스템에 등록하거나 JVM 내에서 기동하거나 할 수가 없습니다. 기동 가능한 원격 객체를 사용한 프로그램의 작성 방법의 자세한 것은,「RMI 스펙」 「기동의 튜토리얼」을 참조해 주세요.

demon를 기동하려면 , 다음과 같이, 시큐리티 정책 파일을 지정해 rmid 커멘드를 실행합니다.

    rmid -J-Djava.security.policy=rmid.policy

주:rmid 의 Sun 의 구현을 실행하는 경우, 디폴트에서는, 시큐리티 정책 파일을 지정할 필요가 있습니다. 그것은, 기동 그룹용으로 JVM 를 기동하기 위해서 각 ActivationGroupDesc 내의 정보를 사용할 수 있을지 어떨지를 rmid 를 검증할 수 있도록(듯이) 하기 (위해)때문에입니다. 특히,ActivationGroupDesc 의 생성자 에게 건네지는 CommandEnvironment 나 임의의 Properties 에 의해 지정되는 커멘드 및 옵션은,rmid 의 시큐리티 정책 파일 중(안)에서 명시적으로 허가하는 것이 필요하게 되었습니다. sun.rmi.activation.execPolicy 프로퍼티의 값은, 기동 그룹용으로 JVM 를 기동하기 위해서 ActivationGroupDesc 내의 정보를 사용할 수 있을지 어떨지를 판단할 때 rmid 가 사용하는 정책를 결정합니다.

rmid 를 디폴트 설정으로 실행하면(자), 다음과 같은 처리를 합니다.

레지스트리에 다른 포트를 지정하려면 ,rmid 의 기동시에 -port 옵션을 지정하지 않으면 안됩니다. 다음에 예를 나타냅니다.
    rmid -J-Djava.security.policy=rmid.policy -port 1099
이 커멘드는, 기동 시스템 demon를 개시해, 레지스트리의 디폴트 포트 1099 로 레지스트리를 개시합니다.

옵션

-C<someCommandLineOption>
rmid 의 child process (기동 그룹)가 작성되었을 때에, 각각의 child process에 커멘드행 인수로서 건네받는 옵션을 지정합니다. 예를 들어, 다음과 같이 지정하면(자), 기동 시스템 demon에 의해 생성되는 각 Java 가상 머신에 프로퍼티을 건네줄 수가 있습니다.
    rmid -C-Dsome.property=value
커멘드행 인수를 child process에 건네주는 기능은, 디버그를 실시하는 경우에 편리합니다. 예를 들어, 다음과 같은 커멘드를 실행할 수 있습니다.
    rmid -C-Djava.rmi.server.logCalls=true
이 커멘드에 의해, 모든 아이 JVM 로 서버 호출의 로그가 작성되게 됩니다.

-J<someCommandLineOption>
rmid 를 실행하고 있는 java interpreter에 건네주는 옵션을 지정합니다. 예를 들어,rmidrmid.policy 라는 이름의 정책 파일을 사용하도록(듯이) 지정하려면 ,rmid 의 커멘드행으로 -J 옵션을 사용해,java.security.policy 프로퍼티을 정의합니다. 다음에 예를 나타냅니다.
    rmid -J-Djava.security.policy=rmid.policy
-J-Dsun.rmi.activation.execPolicy=<policy>
기동 그룹이 실행되게 되는 JVM 의 기동에 사용하는 커멘드 및 커멘드행 옵션을 체크하기 위해서,rmid 가 채용하는 정책를 지정합니다. 이 옵션은, RMI 기동 demon의 Sun 의 구현인 만큼 존재하는 것에 주의해 주세요. 커멘드행에 이 프로퍼티을 지정하지 않는 경우, 결과는 -J-Dsun.rmi.activation.execPolicy=default 를 지정했을 경우와 같게 됩니다. <policy> 로 지정 가능한 값은,default ,<policyClassName> , 또는 none 입니다. 각각의 값에 대해, 이후에 설명합니다.

  • default (또는, 이 프로퍼티이 「지정되어 있지 않다」경우)

    디폴트의 execPolicy 의 경우,rmid 를 실행할 수 있는 것은,rmid 가 사용하는 시큐리티 정책 파일 중(안)에서, 실행하는 권한이 rmid 에게 줄 수 있고 있는 커멘드 및 커멘드행 옵션 뿐입니다. 「디폴트」의 실행 정책로 사용할 수 있는 것은, 디폴트의 기동 그룹 구현 뿐입니다.

    rmid 는, 기동 그룹용의 JVM 를 기동할 경우에, 그 그룹에 대해 등록된 기동 그룹 기술자인 ActivationGroupDesc 내의 정보를 사용합니다. 그룹 기술자는,ActivationGroupDesc.CommandEnvironment 를 지정합니다 (생략 가능). 이것에는, 기동 그룹을 개시하는 「커멘드」라고, 그 커멘드행에 추가할 수 있는 커멘드행 「옵션」이 포함되어 있습니다. 디폴트에서는,rmid 는,java.home 에 있는 java 커멘드를 사용합니다. 그룹 기술자에게는, 옵션으로서 커멘드행에 추가되는 「프로퍼티」오버라이드(override)도 포함되어 있습니다. 이 프로퍼티은, 다음과 같이 정의합니다.

        -D<property>=<value>
    

    액세스권 com.sun.rmi.rmid.ExecPermission 를 사용하면(자), 그룹 기술자의 CommandEnvironment 으로 지정된 커멘드를 실행해 기동 그룹을 개시하는 권한을,rmid 에 대해서 허가할 수가 있습니다. 액세스권 com.sun.rmi.rmid.ExecOptionPermission 를 사용하면(자), 그룹 기술자로 프로퍼티 오버라이드(override)로서 지정된 커멘드행 옵션, 또는 CommandEnvironment 로 옵션으로서 지정된 커멘드행 옵션을, 기동 그룹을 개시할 경우에 rmid 를 사용할 수 있게 됩니다.

    rmid 에 다양한 커멘드 및 옵션을 실행하는 권한을 허가하는 경우는, 액세스권 ExecPermissionExecOptionPermission 를 범용적으로 허가할 필요가 있습니다. 즉, 모든 코드 소스에 대해서 허가합니다.

    ExecPermission
    ExecPermission 클래스는, 기동 그룹을 개시하기 위해서 rmid 가 특정의 「커멘드」를 실행하는 권한을 나타냅니다.

    구문
    ExecPermission 의 「이름」은,rmid 에 실행을 허가하는 커멘드의 경로명입니다. 「\*」으로 끝나는 경로명은, 그 디렉토리에 포함되는 모든 파일을 나타냅니다 ( 「\」은 파일 단락 문자 File.separatorChar). 「\-」으로 끝나는 경로명은, 그 디렉토리에 포함되는 모든 파일과 서브 디렉토리 (재귀적으로)를 나타냅니다. 경로명에 특별한 토큰 「<<ALL FILES>>」를 지정했을 경우는,임의의파일을 나타냅니다.

    주:「*」을 1 개(살) 지정했을 뿐의 경로명은, 현재의 디렉토리내의 모든 파일을 나타냅니다. 또, 「-」을 1 개(살) 지정했을 뿐의 경로명은, 현재의 디렉토리내의 모든 파일과 현재의 디렉토리에 포함되는 모든 파일과 서브 디렉토리 (재귀적으로)를 나타냅니다.

    ExecOptionPermission
    ExecOptionPermission 클래스는, 기동 그룹을 개시할 경우에 rmid 가 특정의 커멘드행 「옵션」을 사용할 수 있는 권한을 나타냅니다. ExecOptionPermission 의 「이름」은, 커멘드행 옵션의 값입니다.

    구문
    옵션에서는, 와일드 카드가 한정적으로 지원됩니다. asterisk는, 와일드 카드 매치를 나타냅니다. asterisk는, 옵션명 그 자체로서 사용할 수 있습니다. 즉, 임의의 옵션을 나타낼 수가 있습니다. 또, 옵션명의 말미에 사용할 수도 있습니다. 다만, 「.」인가 「=」의 직후에 asterisk를 지정할 필요가 있습니다.

    예를 나타냅니다. 「*」, 「-Dfoo. *」, 「-Da.b.c=*」는 유효합니다만, 「*foo」, 「-Da*b」, 「ab*」는 무효입니다.

    rmid 의 정책 파일
    rmid 에 다양한 커멘드 및 옵션을 실행하는 권한을 허가하는 경우는, 액세스권 ExecPermissionExecOptionPermission 를 범용적으로 허가할 필요가 있습니다. 즉, 모든 코드 소스에 대해서 허가합니다. 이러한 액세스권을 체크하는 것은 rmid 만일 수 있는이므로, 이러한 액세스권을 범용적으로 허가해도 안전합니다.

    rmid 에 각종의 실행 권한한을 허가하는 정책 파일의 예를, 다음에 나타냅니다.

    grant {
        permission com.sun.rmi.rmid.ExecPermission
            "c:\\files\\apps\\java\\jdk1. 2.2\\win\\bin\\java";
    
        permission com.sun.rmi.rmid.ExecPermission
            "c:\\files\\apps\\java\\jdk1. 2.2\\win\\bin\\java_g";
    
        permission com.sun.rmi.rmid.ExecPermission
            "c:\\files\\apps\\rmidcmds\\*";
    
        permission com.sun.rmi.rmid.ExecOptionPermission
            "-Djava.security.policy=c:\\files\\policies\\group.policy";
    
        permission com.sun.rmi.rmid.ExecOptionPermission
            "-Djava.security.debug=*";
    
        permission com.sun.rmi.rmid.ExecOptionPermission
            "-Dsun.rmi. *";
    };
    
    최초의 2 개의 부여되고 있는 액세스권은,rmid 에 대해, 경로명에 의해 명시적으로 지정되는 java 커멘드 및 java_g 커멘드의 1.2. 2 버젼의 실행을 허가합니다. 디폴트에서는,java.home 에 있는 버젼의 java 커멘드 (rmid 가 사용하는 것과 같은 버젼)가 사용되기 (위해)때문에, 그 커멘드는, 정책 파일로 지정할 필요는 없습니다. 3 번째의 액세스권은,rmid 에 대해서, 디렉토리 c:\files\apps\rmidcmds\ 내의 임의의 커멘드의 실행을 허가하고 있습니다.

    4 번째의 액세스권 ExecOptionPermission 는,rmid 에 대해서, 시큐리티 정책 파일을 c:\files\policies\group.policy 로서 정의하고 있는 기동 그룹의 기동을 허가하고 있습니다. 5 번째의 액세스권은, 기동 그룹이 java.security.debug 프로퍼티을 사용하는 것을 허가하고 있습니다. 마지막 액세스권은, 기동 그룹이 sun.rmi 라고 하는 프로퍼티명의 계층내의 임의의 프로퍼티을 사용하는 것을 허가하고 있습니다.

    정책 파일을 지정해 rmid 를 기동하려면 ,rmid 의 커멘드행으로 java.security.policy 프로퍼티을 지정할 필요가 있습니다. 다음에 예를 나타냅니다.

    rmid -J-Djava.security.policy=rmid.policy
  • <policyClassName>

    디폴트의 동작으로는 충분한 유연성을 얻을 수 없는 경우, 관리자는,rmid 의 기동시에,checkExecCommand 메소드가 소속하는 클래스의 이름을 지정해, rmid 가 실행하는 커멘드를 체크할 수가 있습니다.

    policyClassName 에는, 인수 없음의 생성자 을 가져, 다음과 같은 checkExecCommand 메소드를 구현하고 있는 public 클래스를 지정합니다.

        public void checkExecCommand(ActivationGroupDesc desc,
                                     String[] command)
            throws SecurityException;
    
    기동 그룹을 개시하기 전에,rmid 는, 정책의 checkExecCommand 메소드를 호출합니다. 이 때, 기동 그룹의 기술자와 기동 그룹을 개시하기 위한 완전한 커멘드를 포함한 배열을 그 메소드에 건네줍니다. checkExecCommandSecurityException 를 throw 하면(자),rmid 는 그 기동 그룹을 개시하지 않고, 객체의 기동을 시행하고 있는 호출 측에는 ActivationException 가 throw 됩니다.

  • none

    sun.rmi.activation.execPolicy 프로퍼티의 값이 「none」의 경우,rmid 는, 기동 그룹을 개시하는 커멘드를 전혀 검증하지 않습니다.

-log dir
기동 시스템 demon가 데이타베이스 및 관련 정보를 기입하는데 사용하는 디렉토리의 이름을 지정합니다. 디폴트에서는,rmid 커멘드를 실행한 디렉토리에,log 라고 하는 로그 디렉토리가 작성됩니다.

-port port
rmid 의 레지스트리가 사용하는 포트를 지정합니다. 기동 시스템 demon는, 이 레지스트리 중(안)에서,java.rmi.activation.ActivationSystem 라는 이름으로ActivationSystem 를 바인드 합니다. 따라서, 로컬 머신상의 ActivationSystem 는, 다음과 같이 Naming.lookup 메소드를 호출하는 것에 의해 취득할 수 있습니다.
    import java.rmi. *; 
    import java.rmi.activation. *;

    ActivationSystem system; system = (ActivationSystem)
    Naming.lookup("//:port/java.rmi.activation.ActivationSystem");
-stop
-port 옵션에 의해 지정된 포트의, 현재의 rmid 호출을 정지합니다. 포트가 지정되어 있지 않은 경우는, 포트 1098 으로 실행되고 있는 rmid 를 정지합니다.

환경 변수

CLASSPATH
사용자 정의 클래스에의 패스를 시스템으로 지정합니다. 디렉토리는, UNIX 와 Macintosh 에서는 구두점으로 단락지어, Windows 95 에서는 세미콜론으로 단락짓습니다. 예를 나타냅니다.
    . ;C:\usr\local\java\classes

관련 항목

rmic ,CLASSPATH ,java

Copyright © 2003-2006 Sun Microsystems, Inc. All Rights Reserved.

Sun
Java Software