IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

CORBA Discussion :

Redémarrage des services corba


Sujet :

CORBA

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 4
    Points : 5
    Points
    5
    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 averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2006
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 219
    Points : 302
    Points
    302
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);

Discussions similaires

  1. Réaliser des services bancaires à distance avec CORBA, en Java
    Par savyerm dans le forum Développement Web en Java
    Réponses: 3
    Dernier message: 10/09/2012, 20h02
  2. [WebServices] consommer des services web ?
    Par Nycos62 dans le forum Services Web
    Réponses: 3
    Dernier message: 12/04/2005, 13h13
  3. Optimisation -> choix des services à activer
    Par infotron dans le forum Mandriva / Mageia
    Réponses: 20
    Dernier message: 25/05/2004, 12h57
  4. Obtenir le nom des services qui tournent ...
    Par vbcasimir dans le forum Administration système
    Réponses: 4
    Dernier message: 21/01/2004, 17h32
  5. Quel est l'intérêt des Services Web ??
    Par silvermoon dans le forum Débats sur le développement - Le Best Of
    Réponses: 19
    Dernier message: 12/02/2003, 22h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo