Systèmes Distribués – TD4 Introduction à CORBA : Premiers pas

publicité
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
Téléchargement