.$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;~.(B CORBA .$B%*%V%8%'%/%H$NM-8z4|4V$O!"%*%V%8%'%/%H$r:n@.$7$?%5!<%P%W%m%;%9$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$, .$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 .$B0l;~.(B CORBA .$B%*%V%8%'%/%H$N%5!<%P$r .$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!" .$B$3$N7?$N%5!<%P%s%H$O
.$B%5!<%P%/%i%9$O!"SimpleNotifierServant .$B$N%$%s%9%?%s%9$r@8@.$G$-$^$9!#.(B 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
.$B0l;~.(B CORBA .$B%*%V%8%'%/%H$O.(B Java .$B%5!<%P%s%H%*%V%8%'%/%H$K$h$j 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
.$B%3%s%Q%$%k;~$K%5!<%P$, .$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 DSI .$B$r;HMQ$9$k$K$O!"$C$FF0E*%5!<%P%s%H$r
.$Bo$K4JC1$J%$%s%?%U%'!<%9$rDj5A$7$^$9!#.(B
.$Binvoke() .$B$N Java .$B$G$O!"%/%i%9$, .$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$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 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 .$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 .$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$N 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%5!<%P%s%H$*$h$S%5!<%P%s%H4pDl%/%i%9.(B
module Notifiers {
interface SimpleNotifier {
void alert (in long alert_id);
};
};
import Notifiers.*
class SimpleNotifierServant extends _SimpleNotifierImplBase {
void alert (int alert_id) {
// do something about the alert ...
return;
}
}
SimpleNotifierServant SimpleNotifier = new SimpleNotifierServant();
orb.connect(SimpleNotifier);
.$B%5!<%P%s%H%*%V%8%'%/%H$N;HMQ.(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
DSI .$B$r;HMQ$9$kMxE@.(B
org.omg.CORBA.DynamicImplementation
.$B$r3HD%$7$^$9!#.(Binvoke()
.$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
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
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$rDynamicImplementation
.$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$jorg.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
//IDL
module JavaIDL {
interface DSIExample {
void print_args(in string arg1, in short arg2);
};
};
//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.$B0Q>y%9%1%k%H%s.(B (Tie)
Tie .$B$N;HMQ.(B
Tie .$B$N;HMQNc.(B
.$B
// IDL
interface Frog{
void croak();
};
.$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.