Vous êtes sur la page 1sur 4

P.O.

O (JAVA avancé)

TP: CORBA
Configurations
1- Télécharger et installer JDK1.8 depuis
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
2- Ajouter le chemin du JDK1.8 dans les variables d’environnement
https://www.youtube.com/watch?v=l1VxWWubxFo
3- Ajouter JDK1.8 Au Eclipse et Créer un nouveau projet avec JDK8
https://www.youtube.com/watch?v=V7V3INd82Xw

Exercice 1
Nous voulons créer deux applications Client / Serveur qui communiquent avec le bus CORBA qui va
afficher un message de bienvenue.

1- La première étape est de créer le ficher IDL. Ci-dessou l’interface sur laquelle nous allons travailler

module HelloWorldApp{
interface Hello{
attribute string HelloMessage;
};
};
2- On doit compiler le fichier IDL, on ouvre l’invite de commande dans le dossier où se trouve
ce fichier et on fait la commande suivante :

idlj -fall Helloworld.idl


Après la compilation, le compilateur va générer un dossier contenant ces fichiers :

3- Maintenant on va créer un nouveau package pour le serveur, et on créer une classe du


Servant et en redéfinissant les méthodes et les attributs.

package HelloWorldServer;

import org.omg.CORBA.ORB;

import HelloWorldApp.HelloPOA;

public class HelloServant extends HelloPOA {


private String message= "Bonjour tous Le monde !!";
private ORB orb;

public void setOrb(ORB orb) {


this.orb = orb;

1
P.O.O (JAVA avancé)

@Override
public String HelloMessage() {
// TODO Auto-generated method stub
return message;
}

@Override
public void HelloMessage(String newHelloMessage) {
message = newHelloMessage;
}

4- Maintenant en doit faire le Main de notre serveur


package HelloWorldServer;

import org.omg.CORBA.ORB;
import org.omg.CosNaming.*;
import org.omg.PortableServer.*;

import HelloWorldApp.*;

public class Main {


public static void main(String[] args) {
try{

ORB orb = ORB.init(args, null);

POA rootpoa =
POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
rootpoa.the_POAManager().activate();

HelloServant helloservant = new HelloServant();


helloservant.setOrb(orb);

org.omg.CORBA.Object ref =
rootpoa.servant_to_reference(helloservant);
Hello href = HelloHelper.narrow(ref);

org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContextExt ncRef =
NamingContextExtHelper.narrow(objRef);

String name = "Hello";


NameComponent path[] = ncRef.to_name( name );
ncRef.rebind(path, href);

System.out.println("HelloWorldServer ready and


waiting ...");

for (;;) {
orb.run();
}
}

catch (Exception e) {
System.err.println("ERROR: " + e);

2
P.O.O (JAVA avancé)

e.printStackTrace(System.out);
}

}
}
5- Le Main du coté Client
package HelloWorldClient;

import org.omg.CORBA.ORB;
import org.omg.CosNaming.*;

import HelloWorldApp.*;

public class Main {

static Hello hello;


public static void main(String args[])
{
try{
ORB orb = ORB.init(args, null);

org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContextExt ncRef =
NamingContextExtHelper.narrow(objRef);
String name = "Hello";
hello = HelloHelper.narrow(ncRef.resolve_str(name));

System.out.println("Obtained a handle on server object:


" + hello);
System.out.println(hello.HelloMessage());

} catch (Exception e) {
System.out.println("ERROR : " + e) ;
e.printStackTrace(System.out);
}
}

}
6- Avant de lancer les deux programmes, on doit démarrer le service ORB depuis une invite de
commande

Et tnameserv -ORBInitialPort 9999


on doit ajouter l’arguments suivant au serveur et client avant de les lancer

-ORBInitialPort 9999
7- En lance les deux programmes

3
P.O.O (JAVA avancé)

Exercice 2
Développer une application client-serveur Corba dans laquelle le serveur offre les services distants
suivant au client :

1. L'addition de deux nombres complexes.


2. La multiplication de deux nombres complexes
3. L'affichage d'un nombre complexe

module ComplexeApp{
struct Complexe{
double re;
double im;
};
interface ComplexeOpr{
Complexe sommeComplexe(in Complexe c1, in Complexe c2);
Complexe produitComplexe(in Complexe c1, in Complexe c2);
string afficheComplexe(in Complexe c);
};
};