May 13, 2002 onlsun1, Solaris8システムでのJavaIDLの実行 --- hello world実行#1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (http://www-online.kek.jp/~inoue/para-CAMAC/ Test/Hello-JavaIDL.html) 高エネルギー加速器研究機構 素粒子原子核研究所 物理、オンライングループ 井上 栄二 (1). 現状確認 (A). S-4/20、onlsun1にjava 1.4.0 がインストールされている。 (2). ここでやるべきこと Solaris8、onlsun1のマシン上でJavaIDLでのhello world を実行する。 (3). コンパイル (3-1). Javaのチェック サーバ側 onlsun1[4]% java -version java version "1.4.0" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92) Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode) onlsun1[5]% クライアント側 onlsun3[33]% java -version java version "1.4.0" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92) Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode) onlsun3[34]% サーバ側の実行環境 onlsun1[5]% env HOME=/export/home/onlsun1/inoue PATH=/opt/NSCPnav/bin:/usr/java1.4.0/j2sdk1.4.0/bin:/usr/java1.4.0/j2sdk1.4.0/jr e/bin:/export/home/onlsun1/inoue/HORB/horb21b2/bin:/home2/opt/gimp/bin:/export/h ome/onlsun1/inoue/FastEther/X1059A/TTCP/ttcp:/opt/Acrobat4/bin:/opt/sfw/bin:/usr /local/bin:/home3/opt_ext/LBLxfig/bin:/net/fs/public/solaris_licensed/forte6/spa rc/SUNWspro/bin:/kek/compilers/ws5.0/SUNWspro/bin:/kek/compilers/volume5/SUNWspr o/bin:/kek/compilers/volume4/SUNWspro/bin:/kek/SUNWspro/bin:/usr/sbin:/usr/ccs/b in:/export/home/onlsun1/inoue/bin:/home3/NSUG93/X11R5/bin:/usr/dt/bin:/bin:/usr/ bin:/usr/ucb:/etc:.:/usr/openwin/bin:/kek/local/bin:/kek/cern/97a/bin:/home1/cer n/95a/bin LOGNAME=inoue HZ=100 TERM=vt100 TZ=Japan SHELL=/bin/csh MAIL=/var/mail/inoue LANG=ja _INIT_NET_STRATEGY=none _INIT_PREV_LEVEL=S _INIT_RUN_LEVEL=3 _INIT_RUN_NPREV=0 _INIT_UTS_ISA=sparc _INIT_UTS_MACHINE=sun4m _INIT_UTS_NODENAME=onlsun1 _INIT_UTS_PLATFORM=SUNW,SPARCstation-20 _INIT_UTS_RELEASE=5.8 _INIT_UTS_SYSNAME=SunOS _INIT_UTS_VERSION=Generic_108528-01 PWD=/export/home/onlsun1/inoue/Java-IDL1.4 USER=inoue LD_LIBRARY_PATH=/usr/java1.4.0/j2sdk1.4.0/jre/lib/sparc:/usr/java1.4.0/j2sdk1.4. 0/jre/lib:/usr/java1.4.0/j2sdk1.4.0/lib:/net/fs/public/solaris_licensed/forte6/s parc/SUNWspro/lib:/kek/compilers/ws5.0/SUNWspro/lib:/kek/compilers/volume5/SUNWs pro/lib:/kek/compilers/volume4/SUNWspro/lib:/kek/SUNWspro/lib:/opt/sfw/lib:/home 3/NSUG93/X11R5/lib LD_RUN_PATH=/usr/java1.4.0/j2sdk1.4.0/jre/lib/sparc:/usr/java1.4.0/j2sdk1.4.0/jr e/lib:/usr/java1.4.0/j2sdk1.4.0/lib:/net/fs/public/solaris_licensed/forte6/sparc /SUNWspro/lib:/kek/compilers/ws5.0/SUNWspro/lib:/opt/gtk/lib:/home2/opt/gimp/lib :/opt/sfw/lib:/home3/NSUG93/X11R5/lib:/usr/X11R6.1/lib:/usr/local/lib MANPATH=/net/fs/public/solaris_licensed/forte6/sparc/SUNWspro/man:/kek/compilers /ws5.0/SUNWspro/man/:/kek/compilers/volume5/SUNWspro/man:/usr/openwin/man:/usr/m an:/usr/dt/man:/usr/local/man:/kek/compilers/volume4/SUNWspro/man:/kek/SUNWspro/ man:/opt/sfw/man NNTPSERVER=keknews LESS=-c -h0 onlsun1[6]% (3-2). 1台のマシンでの実行: ソースファイルのコンパイル (3-2-1). ソースプログラムのコンパイル onlsun1[15]% cd *IDL1.4 /export/home/onlsun1/inoue/Java-IDL1.4 onlsun1[16]% ls Hello.idl HelloClient.java HelloServer.java Windows/ onlsun1[17]% ls -l 合計 14 -rw-r--r-- 1 inoue kek 109 4月 11日 17:14 Hello.idl -rw-r--r-- 1 inoue kek 1129 4月 11日 17:14 HelloClient.java -rw-r--r-- 1 inoue kek 2129 4月 11日 17:14 HelloServer.java drwxr-xr-x 4 inoue kek 512 4月 11日 17:13 Windows/ onlsun1[18]% インターフェース定義 onlsun1[18]% cat Hello.idl module HelloApp { interface Hello { string sayHello(); oneway void shutdown(); }; }; onlsun1[19]% サーバの実装 onlsun1[19]% cat HelloServer.java // HelloServer.java // Copyright and License import HelloApp.*; import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*; import org.omg.CORBA.*; import org.omg.PortableServer.*; import org.omg.PortableServer.POA; import java.util.Properties; class HelloImpl extends HelloPOA { private ORB orb; public void setORB(ORB orb_val) { orb = orb_val; } // implement sayHello() method public String sayHello() { return "\nHello world !!\n"; } // implement shutdown() method public void shutdown() { orb.shutdown(false); } } public class HelloServer { public static void main(String args[]) { try{ // create and initialize the ORB ORB orb = ORB.init(args, null); // get reference to rootpoa & activate the POAManager POA rootpoa = (POA)orb.resolve_initial_references("RootPOA"); rootpoa.the_POAManager().activate(); // create servant and register it with the ORB HelloImpl helloImpl = new HelloImpl(); helloImpl.setORB(orb); // get object reference from the servant org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl); Hello href = HelloHelper.narrow(ref); // get the root naming context // NameService invokes the transient name service org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); // Use NamingContextExt which is part of the Interoperable // Naming Service (INS) specification. NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef); // bind the Object Reference in Naming String name = "Hello"; NameComponent path[] = ncRef.to_name( name ); ncRef.rebind(path, href); System.out.println("HelloServer ready and waiting ..."); // wait for invocations from clients orb.run(); } catch (Exception e) { System.err.println("ERROR: " + e); e.printStackTrace(System.out); } System.out.println("HelloServer Exiting ..."); } } onlsun1[20]% クライアントの実装 onlsun1[20]% cat HelloClient.java // Copyright and License import HelloApp.*; import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*; import org.omg.CORBA.*; public class HelloClient { static Hello helloImpl; public static void main(String args[]) { try{ // create and initialize the ORB ORB orb = ORB.init(args, null); // get the root naming context org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); // Use NamingContextExt instead of NamingContext. This is // part of the Interoperable naming Service. NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef); // resolve the Object Reference in Naming String name = "Hello"; helloImpl = HelloHelper.narrow(ncRef.resolve_str(name)); System.out.println("Obtained a handle on server object: " + helloImpl); System.out.println(helloImpl.sayHello()); helloImpl.shutdown(); } catch (Exception e) { System.out.println("ERROR : " + e) ; e.printStackTrace(System.out); } } } onlsun1[21]% idlj を使ってスタブとスケルトンを作成 onlsun1[21]% idlj -fall Hello.idl onlsun1[22]% ls -l 合計 16 -rw-r--r-- 1 inoue kek 109 4月 11日 17:14 Hello.idl drwxr-xr-x 2 inoue kek 512 4月 15日 13:46 HelloApp/ -rw-r--r-- 1 inoue kek 1129 4月 11日 17:14 HelloClient.java -rw-r--r-- 1 inoue kek 2129 4月 11日 17:14 HelloServer.java drwxr-xr-x 4 inoue kek 512 4月 11日 17:13 Windows/ onlsun1[23]% HelloAppディレクトリにあるスタブとスケルトンも含めて、*.java ファイル をコンパイルする。 onlsun1[23]% javac *.java HelloApp/*.java onlsun1[24]% ls -l 合計 26 -rw-r--r-- 1 inoue kek 109 4月 11日 17:14 Hello.idl drwxr-xr-x 2 inoue kek 512 4月 15日 13:48 HelloApp/ -rw-r--r-- 1 inoue kek 1506 4月 15日 13:49 HelloClient.class -rw-r--r-- 1 inoue kek 1129 4月 11日 17:14 HelloClient.java -rw-r--r-- 1 inoue kek 522 4月 15日 13:48 HelloImpl.class -rw-r--r-- 1 inoue kek 1974 4月 15日 13:48 HelloServer.class -rw-r--r-- 1 inoue kek 2129 4月 11日 17:14 HelloServer.java drwxr-xr-x 4 inoue kek 512 4月 11日 17:13 Windows/ onlsun1[25]% onlsun1[25]% ls -l HelloApp 合計 44 -rw-r--r-- 1 inoue kek 200 4月 15日 13:49 Hello.class -rw-r--r-- 1 inoue kek 294 4月 15日 13:46 Hello.java -rw-r--r-- 1 inoue kek 2700 4月 15日 13:49 HelloHelper.class -rw-r--r-- 1 inoue kek 1811 4月 15日 13:46 HelloHelper.java -rw-r--r-- 1 inoue kek 868 4月 15日 13:49 HelloHolder.class -rw-r--r-- 1 inoue kek 725 4月 15日 13:46 HelloHolder.java -rw-r--r-- 1 inoue kek 187 4月 15日 13:49 HelloOperations.class -rw-r--r-- 1 inoue kek 286 4月 15日 13:46 HelloOperations.java -rw-r--r-- 1 inoue kek 2148 4月 15日 13:49 HelloPOA.class -rw-r--r-- 1 inoue kek 2041 4月 15日 13:46 HelloPOA.java -rw-r--r-- 1 inoue kek 2386 4月 15日 13:49 _HelloStub.class -rw-r--r-- 1 inoue kek 2294 4月 15日 13:46 _HelloStub.java onlsun1[26]% (3-2-2). サーバ側の実行 orbd を起動する。 onlsun1[27]% orbd -ORBInitialPort 1050 -ORBInitialHost localhost& [1] 618 onlsun1[28]% ls -l 合計 28 -rw-r--r-- 1 inoue kek 109 4月 11日 17:14 Hello.idl drwxr-xr-x 2 inoue kek 512 4月 15日 13:48 HelloApp/ -rw-r--r-- 1 inoue kek 1506 4月 15日 13:49 HelloClient.class -rw-r--r-- 1 inoue kek 1129 4月 11日 17:14 HelloClient.java -rw-r--r-- 1 inoue kek 522 4月 15日 13:48 HelloImpl.class -rw-r--r-- 1 inoue kek 1974 4月 15日 13:48 HelloServer.class -rw-r--r-- 1 inoue kek 2129 4月 11日 17:14 HelloServer.java drwxr-xr-x 4 inoue kek 512 4月 11日 17:13 Windows/ drwxr-xr-x 3 inoue kek 512 4月 15日 13:50 orb.db/ onlsun1[29]% Helloサーバを起動する。 onlsun1[29]% java HelloServer -ORBInitialPort 1050 -ORBInitialHost localhost& [2] 620 onlsun1[30]% HelloServer ready and waiting ... HelloServer Exiting ... [2] Done java HelloServer -ORBInitialPort 1050 -ORBInitialHos t localhost onlsun1[30]% クライアント側の実行が正常終了したら、orbd および Helloサーバを停止 する。 onlsun1[30]% ps PID TTY TIME CMD 591 pts/7 0:01 csh 618 pts/7 0:09 orbd onlsun1[31]% kill -KILL 618 onlsun1[32]% ps PID TTY TIME CMD 591 pts/7 0:01 csh [1] + 強制終了 orbd -ORBInitialPort 1050 -ORBInitialHost localhost onlsun1[33]% (3-2-3). クライアント側の実行 クライアントアプリケーションのチェック onlsun1[1]% cd *1.4 /export/home/onlsun1/inoue/Java-IDL1.4 onlsun1[2]% ls Hello.idl HelloClient.java HelloServer.java HelloApp/ HelloImpl.class Windows/ HelloClient.class HelloServer.class orb.db/ onlsun1[3]% ls -l 合計 28 -rw-r--r-- 1 inoue kek 109 4月 11日 17:14 Hello.idl drwxr-xr-x 2 inoue kek 512 4月 15日 13:48 HelloApp/ -rw-r--r-- 1 inoue kek 1506 4月 15日 13:49 HelloClient.class -rw-r--r-- 1 inoue kek 1129 4月 11日 17:14 HelloClient.java -rw-r--r-- 1 inoue kek 522 4月 15日 13:48 HelloImpl.class -rw-r--r-- 1 inoue kek 1974 4月 15日 13:48 HelloServer.class -rw-r--r-- 1 inoue kek 2129 4月 11日 17:14 HelloServer.java drwxr-xr-x 4 inoue kek 512 4月 11日 17:13 Windows/ drwxr-xr-x 3 inoue kek 512 4月 15日 13:50 orb.db/ onlsun1[4]% クライアントアプリケーションの実行 onlsun1[4]% java HelloClient -ORBInitialPort 1050 -ORBInitialHost localhost Obtained a handle on server object: HelloApp._HelloStub:IOR:00000000000000174944 4c3a48656c6c6f4170702f48656c6c6f3a312e30000000000001000000000000006c000102000000 000e3133302e38372e3135332e313000805100000021afabcb000000002037f7c013000000010000 00000000000000000004000000000a00000000000001000000010000002000000000000100010000 00020501000100010020000101090000000100010100 Hello world !! onlsun1[5]% ok. 1台のマシンによる、Java-IDL: Hello World は正常に実行できた。 (3-3). 2台のマシンでの実行: ソースファイルのコンパイルおよび実行 (3-3-1). サーバ側の実行 orbd を起動する。 onlsun1[39]% orbd -ORBInitialPort 1050 -ORBInitialHost onlsun1& [1] 718 onlsun1[40]% Helloサーバを起動する。 onlsun1[40]% java HelloServer -ORBInitialPort 1050 -ORBInitialHost onlsun1& [2] 719 onlsun1[41]% HelloServer ready and waiting ... HelloServer Exiting ... [2] Done java HelloServer -ORBInitialPort 1050 -ORBInitialHos t onlsun1 onlsun1[41]% クライアント側の実行が正常終了したら、orbd および Helloサーバを停止 する。 onlsun1[41]% ps PID TTY TIME CMD 591 pts/7 0:01 csh 718 pts/7 0:10 orbd onlsun1[42]% kill 718 onlsun1[43]% ps PID TTY TIME CMD 591 pts/7 0:01 csh [1] + 終了 143 orbd -ORBInitialPort 1050 -ORBInitialHost onlsun1 onlsun1[44]% (3-3-2). クライアント側のソースファイルのコンパイルおよび実行 実行環境 onlsun3[64]% env HOME=/export/home/onlsun3/inoue PATH=/opt/NSCPnav/bin:/usr/java1.4.0/j2sdk1.4.0/bin:/usr/java1.4.0/j2sdk1.4.0/jr e/bin:/export/home/onlsun3/inoue/FastEther/X1059A/TTCP/ttcp:/opt/LBLxfig/bin:/op t/sfw/bin:/usr/local/bin:/kek/compilers/ws5.0/SUNWspro/bin:/kek/compilers/volume 5/SUNWspro/bin:/kek/compilers/volume4/SUNWspro/bin:/kek/SUNWspro/bin:/opt/FOREat m/bin:/usr/sbin:/usr/ccs/bin:/usr/dt/bin:/bin:/usr/bin:/usr/ucb:/etc:.:/usr/open win/bin:/kek/local/bin LOGNAME=inoue HZ=100 TERM=vt100 TZ=Japan SHELL=/bin/csh MAIL=/var/mail/inoue LANG=ja PWD=/export/home/onlsun3/inoue/Java-IDL1.4 USER=inoue LD_LIBRARY_PATH=/usr/java1.4.0/j2sdk1.4.0/jre/lib/sparc:/usr/java1.4.0/j2sdk1.4. 0/jre/lib:/usr/java1.4.0/j2sdk1.4.0/lib:/usr/java/lib:/opt/sfw/lib:/kek/compiler s/ws5.0/SUNWspro/lib:/usr/lib/locale/ja/wnn/lib:/kek/compilers/volume5/SUNWspro/ lib:/kek/compilers/volume4/SUNWspro/lib:/kek/SUNWspro/lib:/opt/sfw/lib LD_RUN_PATH=/usr/java1.4.0/j2sdk1.4.0/jre/lib/sparc:/usr/java1.4.0/j2sdk1.4.0/jr e/lib:/usr/java1.4.0/j2sdk1.4.0/lib:/usr/java/lib:/opt/sfw/lib:/kek/compilers/ws 5.0/SUNWspro/lib:/usr/lib/locale/ja/wnn/lib:/usr/X11R6.1/lib:/usr/local/lib:/opt /sfw/lib MANPATH=/usr/java/man:/opt/sfw/man:/kek/compilers/ws5.0/SUNWspro/man/:/usr/openw in/man:/usr/man:/usr/dt/man:/usr/local/man:kek/compilers/volume5/SUNWspro/man:/k ek/compilers/volume4/SUNWspro/man:/kek//SUNWspro/man:/opt/sfw/man NNTPSERVER=keknews CC_DEF=/home1/usr/local/lib/X11/ccdef/ccdef.kinput2= XMODIFIERS=@im=kinput2 onlsun3[65]% onlsun3[65]% pwd /export/home/onlsun3/inoue/Java-IDL1.4 onlsun3[66]% ls -l 合計 16 -rw-r--r-- 1 inoue kek 109 4月 11日 17:14 Hello.idl -rw-r--r-- 1 inoue kek 1129 4月 11日 17:14 HelloClient.java -rw-r--r-- 1 inoue kek 2129 4月 11日 17:14 HelloServer.java drwxr-xr-x 4 inoue kek 512 4月 11日 17:13 Windows/ drwxr-xr-x 2 inoue kek 512 4月 15日 14:03 inoue-log/ onlsun3[67]% idlj を使ってスタブとスケルトンを作成 onlsun3[67]% idlj -fall Hello.idl onlsun3[68]% ls -l 合計 18 -rw-r--r-- 1 inoue kek 109 4月 11日 17:14 Hello.idl drwxr-xr-x 2 inoue kek 512 4月 15日 14:25 HelloApp/ -rw-r--r-- 1 inoue kek 1129 4月 11日 17:14 HelloClient.java -rw-r--r-- 1 inoue kek 2129 4月 11日 17:14 HelloServer.java drwxr-xr-x 4 inoue kek 512 4月 11日 17:13 Windows/ drwxr-xr-x 2 inoue kek 512 4月 15日 14:03 inoue-log/ onlsun3[69]% HelloAppディレクトリにあるスタブとスケルトンも含めて、*.java ファイル をコンパイルする。 onlsun3[71]% javac *.java HelloApp/*.java onlsun3[72]% ls -l 合計 28 -rw-r--r-- 1 inoue kek 109 4月 11日 17:14 Hello.idl drwxr-xr-x 2 inoue kek 512 4月 15日 14:26 HelloApp/ -rw-r--r-- 1 inoue kek 1506 4月 15日 14:26 HelloClient.class -rw-r--r-- 1 inoue kek 1129 4月 11日 17:14 HelloClient.java -rw-r--r-- 1 inoue kek 522 4月 15日 14:26 HelloImpl.class -rw-r--r-- 1 inoue kek 1974 4月 15日 14:26 HelloServer.class -rw-r--r-- 1 inoue kek 2129 4月 11日 17:14 HelloServer.java drwxr-xr-x 4 inoue kek 512 4月 11日 17:13 Windows/ drwxr-xr-x 2 inoue kek 512 4月 15日 14:03 inoue-log/ onlsun3[73]% ls -l HelloApp 合計 44 -rw-r--r-- 1 inoue kek 200 4月 15日 14:26 Hello.class -rw-r--r-- 1 inoue kek 294 4月 15日 14:25 Hello.java -rw-r--r-- 1 inoue kek 2700 4月 15日 14:26 HelloHelper.class -rw-r--r-- 1 inoue kek 1811 4月 15日 14:25 HelloHelper.java -rw-r--r-- 1 inoue kek 868 4月 15日 14:26 HelloHolder.class -rw-r--r-- 1 inoue kek 725 4月 15日 14:25 HelloHolder.java -rw-r--r-- 1 inoue kek 187 4月 15日 14:26 HelloOperations.class -rw-r--r-- 1 inoue kek 286 4月 15日 14:25 HelloOperations.java -rw-r--r-- 1 inoue kek 2148 4月 15日 14:26 HelloPOA.class -rw-r--r-- 1 inoue kek 2041 4月 15日 14:25 HelloPOA.java -rw-r--r-- 1 inoue kek 2386 4月 15日 14:26 _HelloStub.class -rw-r--r-- 1 inoue kek 2294 4月 15日 14:25 _HelloStub.java onlsun3[74]% クライアントアプリケーションの実行 onlsun3[74]% java HelloClient -ORBInitialPort 1050 -ORBInitialHost onlsun1 Obtained a handle on server object: HelloApp._HelloStub:IOR:00000000000000174944 4c3a48656c6c6f4170702f48656c6c6f3a312e30000000000001000000000000006c000102000000 000e3133302e38372e3135332e313000806700000021afabcb0000000020381a1d1a000000010000 00000000000000000004000000000a00000000000001000000010000002000000000000100010000 00020501000100010020000101090000000100010100 Hello world !! onlsun3[75]% ok. 2台のマシンによる、Java-IDL: Hello World は正常に実行できた。