====== TP CORBA ====== Un peu de documentation : * CORBA en Java : http://java.sun.com/j2se/1.4.2/docs/api * Tutorial Java : http://download.oracle.com/javase/6/docs/technotes/guides/idl/jidlExample.html * CORBA en C++ avec OmniORB : http://omniorb.sourceforge.net ==== Echo en Java et C++ ==== Vous disposez avec les fichiers {{:sysrep:echo-java.tgz}} et {{:sysrep: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". 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 : * http://download.oracle.com/javase/1.4.2/docs/guide/idl/jidlExample2.html * http://java.sun.com/javase/6/docs/technotes/tools/share/orbd.html ====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 : * OmniORBpy : http://omniorb.sourceforge.net/omnipy3/omniORBpy/ * Tutoriel Python : http://docs.python.org/