OBJETS DISTRIBUES : Corba
TP4 : Java et Interopérabilité Java/C++
Soit l’interface du TP précédent du fichier IDL « calculator.idl » :
interface Calculator {
attribute long memoire;
long ajouter(in long val);
long soustraire(in long val);
long multiplier(in long val);
long diviser(in long val);
};
Ecrire EN JAVA le client qui propose le choix de l'opération à réaliser à l'utilisateur parmi :
- Set (mémoire)
- Get (mémoire)
- Ajouter
- Soustraire
- Multiplier
- Diviser
- Quitter
Le client devra retrouver le servant par rapport à son nom, en utilisant le naming service.
Pour générer en java le stub:
jidl --no-skeletons Calculator.idl
doit generer:
Accès en java au stub et au naming service:
Portion de programme utile du client (main) :
System.out.println("le client demarre..\n");
// indiquer à la jvm d’utiliser l’ORB Orbacus
java.util.Properties props = System.getProperties();
props.put("org.omg.CORBA.ORBClass", "com.ooc.CORBA.ORB");
props.put("org.omg.CORBA.ORBSingletonClass", "com.ooc.CORBA.ORBSingleton");
System.out.println("init ORB.\n");
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, props);
// connexion au nameservice, recupere l'IOR du nameservice
System.out.println("\n connexion au name service...\n");
org.omg.CORBA.Object objNaming = orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objNaming);
// rechercher l'object nommé ‘a1’
NameComponent nc = new NameComponent("a1","");
NameComponent path[] = {
nc };
// récupérer une reference à l’objet nommé ‘a1’
Calculator calc = CalculatorHelper.narrow(ncRef.resolve(path));
Pour exécuter le programme client il est nécessaire de faire référence aux librairies (“jar”) de l’ORB:
SET JARS=D:\CORBA\ORBacus\lib
set CP=.;%JARS%\OB.jar;%JARS%\OBBalancer.jar;%JARS%\OBBiDir.jar;%JARS%\OBEvent.jar;%JARS%\OBIMR.jar;%JARS%\OBNaming.jar;%JARS%\OBProperty.jar;%JARS%\OBTest.jar;%JARS%\OBTime.jar;%JARS%\OBUDP.jar;%JARS%\OBUtil.jar;%JARS%\OBWatson.jar
L’appel se fera ensuite comme suit :
java -cp %CP% Client -ORBInitRef NameService=corbaloc:iiop:localhost:1973/NameService
(si votre classe client java se nomme ‘Client’)