OBJETS DISTRIBUES : Corba

TP4 : Java et Interopérabilité Java/C++

1 Client Java de la calculette 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’)