Table of Contents
TP CORBA
Un peu de documentation :
- CORBA en Java : http://java.sun.com/j2se/1.4.2/docs/api
- CORBA en C++ avec OmniORB : http://omniorb.sourceforge.net
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
- Compilez et exécutez l'exemple Echo en Java et en C++. Lire les consignes dans les fichiers README.txt.
- Reproduire l'expérience sur deux machines distinctes.
- 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).
- 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 :
- Tutoriel Python : http://docs.python.org/