User Tools

Site Tools


sysrep:corba

TP CORBA

Echo en Java et C++

Vous disposez avec les fichiers echo-java.tgz et echo-cpp-omniorb.tgz de l'implantation dans les langages Java et C++ du service suivant :

  interface Echo 
  {
    string echoString(in string mesg);
  };
Configuration de votre environnement Linux
  • Pour CORBA Java, il suffit de vérifier que vous disposez de Java >= 1.4. Le compilateur IDL s'appelle “idlj”, le service de nommage se nomme “tnameserv”.
  • Pour CORBA C++, nous utilisons l'ORB OmniORB. Le compilateur IDL s'appelle “omniidl”, le service de nommage se nomme “omniNames”. Vous pouvez configurer votre environnement de la façon suivante :
  $ source echo-cpp-omniorb/omniorb.sh
Quelques exercices
  1. Compilez et exécutez l'exemple Echo en Java et en C++. Lire les consignes dans les fichiers README.txt.
  2. Reproduire l'expérience sur deux machines distinctes.
  3. Reproduire l'expérience en mixant un client Java et un serveur C++ et réciproquement. On utilisera de préférence le service de nommage de Java (tnameserv).
  4. En java. Ajoutez une méthode “long echoLong(in long x)” dans le contrat IDL de Echo et testez là. Pour y parvenir, il faut préalablement modifier l'IDL et le recompiler, puis il faut chercher la projection de la méthode echoLong() dans le fichier généré EchoOperations.java. Que remarquez-vous ? Pourquoi la méthode projetée de manipule-t-elle pas un long ? Implantez cette méthode dans votre serveur et testez-là.

/* - Remplacer les méthodes echoLong() et echoString() par une seule méthode “any echo(in any a)” manipulant le type any. [BONUS] */

Compte Bancaire

Implanter en Java le service client/serveur de compte bancaire définit par l'interface “bank.idl”.

bank.idl
  interface Account {
    void deposit(in unsigned long amount );
    void withdraw(in unsigned long amount );
    long balance();
  };
 
  interface Bank {
    Account create ();
    void destroy(in Account a);
    Account move(in Bank target, in Account a);
  };

Note : La méthode move() utilisera les méthodes balance(), destroy(), create() et deposit().

Pour aller plus loin, on modifiera l'IDL pour que la Bank gère des numéros de comptes. Par exemple :

Account create(out long id);
Account lookup(in long id);

Persistance (bonus au choix)

Reprendre l'exemple Echo pour le rendre persistant. Pour ce faire, il faut utiliser orbd à la place de tnameserv et préciser que le POA est persistant comme ceci :

    import org.omg.CORBA.Policy;
 
    POA rootPOA = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
    Policy[] policy = new Policy[1];
    policy[0] = rootPOA.create_lifespan_policy(LifespanPolicyValue.PERSISTENT);
    POA persistentPOA = rootPOA.create_POA("persistentPOA", null, policy); 

Réaliser le déploiement de l'application à l'aide de la commande servertool

Plus d'infos :

CORBA en Python (bonus au choix)

Ecrire un client Echo en langage Python avec OmniORBpy. Des exemples sont disponibles dans ~esnard/opt/omniORBpy-3.4/examples.

Pour vous aider, consulter la documentation :

sysrep/corba.txt · Last modified: 2024/03/18 15:06 by 127.0.0.1