Soutenez-nous
Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité de passage
    Homme Profil pro
    Inscrit en
    septembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : septembre 2011
    Messages : 4
    Points : 0
    Points
    0

    Par défaut Redémarrage des services corba

    Bonjour,

    j'utilise l'ORB de sun et le jdk 6, et aimerais savoir comment faire pour que le client puisse invoquer des méthodes sur le même stub après un redémarrage du serveur.

    Un scénario saura sûrement mieux expliquer la chose :

    Soient deux interfaces Hello et Bye avec leurs implémentations respectives HelloImpl et ByeImpl.

    Soit un serveur qui référence deux objets HelloImpl et ByeImpl.

    Démarrage du serveur

    Démarrage du client (les appels de méthodes marchent, c'est normal).

    Arrêt du serveur

    Les appels de méthodes sur les stubs du client ne marchent plus, c'est normal.

    Redémarrage du serveur

    Les appels de méthodes sur les stubs du client ne marchent plus, la connexion est refusée sur le nouveau port attribué au serveur.

    Ma question est la suivant : Peut-on fixer (dans la configuration de l'ORB ou du serveur) le port d'écoute des appels de procédures ?

    Je voudrais ne pas avoir à redemander de nouvelles instances de stubs côté client si la connexion échoue.

    Est-ce possible ?

    Si non, quelle serait la meilleure solution pour obtenir ce comportement ? (nous avons pensé à rajouter une méthode 'isUp()' à nos interfaces, qui précèdera chaque appel afin de déterminé l'état de la connexion et si il est nécéssaire d'obtenir un nouveau stub.)

    Merci pour votre aide.

    Pierre.

  2. #2
    Membre éclairé
    Homme Profil pro Julien Enoch
    Architecte technique
    Inscrit en
    septembre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Nom : Homme Julien Enoch
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2006
    Messages : 219
    Points : 308
    Points
    308

    Par défaut

    Bonjour,

    Il faut effectivement fixer le port d'écoute du serveur avec l'option -ORBInitialPort <num_port>.

    Mais il faut aussi utiliser pour le serveur un POA configuré avec les politiques LifespanPolicy = PERSISTENT et IdAssignmentPolicy = USER_ID
    Ainsi l'IOR créé sera toujours le même, à chaque démarrage du serveur. Et le client pourra réutiliser son stub créé à partir de cet IOR, même si le serveur redémarre.

    Voici un exemple de code pour configurer le POA:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    // initialisation de l'ORB
    org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);
    
    // récupération du rootPOA
    org.omg.PortableServer.POA rootPOA = org.omg.PortableServer.POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
    
    // création des politiques du POA persistant
    org.omg.CORBA.Policy[] policies = {
       rootPOA.create_lifespan_policy(org.omg.PortableServer.LifespanPolicyValue.PERSISTENT),
       rootPOA.create_id_assignment_policy(org.omg.PortableServer.IdAssignmentPolicyValue.USER_ID)
    };
    
    // création du POA persistent
    org.omg.PortableServer.POA myPOA = rootPOA.create_POA( "persistentPOA", rootPOA.the_POAManager(), policies );
    
    // création du servant de mon objet CORBA
    // NOTE: ce servant doit ré-implémenter l'opération _default_POA() pour retourner myPOA.
    HelloImpl helloServant = new HelloImpl(myPOA);
    
    // création d'un identifiant unique pour l'objet CORBA
    byte[] servantId = "Hello".getBytes();
    
    // activation du servant avec l'ID sur myPOA
    myPOA.activate_object_with_id(servantId, helloServant);
    
    // activation du POA manager
    rootPOA.the_POAManager().activate();
    
    // récupération de l'objet CORBA pour donner au client
    Hello h = myPOA.servant_to_reference(helloServant);

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •