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);
}
}