.$B%5!<%P$N3+H/.(B


.$B$3$N%;%/%7%g%s$G$O!".(BJava IDL .$B$K$h$k!"0l;~.(B CORBA .$B%*%V%8%'%/%H$N%5!<%P%5%]!<%H$K$D$$$F@bL@$7$^$9!#.(B Hello World .$B$NNc.(B.$B$K$O!"0l;~%*%V%8%'%/%H%5!<%P$,4^$^$l$F$$$^$9!#.(B

.$B$3$3$G$O!"0J2<$N9`L\$K$D$$$F@bL@$7$^$9!#.(B

.$B0l;~%*%V%8%'%/%H$H;}B3%*%V%8%'%/%H.(B

.$B0l;~.(B CORBA .$B%*%V%8%'%/%H$NM-8z4|4V$O!"%*%V%8%'%/%H$r:n@.$7$?%5!<%P%W%m%;%9$NC<:$7!"%/%i%$%"%s%H$+$i$N%*%V%8%'%/%H;2>H$O$9$Y$FL58z$K$J$j$^$9!#0l;~%*%V%8%'%/%H$O!"%"%W%j%1!<%7%g%s$H%*%V%8%'%/%H4V$NHsF14|=hM}$*$h$S%3!<%k%P%C%/DL?.$K;HMQ$5$l$^$9!#$?$H$($P!"%?%$%_%s%0%5!<%S%9$,%$%s%?!<%P%k$N4|8B$,@Z$l$?$3$H$r%/%i%$%"%s%H%"%W%j%1!<%7%g%s$KDLCN$9$k>l9g!"0J2<$N

.$B$3$N=hM}J}K!$O!"

.$B$3$l$H$OBP>HE*$K!";}B3%*%V%8%'%/%H$O!"L@<(E*$KGK4~$5$l$k$^$GB8:_$7$^$9!#%/%i%$%"%s%H$,;}B3.(B CORBA .$B%*%V%8%'%/%H$r;2>H$7$F$$$k>l9g!"$=$N%*%V%8%'%/%H$N%5!<%P$,H$O;HMQ2DG=$G$9!#.(BORB .$B$,%*%V%8%'%/%H$N8F$S=P$7$r

.$B8=;~E@$G$O!".(BJava IDL .$B$O!"0l;~%*%V%8%'%/%H%5!<%P$@$1$r%5%]!<%H$7$F$$$^$9!#$^$@.(B Java IDL .$B$r;HMQ$7$F;}B3%*%V%8%'%/%H%5!<%P$r5-=R$9$k$3$H$O$G$-$^$;$s$,!";}B3.(B CORBA .$B%*%V%8%'%/%H$N%5!<%P$,.(B C++ .$BEy$NB>$N8@8l$G5-=R$5$l$F$$$k$+!"$^$?$O$[$+$N.(B Java ORB .$B$r

.$B%5!<%P%s%H$*$h$S%5!<%P%s%H4pDl%/%i%9.(B

.$B0l;~.(B CORBA .$B%*%V%8%'%/%H$N%5!<%P$rl9g!"%*%V%8%'%/%H$N5$5$l$^$9!#%5!<%P%s%H4pDl%/%i%9$O!".(Bidltojava .$B%3%s%Q%$%i$G%*%W%7%g%s$r;XDj$9$k$3$H$K$h$j@8@.$5$l$^$9!#0l;~.(B CORBA .$B%*%V%8%'%/%H$N%$%s%9%?%s%9$O!"$=$N%5!<%P%s%H%/%i%9$N%$%s%9%?%s%9$K$h$j

.$B%5!<%P%s%H4pDl%/%i%9$O!".(BORB .$B$H$=$N7?$KBP1~$9$k%5!<%P%s%H%3!<%I.(B (.$B%9%1%k%H%s.(B) .$B4V$N!"7?8GM-$N.(B CORBA .$B%$%s%?%U%'!<%9$G$9!#%5!<%P%s%H4pDl%/%i%9$O!"EO$5$l$k%Q%i%a!<%?$rHs@0Ns2=$7!"%5!<%P%s%H%a%=%C%I$r8F$S=P$7!"7k2L$r@0Ns2=$7!".(BORB .$B$,7k2L$r%/%i%$%"%s%H.(B ORB .$B$KJV$9$h$&$K;X<($7$^$9!#.(B

.$B%5!<%P%s%H%/%i%9$O!"l9g$O.(B 1 .$B$D$N%a%=%C%I!"=q$-9~$_2DG=$J>l9g$O.(B 2 .$B$D$N%a%=%C%I$rI,MW$H$7$^$9!#.(B) .$B

module Notifiers {
   interface SimpleNotifier {
      void alert (in long alert_id);
   };
};

.$B$3$N7?$N%5!<%P%s%H$O

import Notifiers.*
 
class SimpleNotifierServant extends _SimpleNotifierImplBase {
   
   void alert (int alert_id) {
      // do something about the alert ...
      return;
   }
}

.$B%5!<%P%/%i%9$O!"SimpleNotifierServant .$B$N%$%s%9%?%s%9$r@8@.$G$-$^$9!#.(B

  SimpleNotifierServant SimpleNotifier = new SimpleNotifierServant(); 
  orb.connect(SimpleNotifier); 

orb.connect() .$B8F$S=P$7$O!"%*%V%8%'%/%H$*$h$S%5!<%P%s%H$r.(B ORB .$B$H$H$b$KEPO?$9$k$N$G!".(BCORBA .$B%*%V%8%'%/%H$N8F$S=P$7;~$K.(B ORB .$B$K$h$j%5!<%P%s%H$,8F$S=P$5$l$^$9!#%5!<%P$,Dd;_$9$k$H!".(BORB .$B$O$=$N%5!<%P$N.(B CORBA .$B%*%V%8%'%/%H$N%l%3!<%I$rGK4~$9$k$?$a!"$=$N$"$H$N8F$S=P$7$G$O.(B OBJECT_NOT_EXIST .$BNc30$,H/@8$7$^$9!#%5!<%P$O!".(Borb.disconnect() .$B8F$S=P$7$K$h$j<+$i$,Dd;_$7$F$7$^$&A0$K!".(BCORBA .$B%*%V%8%'%/%H$rL58z$K$9$k$3$H$b$G$-$^$9!#.(B

.$B%5!<%P%s%H%*%V%8%'%/%H$N;HMQ.(B

.$B0l;~.(B CORBA .$B%*%V%8%'%/%H$O.(B Java .$B%5!<%P%s%H%*%V%8%'%/%H$K$h$jH$rI,MW$H$9$k$I$N%a%=%C%I$K$b%Q%i%a!<%?$H$7$FEO$9$3$H$,$G$-$^$9!#$?$H$($P!".(BJava .$B%W%m%0%i%`$K$h$jJF9q.(B Sun Microsystems, Inc .$B$N3t2A$,$$$D.(B 150 .$B$rD6$9$N$+$rD4$Y$k$H$7$^$9!#$3$N%W%m%0%i%`$O!"H$rJ}$G5-=R$5$l$F$$$k.(B).$B!#.(B

// IDL
interface StockWatcher {
void set_threshold(
   in string stock_symbol,
   in short stock_price,
   in Notifiers::SimpleNotifier notifier_obj);
};
 
// Java
void set_threshold(
   String stock_symbol, 
   short stock_price, 
   Notifiers.SimpleNotifier notifier_obj)
  { // set the threshold ... 
  }
 

set_threshold() .$B$r8F$S=P$9$K$O!".(BSimpleNotifier CORBA .$B%*%V%8%'%/%H$r:n@.$9$kI,MW$,$"$j$^$9!#.(BSimpleNotifierImpl .$B$H$$$&%5!<%P%s%H%/%i%9$r$9$G$K%$%s%]!<%H$7$F$$$k>l9g$K$O!"$3$N%*%V%8%'%/%H$O

SimpleNotifier SUNWnotifier = new SimpleNotifierImpl(); 
int stockPrice = 150;
orb.connect(SUNWnotifier);
StockWatcher aStockWatcher = // code to get a stock-watcher reference; 
 
aStockWatcher.set_threshold ("SUNW", stockPrice, SUNWnotifier);
 

Dynamic Skeleton Interface

Dynamic Skeleton Interface (DSI) .$B$r;HMQ$9$k$H!"%*%V%8%'%/%H$N%$%s%?%U%'!<%9$rA0$b$C$F.(B (.$B%3%s%Q%$%k;~$K.(B) .$BCN$C$F$$$J$$>l9g$G$b!"%5!<%P$O%5!<%P%s%H%*%V%8%'%/%H$rDs6!$9$k$3$H$,$G$-$^$9!#%5!<%P$O!".(BIDL .$B%$%s%?%U%'!<%9Dj5A$+$i%3%s%Q%$%k$5$l$?%9%1%k%H%s%3!<%I$NBe$o$j$K!"%*%Z%l!<%7%g%s$N8F$S=P$7$rF0E*$K9=C[$7$^$9!#.(B

DSI .$B$r;HMQ$9$kMxE@.(B

.$B%3%s%Q%$%k;~$K%5!<%P$,l9g$K.(B DSI .$B$r;HMQ$7$^$9!#$?$H$($P!".(BCOM .$B%/%i%$%"%s%H$,.(B CORBA .$BNN0h$K>oCs$9$k%5!<%S%9$K%"%/%;%9$G$-$k$h$&$K$7$J$,$i!"F1;~$K.(B COM .$B4D6-$K>oCs$9$k%5!<%S%9$r.(B CORBA .$B%/%i%$%"%s%H$,8F$S=P$;$k$h$&$K$9$k>l9g!"%V%j%C%8%"%W%j%1!<%7%g%s$,I,MW$K$J$k$3$H$,$"$j$^$9!#3F4D6-$K$O!"MW5a$*$h$S1~Ez$r:n@.$9$kFH<+$NJ}K!$,$"$j$^$9!#.(B

.$B$3$N%V%j%C%8%"%W%j%1!<%7%g%s$O!".(BDSI .$B$r;HMQ$7$F.(B CORBA .$B%/%i%$%"%s%HMW5a$r.(B COM .$B%5!<%P$,G'<12DG=$J7A<0$KJQ49$7$^$9!#$^$?.(B DII .$B$r;HMQ$7$F!".(BCOM .$B%/%i%$%"%s%HMW5a$r.(B CORBA .$B%5!<%P$,G'<12DG=$J7A<0$KJQ49$7$^$9!#$3$N%"%W%j%1!<%7%g%s$N%W%m%0%i%^$O!"$3$N:n6H$r.$B$3$N=hM}$r0lHLE*$J@EE*%*%V%8%'%/%H$N8F$S=P$7$HHf3S$7$F$_$F$/$@$5$$!#%5!<%P$O!"8F$S=P$=$&$H$9$k%$%s%?%U%'!<%9MQ$N%3%s%Q%$%k:Q$_$N%9%1%k%H%s$K%"%/%;%9$7$^$9!#$3$l$i$N%9%1%k%H%s$O!".(BIDL .$B%$%s%?%U%'!<%9Dj5A$r.(B idltojava .$B%3%s%Q%$%i$G%3%s%Q%$%k$9$k$3$H$K$h$j@8@.$5$l$^$9!#.(BORB .$B$O!"MW5a$rDSI .$B$N;HMQJ}K!.(B

DSI .$B$r;HMQ$9$k$K$O!"$C$FF0E*%5!<%P%s%H$r

  • .$B%/%i%9$r@k8@$7$F.(B org.omg.CORBA.DynamicImplementation .$B$r3HD%$7$^$9!#.(B

  • invoke() .$B%a%=%C%I$rinvoke() .$B%a%=%C%I$N%3!<%I$r5-=R$7!".(BServerRequest .$B%*%V%8%'%/%H$KBP$7$F
  • op_name() .$B$r8F$S=P$7$F%*%Z%l!<%7%g%sL>$rCj=P$9$k.(B
  • .$B%*%Z%l!<%7%g%s%Q%i%a!<%?$N.(B NVList .$B$r9=C[$9$k.(B (.$B$3$NA`:n$K$ODL>o!"%$%s%?%U%'!<%9%j%]%8%H%j$+$i$N%Q%i%a!<%?$N7?>pJs$,I,MW$K$J$k.(B)
  • NVList .$B$rEO$7!".(Bparams() .$B$r8F$S=P$7$F%Q%i%a!<%?CM$rCj=P$9$k.(B
  • .$B%*%Z%l!<%7%g%s$rNVList .$B$N.(B out .$B$*$h$S.(B inout .$B%Q%i%a!<%?$K?7$7$$CM$rBeF~$9$k.(B
  • result() .$B$^$?$O.(B except() .$B$N$I$A$i$+$r8F$S=P$9.(B .$BCm.(B: params() .$B$r8F$S=P$7!"$=$N$"$H.(B result() .$B$^$?$O.(B except() .$B$r8F$S=P$9>l9g!"I,$:@5$7$$8F$S=P$7=g=x$K=>$C$F$/$@$5$$!#$^$:!".(Bparams() .$B$r8F$S=P$7!"$=$N$"$H.(B result() .$B$^$?$O.(B except() .$B$N$I$A$i$+$r.(B 1 .$BEY$K.(B 1 .$B$D$@$18F$S=P$7$^$9!#$3$l$i$N@)8B;v9`$K=>$o$J$+$C$?>l9g$K$O!".(BBAD_INV_ORDER .$BNc30$,H/@8$7$^$9!#.(B

  • _ids() .$B%a%=%C%I$r.$B$3$N%a%=%C%I$O!".(BDynamicImplementation .$B$N%9!<%Q!<%/%i%9$G$"$k.(B org.omg.CORBA.portable.ObjectImpl .$B$+$i7Q>5$5$l$^$9!#$3$l$O!"F0E*%5!<%P$K$h$j
  • DSI .$B%*%V%8%'%/%H$N%$%s%9%?%s%9$r:n@.$7!".(Borg.omg.CORBA.ORB.connect() .$B$r8F$S=P$7$F!"$3$N%$%s%9%?%s%9$r.(B ORB .$B$H$H$b$KEPO?$7$^$9!#.(B

    DSI .$B$N;HMQNc.(B

    .$Bo$K4JC1$J%$%s%?%U%'!<%9$rDj5A$7$^$9!#.(B

    //IDL
    module JavaIDL {
      interface DSIExample {
        void print_args(in string arg1, in short arg2);
      };
    };
    

    .$Binvoke() .$B$Nprint_args() .$B%*%Z%l!<%7%g%s$NF0E*=hM}$r9T$$$^$9!#.(B

    //Java
    import java.util.*;
    import org.omg.CORBA.*;
    
    // Dynamic servant class implementation
    class DSIExampleServantImpl extends DynamicImplementation {
    
      // Store the repository ID for the interface implemented 
      static String[] myIds = {"IDL:JavaIDL/DSIExample:1.0"};
    
      // Create a reference to the ORB
      ORB orb;
      DSIExampleServantImpl(ORB orb) {
        this.orb = orb;
      }
    
      // Implementation of invoke() for handling dynamic requests
      public void invoke(ServerRequest request) {
        try {
          System.out.println("DSI: invoke called, op = "+ request.op_name());
        
          // Create an NVList to hold the parameters
          NVList nvlist = orb.create_list(0);
    
          // Check if the request is for the operation
          // "print_args"
          if (request.op_name().equals("print_args") == true) {
    
            // Add first argument to NVList
            Any any1 = orb.create_any();
            any1.insert_string("");
            nvlist.add_value("arg1", any1, ARG_IN.value);
    
            // Add second argument to NVList
            Any any2 = orb.create_any();
            any2.insert_short((short)0);
            nvlist.add_value("arg2", any2, ARG_IN.value);    
    
            //Pass the NVList to the request, to get values
            request.params(nvlist);
    
            // Extract values and print arguments
            System.err.println("Argument 1: In value: " 
    			    + nvlist.item(0).value().extract_string());
            System.err.println("Argument 2: In value: "
    			    + nvlist.item(1).value().extract_short());
            TypeCode result_tc = orb.get_primitive_tc(TCKind.tk_void);
            Any result_any = orb.create_any(); 
            result_any.type(result_tc);
    
    	// Set the void result
            request.result(result_any);
          }
        } 
        catch ( Exception ex ) {
          ex.printStackTrace();
          System.out.println("DSIExample: Exception thrown: " + ex);
        }
      }
    
      // Implement the _ids() method to return repository ID of interface
      public String[] _ids() {
        return myIds; 
      }
    
    } 
    // File DSIServer.java continues
    
    .$B0J2<$O!".(BDSIServer.java .$B$N;D$j$N%3!<%I$G!"I8=`%5!<%P$r // Java // DSIServer implementation public class DSIServer { // Main public static void main(String[] args) { try { // Access and initialize the ORB org.omg.CORBA.ORB orb = ORB.init(args, null); // Create an instance of the dynamic implementation DSIExampleServantImpl servant = new DSIExampleServantImpl(orb); // Register the dynamic servant with the ORB orb.connect(servant); // Write IOR into file. // Alternatively, the naming service could be used. OutputStream f = new FileOutputStream( System.getProperty("user.home") + System.getProperty("file.separator") + "DSI.ior") ; DataOutputStream out = new DataOutputStream(f) ; String ior = orb.object_to_string(servant) ; out.writeBytes(ior) ; out.close(); System.out.println("IOR is " + ior) ; // Wait for requests from client java.lang.Object sync = new java.lang.Object(); synchronized(sync){ sync.wait(); } } catch (Exception ex) { ex.printStackTrace(); System.err.println("DSIServer: Exception thrown: " + ex); } } }

    .$B0Q>y%9%1%k%H%s.(B (Tie)

    Java .$B$G$O!"%/%i%9$,5$G$-$k$N$O.(B 1 .$B$D$N%9!<%Q!<%/%i%9$+$i$@$1$J$N$G!"%/%i%93,AX$K@55,$KB0$9$k%*%V%8%'%/%H$K.(B CORBA .$B%*%V%8%'%/%H$Ny%9%1%k%H%s$r;HMQ$9$k$3$H$K$h$j!"4JC1$K.(B CORBA .$B%5!<%P%s%H$K$9$k$3$H$,$G$-$^$9!#.(B

    .$B0Q>y%9%1%k%H%s$O!"MW5a$5$l$?.(B CORBA .$B%*%Z%l!<%7%g%s$r%5!<%P%s%H4pDl%/%i%9.(B (.$B%*%V%8%'%/%H$,7Q>5$9$Y$-%/%i%9.(B) .$B$+$i@8@.$5$l$?.(B Tie .$B%/%i%9$X0\F0$7$^$9!#.(BTie .$B%/%i%9$O!"%*%V%8%'%/%H$N%9%1%k%H%s$H$7$F5!G=$7!".(BORB .$B$+$i$N8F$S=P$7$ry$7$^$9!#.(B

    .$BCm.(B: .$Bidltojava .$B%3%s%Q%$%i$r%@%&%s%m!<%I.(B.$B$9$kI,MW$,$"$j$^$9!#.(B

    Tie .$B$N;HMQ.(B

    Tie .$B$r;HMQ$9$k$K$O!":G=i$K.(B -ftie .$B%U%i%0$r;HMQ$7$F.(B IDL .$B%$%s%?%U%'!<%9$r%3%s%Q%$%k$9$kI,MW$,$"$j$^$9!#$3$N%3%^%s%I$r;HMQ$9$k$H!"DL>o$N.(B Java .$B%U%!%$%k$K2C$(!".(BOperations .$B%$%s%?%U%'!<%9$*$h$S.(B Tie .$B%/%i%9$b:n@.$5$l$^$9!#$=$l$+$i%/%i%9$r5-=R$7!"@8@.$5$l$?.(B Operations .$B%$%s%?%U%'!<%9$r

    Tie .$B$N;HMQNc.(B

    .$B // IDL interface Frog{ void croak(); };

    Frog.idl .$B$r.(B idltojava .$B$G%3%s%Q%$%k$9$k$H!"I8=`%/%i%$%"%s%H!"%5!<%P%s%H%/%i%9Ey$N%5!<%P%U%!%$%k!"$*$h$S0Q>y%9%1%k%H%s$KFCM-$N%U%!%$%k$G$"$k.(B _FrogTie .$B$H.(B _FrogOperations .$B$,@8@.$5$l$^$9!#.(B .$B$3$N.(B IDL .$B$NI8=`E*$J // FrogImpl.java--without using ties, inherits required // CORBA functionality from _FrogImplBase public class FrogImpl extends _FrogImplBase { public void croak() { getAudioClip(getCodeBase(), "frog.au").play(); } public static void main(String[] args) { ORB orb = ORB.init(); Frog frogRef = new FrogImpl(); orb.connect(frogRef); // remainder of code deleted } }

    FrogImpl.java .$B$O!"$=$N.(B CORBA .$B5!G=.(B (ORB .$B$+$i$N%G%#%9%Q%C%A%"%C%W%3!<%k$J$I.(B) .$B$r.(B _FrogImplBase .$B$+$i7Q>5$9$k$?$a!";D$j$N%a%=%C%I$N$N%/%i%9$N%a%=%C%I$HF10l$G$"$C$F$b!"$=$l$i$r7Q>5$9$k$3$H$O$G$-$^$;$s!#.(B

    .$B0Q>y%9%1%k%H%s$r;HMQ$9$kF1$8%/%i%9$O!" // Amphibian.java--provides general behavior public class Amphibian extends Applet { public void breathWater(){ // implementation deleted } } // FrogImpl.java--using ties public class FrogImpl extends Amphibian implements _FrogOperations { public void croak() { // croak method must still be here; it is in the Operations interface getAudioClip(getCodeBase(), "frog.au").play(); } public static void main(String[] args) { ORB orb = ORB.init(); FrogImpl servant = new FrogImpl(); Frog frogRef = new _FrogTie(servant); orb.connect(frogRef); // remainder of code deleted } }

    Tie .$B$r;HMQ$7$F!".(BFrogImpl .$B$O.(B IDL .$B%$%s%?%U%'!<%9.(B (.$B$*$h$S.(B _FrogOperations) .$B$GDj5A$5$l$?.(B CORBA .$B%*%Z%l!<%7%g%s$N5MQ$K%9!<%Q!<%/%i%9%9%m%C%H$rM=Ls$7$^$9!#.(B

    orb.connect() .$B8F$S=P$7$N0c$$$KCmL\$7$F$/$@$5$$!#0Q>y%9%1%k%H%s$r;HMQ$7$F!"


    .$B%/%i%$%"%s%H.(B | .$B%5!<%P.(B | .$BNc30.(B | .$B=i4|2=.(B | .$B%M!<%`%5!<%S%9.(B

    .$B%[!<%`.(B

    .$B35G0.(B

    .$B%W%m%0%i%_%s%0.(B

    .$B%j%U%!%l%s%9.(B

    .$B%A%e!<%H%j%"%k.(B


    Copyright © 1996, 1997 Sun Microsystems, Inc., 2550 Garcia Ave., Mtn. View, CA. 94043-1100 USA., All rights reserved.