May 8, 2002

          onlax2, Digital UNIX V5.0 (Rev. 910) システムでのJavaRMIの実行
                         ---  hello world実行#1
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  (http://www-online.kek.jp/~inoue/para-CAMAC/
                                   Test/Hello-JavaRMI.html)



                        高エネルギー加速器研究機構
                            素粒子原子核研究所
                         物理、オンライングループ
                                井上 栄二

 (1).   現状確認

        (A). Webサーバ、onlax2にjava version "1.1.7B-6" がインストール
             されている。


 (2).   ここでやるべきこと
	
	Digital UNIX V5.0 (Rev. 910)、onlax2のマシン上でJavaRMIでのhello world
	 を実行する。


 (3).   コンパイル

   (3-1).  Javaのチェック


onlax2.kek.jp[96]% java -version
java version "1.1.7B-6"
onlax2.kek.jp[97]%


   (3-2).  実行環境

onlax2.kek.jp[97]% env
TERM=vt100
HOME=/people/inoue
SHELL=/bin/csh
USER=inoue
LOGNAME=inoue
PATH=.:/people/inoue/bin:/usr/jsy/bin:/usr/ucb:/bin:/usr/bin:/usr/local/X11/bin:
/kek/bin:/people/inoue/onlsun1/bin:/usr/local/bin:/usr/bin/X11:/usr/new:/usr/loc
al/bin/mh:/usr/sbin:/usr/jsy/new/emacs:/usr/hosts:/kek/local/bin
SHLVL=1
I18NPATH=/usr/i18n
LANG=ja_JP
MANPATH=/usr/local/majordomo-1.94.4/man
MAIL=/usr/spool/mail/inoue
EXINIT=set redraw wm=8
PRINTER=ps
KCODE=EUC
WWW_HOME=http://www.kek.jp
NNTPSERVER=keknews.kek.jp
DOMAINNAME=kek.jp
JSERVER=localhost
CLASSPATH=/people/inoue/public_html/myclasses
onlax2.kek.jp[98]%


   (3-3).  サーバ側の準備

	この実行で使用するソースコードは、以下のURLから入手した。
       http://java.sun.com/j2se/1.4/ja/docs/ja/guide/rmi/archives/getStart.zip
	パッケージ名は examples.hello、ソースディレクトリは
	~/JavaRMI/getStart/examples/hello である。

onlax2.kek.jp[98]% pwd
/people/inoue/JavaRMI/getStart/examples/hello
onlax2.kek.jp[99]% ls -l
ディスク上の専有領域の合計 5 (KBytes)
-rw-r--r--   1 inoue    kek          175 06月05日 1998  Hello.java
-rw-r--r--   1 inoue    kek          751 06月05日 1998  HelloApplet.java
-rw-r--r--   1 inoue    kek          956 06月05日 1998  HelloImpl.java
-rw-r--r--   1 inoue    kek          245 10月01日 1998  hello.html
-rw-r--r--   1 inoue    kek           81 10月01日 1998  policy
onlax2.kek.jp[100]%

	*.java ソースファイルをコンパイルして、.class ファイルを作成する。 次に
	rmic コンパイラを実行してスタブとスケルトンを作成する。

	javac や rmic コンパイラを使うときは、生成されるクラスファイルをどの
	ディレクトリに置くかを指定しなければならない。 アプレットの場合には、
	すべてのファイルをアプレットのコードベースディレクトリに置く必要がある。
	この例では、コードベースディレクトリはonlax2:$HOME/public_html/myclasses
	になる。


     (3-3-1).  ランタイムパスを設定する

onlax2.kek.jp[105]% setenv CLASSPATH .:$HOME/public_html/myclasses:$HOME/JavaRMI
/getStart/examples/hello
onlax2.kek.jp[106]% printenv CLASSPATH
.:/people/inoue/public_html/myclasses:/people/inoue/JavaRMI/getStart/examples/he
llo
onlax2.kek.jp[107]%

onlax2.kek.jp[125]% pwd
/people/inoue/public_html/myclasses
onlax2.kek.jp[126]% ls -l
ディスク上の専有領域の合計 0 (KBytes)
onlax2.kek.jp[127]%


     (3-3-2).  ソースファイルをコンパイルする

onlax2.kek.jp[130]% pwd
/people/inoue/JavaRMI/getStart/examples/hello
onlax2.kek.jp[131]% ls -l
ディスク上の専有領域の合計 5 (KBytes)
-rw-r--r--   1 inoue    kek          175 06月05日 1998  Hello.java
-rw-r--r--   1 inoue    kek          751 06月05日 1998  HelloApplet.java
-rw-r--r--   1 inoue    kek          956 06月05日 1998  HelloImpl.java
-rw-r--r--   1 inoue    kek          245 10月01日 1998  hello.html
-rw-r--r--   1 inoue    kek           81 10月01日 1998  policy
onlax2.kek.jp[132]%
onlax2.kek.jp[132]% cat Hello.java
package examples.hello;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Hello extends Remote {
    String sayHello() throws RemoteException;
}
onlax2.kek.jp[133]%
onlax2.kek.jp[133]% cat HelloApplet.java
package examples.hello;

import java.applet.Applet;
import java.awt.Graphics;
import java.rmi.Naming;
import java.rmi.RemoteException;

public class HelloApplet extends Applet {

    String message = "blank";

    // "obj" is the identifier that we'll use to refer
    // to the remote object that implements the "Hello"
    // interface
    Hello obj = null;

    public void init() {
        try {
            obj = (Hello)Naming.lookup("//" +
                         getCodeBase().getHost() + "/HelloServer");
            message = obj.sayHello();
        } catch (Exception e) {
            System.out.println("HelloApplet exception: " +
                                    e.getMessage());
            e.printStackTrace();
        }
    }

    public void paint(Graphics g) {
        g.drawString(message, 25, 50);
    }
}
onlax2.kek.jp[134]%
onlax2.kek.jp[134]% cat HelloImpl.java
package examples.hello;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
import java.rmi.server.UnicastRemoteObject;

public class HelloImpl extends UnicastRemoteObject
    implements Hello {

    public HelloImpl() throws RemoteException {
        super();
    }

    public String sayHello() {
        return  "Hello World!";
    }

    public static void main(String args[]) {

        // Create and install a security manager
        if (System.getSecurityManager() == null) {
            System.setSecurityManager(new RMISecurityManager());
        }
        try {
            HelloImpl obj = new HelloImpl();
            // Bind this object instance to the name "HelloServer"
            Naming.rebind("HelloServer", obj);
            System.out.println("HelloServer bound in registry");
        } catch (Exception e) {
            System.out.println("HelloImpl err: " + e.getMessage());
            e.printStackTrace();
        }
    }
}
onlax2.kek.jp[135]%
onlax2.kek.jp[135]% cat hello.html

<HTML>
<title>Hello World</title>
<center> <h1>Hello World</h1> </center>

The message from the HelloServer is:
<p>
<applet codebase="myclasses/"
        code="examples.hello.HelloApplet"
        width=500 height=120>
</applet>
</HTML>
onlax2.kek.jp[136]%
onlax2.kek.jp[136]% cat policy
grant {
        // Allow everything for now
        permission java.security.AllPermission;
};
onlax2.kek.jp[137]%

onlax2.kek.jp[137]% javac -d $HOME/public_html/myclasses Hello.java HelloImpl.ja
va HelloApplet.java
onlax2.kek.jp[138]%

onlax2.kek.jp[138]% ls -lR $HOME/public_html/myclasses
ディスク上の専有領域の合計 1 (KBytes)
drwxr-x--x   3 inoue    kek          512 05月08日 14:12 examples/

/people/inoue/public_html/myclasses/examples:
ディスク上の専有領域の合計 1 (KBytes)
drwxr-x--x   2 inoue    kek          512 05月08日 14:12 hello/

/people/inoue/public_html/myclasses/examples/hello:
ディスク上の専有領域の合計 5 (KBytes)
-rw-r--r--   1 inoue    kek          282 05月08日 14:12 Hello.class
-rw-r--r--   1 inoue    kek         1364 05月08日 14:12 HelloApplet.class
-rw-r--r--   1 inoue    kek         1306 05月08日 14:12 HelloImpl.class
onlax2.kek.jp[139]%


     (3-3-3).  rmic を使ってスタブまたはスケルトンを生成する

onlax2.kek.jp[139]% pwd
/people/inoue/JavaRMI/getStart/examples/hello
onlax2.kek.jp[140]% ls -l
ディスク上の専有領域の合計 5 (KBytes)
-rw-r--r--   1 inoue    kek          175 06月05日 1998  Hello.java
-rw-r--r--   1 inoue    kek          751 06月05日 1998  HelloApplet.java
-rw-r--r--   1 inoue    kek          956 06月05日 1998  HelloImpl.java
-rw-r--r--   1 inoue    kek          245 10月01日 1998  hello.html
-rw-r--r--   1 inoue    kek           81 10月01日 1998  policy
onlax2.kek.jp[141]% rmic -d $HOME/public_html/myclasses examples.hello.HelloImpl

onlax2.kek.jp[142]%

onlax2.kek.jp[142]% ls -lR $HOME/public_html/myclasses
ディスク上の専有領域の合計 1 (KBytes)
drwxr-x--x   3 inoue    kek          512 05月08日 14:12 examples/

/people/inoue/public_html/myclasses/examples:
ディスク上の専有領域の合計 1 (KBytes)
drwxr-x--x   2 inoue    kek          512 05月08日 14:18 hello/

/people/inoue/public_html/myclasses/examples/hello:
ディスク上の専有領域の合計 9 (KBytes)
-rw-r--r--   1 inoue    kek          282 05月08日 14:12 Hello.class
-rw-r--r--   1 inoue    kek         1364 05月08日 14:12 HelloApplet.class
-rw-r--r--   1 inoue    kek         1306 05月08日 14:12 HelloImpl.class
-rw-r--r--   1 inoue    kek         1569 05月08日 14:18 HelloImpl_Skel.class
-rw-r--r--   1 inoue    kek         1854 05月08日 14:18 HelloImpl_Stub.class
onlax2.kek.jp[143]%


     (3-3-4).  HTML ファイルを配置ディレクトリに移す

onlax2.kek.jp[144]% pwd
/people/inoue/JavaRMI/getStart/examples/hello
onlax2.kek.jp[145]% ls -l
ディスク上の専有領域の合計 5 (KBytes)
-rw-r--r--   1 inoue    kek          175 06月05日 1998  Hello.java
-rw-r--r--   1 inoue    kek          751 06月05日 1998  HelloApplet.java
-rw-r--r--   1 inoue    kek          956 06月05日 1998  HelloImpl.java
-rw-r--r--   1 inoue    kek          245 10月01日 1998  hello.html
-rw-r--r--   1 inoue    kek           81 10月01日 1998  policy
onlax2.kek.jp[146]% cp hello.html $HOME/public_html
onlax2.kek.jp[147]% ls -l $HOME/public_html/hello.html
-rw-r--r--   1 inoue    kek          245 05月08日 14:22 /people/inoue/public_htm
l/hello.html
onlax2.kek.jp[148]%


 (4).   RMI レジストリ、サーバ、およびアプレットを起動する

   (4-1).  RMI レジストリを起動する

	RMI レジストリは、単純なサーバ側のネームサーバで、これによりリモート
	クライアントは、リモートオブジェクトへの参照を取得できる。

onlax2.kek.jp[156]% ps
   PID TTY      S           TIME CMD
222558 pts/5    I  +     0:00.83 -csh (csh)
217202 pts/11   S        0:01.98 -csh (csh)
223862 pts/12   I  +     0:00.90 -csh (csh)
 52373 pts/14   I  +     0:00.57 -sh (csh)
onlax2.kek.jp[157]% rmiregistry &
[1] 224727
onlax2.kek.jp[158]%

   (4-2).  サーバを起動する

onlax2.kek.jp[159]% java -Djava.rmi.server.codebase=http://onlax2.kek.jp/~inoue/
myclasses/ -Djava.security.policy=$HOME/JavaRMI/getStart/examples/hello/policy e
xamples.hello.HelloImpl
HelloServer bound in registry


   (4-3).  アプレットを実行する

        この状態でWebブラウザで "http://onlax2.kek.jp/~inoue/hello.html" に
        アクセスすると、"Hello World!"
	と表示される。


   (4-4).  サーバ側プロセスの停止

onlax2.kek.jp[159]% java -Djava.rmi.server.codebase=http://onlax2.kek.jp/~inoue/
myclasses/ -Djava.security.policy=$HOME/JavaRMI/getStart/examples/hello/policy e
xamples.hello.HelloImpl
HelloServer bound in registry

onlax2.kek.jp[160]% ps
   PID TTY      S           TIME CMD
222558 pts/5    I  +     0:00.83 -csh (csh)
217202 pts/11   S        0:02.03 -csh (csh)
224727 pts/11   I        0:00.15 /usr/ucb/../bin/alpha/native_threads/rmiregist
224868 pts/11   S        0:05.90 /usr/ucb/../bin/alpha/native_threads/java sun/
223862 pts/12   I  +     0:00.97 -csh (csh)
 52373 pts/14   I  +     0:00.57 -sh (csh)
onlax2.kek.jp[161]% kill -KILL 224868
onlax2.kek.jp[162]% /usr/ucb/../bin/alpha/native_threads/rmiregistry: 224868 Kil
led

[1]    終了コード -119            rmiregistry

onlax2.kek.jp[162]% ps
   PID TTY      S           TIME CMD
222558 pts/5    I  +     0:00.83 -csh (csh)
217202 pts/11   S        0:02.04 -csh (csh)
223862 pts/12   I  +     0:00.97 -csh (csh)
 52373 pts/14   I  +     0:00.57 -sh (csh)
onlax2.kek.jp[163]%


---xxxx