Implantation du serveur
1- Actions de base
Importation des packages utiles
// Package contenant les talons ("stubs").
import HelloApp.*;
// Importation du service de nommage.
import org.omg.CosNaming.*;
// Package contenant les exceptions lancées par le service de nommage.
import org.omg.CosNaming.NamingContextPackage.*;
// Classes necessaires à toute application CORBA.
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
import java.util.Properties;
Déclaration de la classe du serveur,
méthode
main, gestion des exceptions système
public class HelloServer {
// Place de la méthode main.
public static void main(String args[]) {
// Les fonctionnalités du main sont encadrées par
// un bloc try-catch qui lance et récupère les exceptions
// gérées par CORBA en cas de problème durant une invocation
// de méthode.
try {
// Code de la méthode de HelloServer (voir chapitre suivant).
}
catch(Exception e) {
System.err.println("ERROR: " + e);
e.printStackTrace(System.out);
}
}
}
2- Création de l'objet ORB et gestion de
l'objet
applicatif servant
Chaque serveur crée une instance locale
d'ORB
et un squelette
// Instancie et initialise l'ORB
ORB orb = ORB.init(args, null);
// obtention d'une référence sur le POA racine
// un adapteur d'objet est un mécanisme qui connecte une requête
// (utilisant une référence à un object) avec le code du service requis.
POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
// activation du gestionnaire de POA qui devient prêt à traiter une requête
rootpoa.the_POAManager().activate();
// Intancie le servant (l'objet requis) et l'enregistre auprès de l'ORB
// Le servant est une instance de la classe HelloImpl
// qui hérite de l'adaptateur d'objets portables sur différents ORB(classe HelloPOA)
HelloImpl helloImpl = new HelloImpl();
helloImpl.setORB(orb);
// obtention d'une référence sur l'objet servant
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(HelloImpl);
// la méthode narrow "caste" la référence à l'objet CORBA obtenue
// en une référence dans son type propre
Hello href = HelloHelper.narrow(ref);
// Obtention d'une référence générique pour le service de nommage
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
// L'objet obtenu est un objet CORBA générique. Il est converti dans
// son type propre grâce à la classe HelloHelper générée par le compilateur
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// création du nom symbolique de l'objet servant
String nom = "Hello";
NameComponent path[] = ncRef.to_name(nom);
// Lier la référence de l'objet servant (instance de HelloImpl) à son nom symbolique
ncRef.rebind(path, hRef);
System.out.println(" HelloServer est prêt et attend une invocation de méthode");
// mise en attente des invocations client
orb.run();
}
3- Définition de la classe HelloServant
// Package contenant les talons ("stubs").
import HelloApp.*;
// Importation du service de nommage.
import org.omg.CosNaming.*;
// Package contenant les exceptions lancées par le service de nommage.
import org.omg.CosNaming.NamingContextPackage.*;
// Classes necessaires à toute application CORBA.
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
import java.util.Properties;
class HelloImpl extends HelloPOA{
private ORB orb;
public void setORB(ORB orb){
this.orb = orb;
}
// Implantation des méthodes de l'interface
public String sayHello() {
return "\nHello World!!\n";
}
// arrêt immédiat de l'ORB
public void shutdown(){
orb.shutdown(false);
}
}