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 は正常に実行できた。