Systèmes Distribués – TD4 Introduction à CORBA : Premiers pas M. Diouri Systèmes Distribués – TD4 Introduction à CORBA : Premiers pas [email protected] 03 octobre 2012 Ce TP a pour but de s’initier à CORBA en travaillant avec Java sous un environnement Linux. Quelques liens vers des cours sont référencés sur ma page personnelle : http://perso.ens-lyon.fr/mehdi.diouri/teaching.html Dans un premier temps, il est demandé de prendre connaissance de ces liens. Ensuite, afin de prendre en main ce nouvel outil, vous suivrez les étapes de développement de votre première application CORBA : Hello World !. Pour finir, vous développerez une application simple. Premier exemple : Hello World Etape 1 : Définition de l’interface avec le langage IDL : Hello.idl Voici l’interface IDL de l’application que nous vous proposons d’implémenter dans un fichier Hello.idl : module exo1 { interface Hello { void sayHello(); }; }; Etape 2 : Génération des classes nécessaires à la distribution Compiler l’idl grâce à la commande : > mkdir generated > idlj -td generated -emitAll -fall Hello.idl Vous verrez ainsi apparaître des fichiers dans le dossier generated : – HelloHelper.java : classe utilitaire contenant notamment une méthode narrow, servant à remplacer le cast java – HelloHolder.java : classe gérant les paramètres out (non pris en charge par java) – Hello.java : "cablage" CORBA 1 Systèmes Distribués – TD4 Introduction à CORBA : Premiers pas M. Diouri – HelloOperations.java : traduction java de l’idl – HelloPOA.java : squelette (Portable Object Adapter) – _HelloStub.java : stub Etape 3 : Implémentation de l’objet servant : HelloImpl.java. Il s’agit là du code fonctionnel de l’objet distribué. Voici une implémentation que l’on propose dans un fichier HelloImpl.java package exo1; import java.util.*; import java.net.*; public class HelloImpl extends HelloPOA { //Déclaration éventuelle des attributs de la classe (en private) //Déclaration éventuelle de variables auxiliaires. //construction de la classe public HelloImpl() { super(); // Instanciation éventuelle des attributs de la classe implémentée } public void sayHello() { System.err.println("Hello World !"); } }} Etape 4 : Implémentation du serveur : HelloServer Voici un exemple d’implémentation de serveur HelloServer.java package exo1; import import import import org.omg.CORBA.*; org.omg.PortableServer.*; org.omg.PortableServer.POA; java.io.*; public class HelloServer { public static void main(String args[]) { try{ // Création et initialisation de l’ORB ORB orb = ORB.init(args, null); // Récupération de référence et activation du POA POA rootPOA = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); rootPOA.the_POAManager().activate(); // Création et initialisation de l’objet servant %HelloImpl hello = new HelloImpl(); .................................................................. // Récupération du servant et écriture dans un fichier Hello obj = HelloHelper.narrow(rootPOA.servant_to_reference(hello)); PrintWriter file = new PrintWriter("ObjectRef"); file.println(orb.object_to_string(obj)); file.close(); System.out.println("Server is ready"); // Mise en attente des requêtes provenant des clients orb.run(); } catch (Exception e) { System.err.println("Error: ": + e); e.printStackTrace(System.out); } } } 2 Systèmes Distribués – TD4 Introduction à CORBA : Premiers pas M. Diouri Etape 5 : Implémentation du client : HelloClient.java Voici un exemple d’implémentation de client HelloClient.java package exo1; import java.io.*; import org.omg.CORBA.*; public class HelloClient { public static void main(String[] args) try { // Initialisation de l’ORB ORB orb = ORB.init(args, null); { // Récupération de la référence du servant BufferedReader fileReader = new BufferedReader(new FileReader("ObjectRef")); String stringIOR = fileReader.readLine(); fileReader.close(); // Création, à partir de la référence du servant, d’un proxy local Hello proxyHello = HelloHelper.narrow(orb.string_to_object(stringIOR)); // Invocation de méthodes distantes System.out.println ("Invoking object hello"); ............................................................ %proxyHello.sayHello(); } catch (Exception e) { System.err.println("Error: ": + e); e.printStackTrace(System.out); } } } Etape 6 : Test de l’application Pour tester l’application, vous devez compiler tous les fichiers .java de votre application. javac fichier.java Pour cela, vous pouvez vous servir d’un fichier Makefile. Ensuite, il faut lancer le serveur dans un shell grâce à la commande suivante : java HelloServer Enfin, il faut lancer le client dans un autre shell grâce à la commande suivante : java HelloClient 3