Aug 6, 2002 onlsbc1, Red Hat Linux 7.3 のシステムでのJavaRMIの実行 --- hello world実行#2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (http://www-online.kek.jp/~inoue/para-CAMAC/ Test/SBC-Hello-JavaRMI.html) 高エネルギー加速器研究機構 素粒子原子核研究所 物理、オンライングループ 井上 栄二 (1). 現状確認 (A). SBC、onlsbc1にjava version "1.4.0_01-b03" がインストールされて いる。 (2). ここでやるべきこと Red Hat Linux 7.3、onlsbc1のマシン上でJavaRMIでのhello worldを実行する。 (3). コンパイル (3-1). Javaのチェック [inoue@onlsbc1 inoue]$ java -version java version "1.4.0_01" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0_01-b03) Java HotSpot(TM) Client VM (build 1.4.0_01-b03, mixed mode) [inoue@onlsbc1 inoue]$ (3-2). 実行環境 [inoue@onlsbc1 inoue]$ env PWD=/home/inoue HOSTNAME=onlsbc1.kek.jp QTDIR=/usr/lib/qt3-gcc2.96 LESSOPEN=|/usr/bin/lesspipe.sh %s USER=inoue LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35: MAIL=/var/spool/mail/inoue INPUTRC=/etc/inputrc LANG=ja_JP.eucJP SSH_CLIENT=130.87.153.10 32955 22 LOGNAME=inoue SHLVL=1 SHELL=/bin/bash HISTSIZE=1000 HOME=/home/inoue TERM=dtterm SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/inoue/bin:/usr/java/bin JLESSCHARSET=japanese SSH_TTY=/dev/pts/2 _=/usr/bin/env OLDPWD=/home/inoue/PI [inoue@onlsbc1 inoue]$ (3-3). サーバ側の準備 この実行で使用するソースコードは、以下のURLから入手した。 http://java.sun.com/j2se/1.4/ja/docs/ja/guide/rmi/archives/getStart.zip パッケージ名は examples.hello、ソースディレクトリは ~/JavaRMI/getStart/examples/hello である。 [inoue@onlsbc1 hello]$ pwd /home/inoue/JavaRMI/getStart/examples/hello [inoue@onlsbc1 hello]$ ls -l 合計 20 -rw-r--r-- 1 inoue inoue 175 7月 30 14:06 Hello.java -rw-r--r-- 1 inoue inoue 751 7月 30 14:06 HelloApplet.java -rw-r--r-- 1 inoue inoue 956 7月 30 14:06 HelloImpl.java -rw-r--r-- 1 inoue inoue 245 7月 30 14:06 hello.html -rw-r--r-- 1 inoue inoue 81 7月 30 14:06 policy [inoue@onlsbc1 hello]$ *.java ソースファイルをコンパイルして、.class ファイルを作成する。 次に rmic コンパイラを実行してスタブとスケルトンを作成する。 javac や rmic コンパイラを使うときは、生成されるクラスファイルをどの ディレクトリに置くかを指定しなければならない。 アプレットの場合には、 すべてのファイルをアプレットのコードベースディレクトリに置く必要がある。 この例では、コードベースディレクトリは、 onlsbc1:$HOME/public_html/myclasses になる。 (3-3-1). ランタイムパスを設定する [inoue@onlsbc1 inoue]$ export CLASSPATH=.:$HOME/public_html/myclasses:$HOME/JavaRMI/getStart/examples/hello [inoue@onlsbc1 inoue]$ printenv CLASSPATH .:/home/inoue/public_html/myclasses:/home/inoue/JavaRMI/getStart/examples/hello [inoue@onlsbc1 inoue]$ [inoue@onlsbc1 myclasses]$ pwd /home/inoue/public_html/myclasses [inoue@onlsbc1 myclasses]$ ls -l 合計 0 [inoue@onlsbc1 myclasses]$ (3-3-2). ソースファイルをコンパイルする [inoue@onlsbc1 hello]$ pwd /home/inoue/JavaRMI/getStart/examples/hello [inoue@onlsbc1 hello]$ ls -l 合計 20 -rw-r--r-- 1 inoue inoue 175 7月 30 14:06 Hello.java -rw-r--r-- 1 inoue inoue 751 7月 30 14:06 HelloApplet.java -rw-r--r-- 1 inoue inoue 956 7月 30 14:06 HelloImpl.java -rw-r--r-- 1 inoue inoue 245 7月 30 14:06 hello.html -rw-r--r-- 1 inoue inoue 81 7月 30 14:06 policy [inoue@onlsbc1 hello]$ [inoue@onlsbc1 hello]$ cat Hello.java package examples.hello; import java.rmi.Remote; import java.rmi.RemoteException; public interface Hello extends Remote { String sayHello() throws RemoteException; } [inoue@onlsbc1 hello]$ [inoue@onlsbc1 hello]$ 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); } } [inoue@onlsbc1 hello]$ [inoue@onlsbc1 hello]$ 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(); } } } [inoue@onlsbc1 hello]$ [inoue@onlsbc1 hello]$ 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> [inoue@onlsbc1 hello]$ [inoue@onlsbc1 hello]$ javac -d $HOME/public_html/myclasses Hello.java HelloImpl.java HelloApplet.java [inoue@onlsbc1 hello]$ [inoue@onlsbc1 hello]$ ls -lR $HOME/public_html/myclasses /home/inoue/public_html/myclasses: 合計 4 drwxrwxr-x 3 inoue inoue 4096 7月 30 16:07 examples /home/inoue/public_html/myclasses/examples: 合計 4 drwxrwxr-x 2 inoue inoue 4096 7月 30 16:07 hello /home/inoue/public_html/myclasses/examples/hello: 合計 12 -rw-rw-r-- 1 inoue inoue 224 7月 30 16:07 Hello.class -rw-rw-r-- 1 inoue inoue 1281 7月 30 16:07 HelloApplet.class -rw-rw-r-- 1 inoue inoue 1240 7月 30 16:07 HelloImpl.class [inoue@onlsbc1 hello]$ (3-3-3). rmic を使ってスタブまたはスケルトンを生成する [inoue@onlsbc1 hello]$ pwd /home/inoue/JavaRMI/getStart/examples/hello [inoue@onlsbc1 hello]$ ls -l 合計 20 -rw-r--r-- 1 inoue inoue 175 7月 30 14:06 Hello.java -rw-r--r-- 1 inoue inoue 751 7月 30 14:06 HelloApplet.java -rw-r--r-- 1 inoue inoue 956 7月 30 14:06 HelloImpl.java -rw-r--r-- 1 inoue inoue 245 7月 30 14:06 hello.html -rw-r--r-- 1 inoue inoue 81 7月 30 14:06 policy [inoue@onlsbc1 hello]$ [inoue@onlsbc1 hello]$ rmic -d $HOME/public_html/myclasses examples.hello.HelloImpl [inoue@onlsbc1 hello]$ [inoue@onlsbc1 hello]$ ls -lR $HOME/public_html/myclasses /home/inoue/public_html/myclasses: 合計 4 drwxrwxr-x 3 inoue inoue 4096 7月 30 16:07 examples /home/inoue/public_html/myclasses/examples: 合計 4 drwxrwxr-x 2 inoue inoue 4096 7月 30 16:11 hello /home/inoue/public_html/myclasses/examples/hello: 合計 20 -rw-rw-r-- 1 inoue inoue 224 7月 30 16:07 Hello.class -rw-rw-r-- 1 inoue inoue 1281 7月 30 16:07 HelloApplet.class -rw-rw-r-- 1 inoue inoue 1240 7月 30 16:07 HelloImpl.class -rw-rw-r-- 1 inoue inoue 1448 7月 30 16:11 HelloImpl_Skel.class -rw-rw-r-- 1 inoue inoue 2920 7月 30 16:11 HelloImpl_Stub.class [inoue@onlsbc1 hello]$ (3-3-4). HTML ファイルを配置ディレクトリに移す [inoue@onlsbc1 hello]$ pwd /home/inoue/JavaRMI/getStart/examples/hello [inoue@onlsbc1 hello]$ ls -l 合計 20 -rw-r--r-- 1 inoue inoue 175 7月 30 14:06 Hello.java -rw-r--r-- 1 inoue inoue 751 7月 30 14:06 HelloApplet.java -rw-r--r-- 1 inoue inoue 956 7月 30 14:06 HelloImpl.java -rw-r--r-- 1 inoue inoue 245 7月 30 14:06 hello.html -rw-r--r-- 1 inoue inoue 81 7月 30 14:06 policy [inoue@onlsbc1 hello]$ cp hello.html $HOME/public_html [inoue@onlsbc1 hello]$ ls -l $HOME/public_html/hello.html -rw-r--r-- 1 inoue inoue 245 7月 30 16:14 /home/inoue/public_html/hello.html [inoue@onlsbc1 hello]$ (4). RMI レジストリ、サーバ、およびアプレットを起動する (4-1). Apache Webサーバを使う場合 (4-1-1). Apache Webサーバの起動 Apache の設定を行う。 [root@onlsbc1 conf]# apacheconf [root@onlsbc1 conf]# Apache Webサーバを起動する。 [root@onlsbc1 conf]# /sbin/service httpd start httpdを起動中: [ OK ] [root@onlsbc1 conf]# Red Hat Linux 7.3 の標準では、ユーザのホームディレクトリのパーミッション は、ユーザのみが読み書きおよび実行可能になっている。 これでは、ユーザ ディレクトリ下の public_htmlディレクトリーに webブラウザでアクセスした 時にアクセス権がないと言われてしまう。 グループ、アザーズに読み出し、 実行のパーミッションを付ける。 [inoue@onlsbc1 home]$ pwd /home [inoue@onlsbc1 home]$ ls -l 合計 8 drwx------ 18 inoue inoue 4096 8月 5 13:34 inoue drwx------ 3 yasu yasu 4096 7月 24 01:46 yasu [inoue@onlsbc1 home]$ chmod go+rx inoue [inoue@onlsbc1 home]$ ls -l 合計 8 drwxr-xr-x 18 inoue inoue 4096 8月 5 13:34 inoue drwx------ 3 yasu yasu 4096 7月 24 01:46 yasu [inoue@onlsbc1 home]$ [inoue@onlsbc1 getStart]$ pwd /home/inoue/JavaRMI/getStart [inoue@onlsbc1 getStart]$ (4-1-2). rmiregistry の起動 rmiregistry を起動する。 [inoue@onlsbc1 getStart]$ rmiregistry & [1] 1778 [inoue@onlsbc1 getStart]$ [inoue@onlsbc1 getStart]$ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 10:12 ? 00:00:06 init root 2 1 0 10:12 ? 00:00:00 [keventd] root 3 1 0 10:12 ? 00:00:00 [kapmd] root 4 1 0 10:12 ? 00:00:00 [ksoftirqd_CPU0] root 5 1 0 10:12 ? 00:00:00 [kswapd] root 6 1 0 10:12 ? 00:00:00 [bdflush] root 7 1 0 10:12 ? 00:00:00 [kupdated] root 8 1 0 10:13 ? 00:00:00 [mdrecoveryd] root 12 1 0 10:13 ? 00:00:00 [kjournald] root 71 1 0 10:13 ? 00:00:00 [khubd] root 621 1 0 10:14 ? 00:00:00 syslogd -m 0 root 626 1 0 10:14 ? 00:00:00 klogd -x rpc 640 1 0 10:14 ? 00:00:00 portmap rpcuser 662 1 0 10:14 ? 00:00:00 rpc.statd root 749 1 0 10:14 ? 00:00:00 /usr/sbin/apmd -p 10 -w 5 -W -P root 791 1 0 10:14 ? 00:00:01 /usr/sbin/sshd root 812 1 0 10:14 ? 00:00:00 xinetd -stayalive -reuse -pidfil lp 832 1 0 10:14 ? 00:00:00 lpd Waiting root 858 1 0 10:14 ? 00:00:00 sendmail: accepting connections root 871 1 0 10:14 ? 00:00:01 gpm -t ps/2 -m /dev/mouse wnn 885 1 0 10:14 ? 00:00:00 /usr/bin/jserver bin 898 1 0 10:14 ? 00:00:00 cannaserver -syslog -u bin -inet root 910 1 0 10:14 ? 00:00:00 crond xfs 962 1 0 10:14 ? 00:00:01 xfs -droppriv -daemon daemon 986 1 0 10:14 ? 00:00:00 /usr/sbin/atd root 995 1 0 10:14 tty1 00:00:00 /sbin/mingetty tty1 root 996 1 0 10:14 tty2 00:00:00 /sbin/mingetty tty2 root 997 1 0 10:14 tty3 00:00:00 /sbin/mingetty tty3 root 998 1 0 10:14 tty4 00:00:00 /sbin/mingetty tty4 root 999 1 0 10:14 tty5 00:00:00 /sbin/mingetty tty5 root 1000 1 0 10:14 tty6 00:00:00 /sbin/mingetty tty6 root 1001 1 0 10:14 ? 00:00:00 /usr/bin/gdm -nodaemon root 1009 1001 0 10:14 ? 00:00:00 /usr/bin/gdm -nodaemon root 1010 1009 0 10:14 ? 00:00:06 /usr/bin/X11/X :0 -auth /var/gdm gdm 1017 1009 0 10:15 ? 00:00:03 /usr/bin/gdmlogin --disable-soun gdm 1018 1017 0 10:15 ? 00:00:01 /usr/bin/xsri --redhat-login --r root 1019 791 0 10:15 ? 00:00:03 /usr/sbin/sshd inoue 1020 1019 0 10:15 pts/0 00:00:00 -bash root 1222 791 0 10:53 ? 00:00:00 /usr/sbin/sshd inoue 1223 1222 0 10:53 pts/1 00:00:00 -bash root 1735 1 0 13:10 ? 00:00:02 /usr/sbin/httpd -DHAVE_ACCESS -D apache 1738 1735 0 13:10 ? 00:00:00 /usr/sbin/httpd -DHAVE_ACCESS -D apache 1739 1735 0 13:10 ? 00:00:00 /usr/sbin/httpd -DHAVE_ACCESS -D apache 1740 1735 0 13:10 ? 00:00:00 /usr/sbin/httpd -DHAVE_ACCESS -D apache 1741 1735 0 13:10 ? 00:00:00 /usr/sbin/httpd -DHAVE_ACCESS -D apache 1742 1735 0 13:10 ? 00:00:00 /usr/sbin/httpd -DHAVE_ACCESS -D apache 1743 1735 0 13:10 ? 00:00:00 /usr/sbin/httpd -DHAVE_ACCESS -D apache 1744 1735 0 13:10 ? 00:00:00 /usr/sbin/httpd -DHAVE_ACCESS -D apache 1745 1735 0 13:10 ? 00:00:00 /usr/sbin/httpd -DHAVE_ACCESS -D inoue 1778 1020 46 13:25 pts/0 00:00:06 rmiregistry inoue 1780 1778 0 13:25 pts/0 00:00:00 rmiregistry inoue 1781 1780 3 13:25 pts/0 00:00:00 rmiregistry inoue 1782 1780 0 13:25 pts/0 00:00:00 rmiregistry inoue 1783 1780 0 13:25 pts/0 00:00:00 rmiregistry inoue 1784 1780 0 13:25 pts/0 00:00:00 rmiregistry inoue 1785 1780 0 13:25 pts/0 00:00:00 rmiregistry inoue 1786 1780 0 13:25 pts/0 00:00:00 rmiregistry inoue 1787 1780 52 13:25 pts/0 00:00:03 rmiregistry inoue 1789 1780 0 13:25 pts/0 00:00:00 rmiregistry inoue 1790 1780 2 13:25 pts/0 00:00:00 rmiregistry inoue 1791 1020 0 13:25 pts/0 00:00:00 ps -ef [inoue@onlsbc1 getStart]$ (4-1-3). サーバ の起動 サーバを起動する [inoue@onlsbc1 getStart]$ java -Djava.rmi.server.codebase=http://onlsbc1.kek.jp/~inoue/myclasses/ -Djava.security.policy=$HOME/JavaRMI/getStart/examples/hello/policy examples.hello.HelloImpl HelloServer bound in registry (4-1-4). サーバへのアクセス webブラウザ、IEを使ってサーバにアクセスした結果 Webブラウザ、IEで "http://onlsbc1.kek.jp/~inoue/hello.html" に アクセスすると、"Hello World!"と表示される。 appletviewerを使ってサーバにアクセスした結果 [inoue@onlsbc1 public_html]$ export DISPLAY=onlsun2:0 [inoue@onlsbc1 public_html]$ which appletviewer /usr/java/bin/appletviewer [inoue@onlsbc1 public_html]$ appletviewer http://onlsbc1.kek.jp/~inoue/hello.htm l 警告: AppletViewer プロパティファイルが読み込まれません: /home/inoue/.hotjava/pr operties デフォルトを使用します。 Warning: Cannot convert string "-watanabe-mincho-medium-r-normal--*-140-*-*-c-*- jisx0208.1983-0" to type FontStruct 2002/08/05 13:34:05 java.util.prefs.FileSystemPreferences$4 run 警告: Recreated user preferences directory. [inoue@onlsbc1 public_html]$ appletviewerで "http://onlsbc1.kek.jp/~inoue/hello.html" に アクセスすると、"Hello World!" と表示される。