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