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 :

Serveur TAO bloqué lors de l'init


Sujet :

CORBA

  1. #1
    Membre éclairé Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Points : 781
    Points
    781
    Par défaut Serveur TAO bloqué lors de l'init
    Bonjour,

    j'ai encore un problème et celui la me pourri la vie!

    donc, pour situer le truc, je cherche a faire une dll qui intègere un serveur TAO. Quand je lance l'initialisation du serveur, j'ai un blocage de l'init sur le orb->run();
    Résultat, le reste de mon appli est figée....
    j'ai bien tenté de threader ce bloc, mais soit je ne fais pas ce thread correctement (c'est fort possible d'ailleurs), soit je passe à coté d'une option ou d'une implémentation spécifique du serveur.
    Dans le cas ou je thread le serveur, j'ai une quasi occupation à 100%... allez comprendre :'(

    le code de mon serveur :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    #include "serveur.h"
    #include "tao/debug.h"
    #include "ace/streams.h"
    #include "ace/Get_Opt.h"
    #include "ace/Read_Buffer.h"
    #include "ace/OS.h"
    #include "ace/SString.h"
    int init(int argc, char* argv[]){
      try {
        // First initialize the ORB, that will remove some arguments...
        CORBA::ORB_var orb =
          CORBA::ORB_init (argc, argv,
                           "" );
        CORBA::Object_var poa_object =
          orb->resolve_initial_references ("RootPOA");
        PortableServer::POA_var poa =
          PortableServer::POA::_narrow (poa_object.in ());
        PortableServer::POAManager_var poa_manager =
          poa->the_POAManager ();
        poa_manager->activate ();
    
        // Create the servant
        Agent_i stock_factory_i;
    
        // Activate it to obtain the object reference
       Agent_var stock_factory =
          stock_factory_i._this ();
    
        // Put the object reference as an IOR string
        CORBA::String_var ior = orb->object_to_string (stock_factory.in ());
        
    	// Print it out!
    	ofstream Sortie;
    	Sortie.open(argv[0]);
        Sortie << ior.in &#40;&#41; << endl;
    	Sortie.close&#40;&#41;;
    cout<<" server avant run"<<endl;
        orb->run &#40;&#41;;
    
        // Destroy the POA, waiting until the destruction terminates
        poa->destroy &#40;1, 1&#41;;
    
        orb->destroy &#40;&#41;;
      &#125;
      catch &#40;CORBA&#58;&#58;Exception &&#41; &#123;
        cerr << "CORBA exception raised!" << endl;
      &#125;
      return 0;
    &#125;;
    le init est appelé ailleurs dans le code par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            serveur CS;
    	char * arg&#91;1&#93;;
    	arg&#91;0&#93;="G&#58;/Virtools.IOR";
    	CS.init&#40;1,arg&#41;;
    a priori, vu le code, ca me semble assez logique que le run soit bloquant (vu le destroy derriere), mais comment faire pour le lancer en background et recupérer la main?

    je tourne sous win2k, VC++ ... et TAO

    merci de votre aide
    Two beer or not two beer. (Shakesbeer)
    Question technique par MP => poubelle!

  2. #2
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 66
    Points : 74
    Points
    74
    Par défaut
    salut

    c est tout a fait normal que ton serveur reste "blocke" sur la methode ORB::run() , l'orb commence a ecouter et en attente de requetes

    module CORBA
    interface ORB
    void run();
    void shutdown(in boolean wait_for_completion);
    boolean work_pending();
    void perform_work();

    mais j'ai peut etre mal compris ta question ?

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 66
    Points : 74
    Points
    74
    Par défaut
    salut

    Que veux tu faire exactement ?
    a+

  4. #4
    Membre éclairé Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Points : 781
    Points
    781
    Par défaut
    Salut,

    Je cherche a faire un serveur qui doit tourner en parallele d'une autre appli (integration d un bus corba dans une dll virtools pour etre precis), donc a priori il me faut threder le serveur non?
    parceque effectivement, il est normal que le run "bloque" l'execution. Mais comment faire alors pour avoir le serveur qui tourne et mon aplli, puisque je dois lancer le serveur de cette appli?

    Apres pas mal de recherche, j'ai reussi a threader mon code serveur, mais il me semble "etrange" de ne pas pouvoir lancer le serveur autrement qu'en faisant un thread qui lance le serveur.
    Il n'y a pas une option qui permettrait de le lancer d'une facon un peu plus propre?

    Merci de ton aide
    Two beer or not two beer. (Shakesbeer)
    Question technique par MP => poubelle!

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 66
    Points : 74
    Points
    74
    Par défaut
    si ton serveur est independant de ton appli , je vois pas l'interet ( je connais pas toute ta problematique ... ) de le threader autant en faire un processus independant , si effectivement , ton appli utilise ce serveur par exemple pour metttre a jour de donnees ou faire autre chose effectivement tu peux threader ce serveur .... pour pourvoir communiquer avec ton appli via un pipe ou autre chose .....

    je pense que ca serait interessant de montrer ton exemple pour tous les
    FANS de corba

  6. #6
    Membre éclairé Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Points : 781
    Points
    781
    Par défaut
    Je t explique le truc, je sens que je vais me faire reperer par mes profs moi ..

    je cherche a faire communiquer 2 appli, l'une graphique virtools (dll cpp), et l'autre qui concerne la partie "intelligence du systeme" (java et jacorb)

    j ai un serveur et un client de chaque cote pour permttre les echanges(la aussi y a pt a redire ? pas possible d ouvrir la com dans les 2 sens ?)

    Et donc, en gros, cote graphique, le systeme attend les mises a jours du systeme de calculs de deplacements et mets ces info dans une pile de donnees. Et suivant les besoins, le systeme graphique affiche ces donnees a partr de la pile.

    Donc, il faut que le systeme graphique (virtools) et le serveur corba puisse communiquer facilement, et tournent simultanement.

    Donc, pas vraiment d'autre solutions que le thread a priori?

    pour montrer mon exemple, pq pas, mais ca me parait difficile autrement que sur le papier, et de plus, je sais meme pas si je le peux
    Two beer or not two beer. (Shakesbeer)
    Question technique par MP => poubelle!

  7. #7
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 66
    Points : 74
    Points
    74
    Par défaut
    je pense pas que ca pose un probleme qu'un serveur puisse aussi etre un client

    a+

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/05/2006, 09h02
  2. Réponses: 12
    Dernier message: 21/02/2006, 11h47
  3. Kill lors d'un init 6
    Par njeunehomme dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 30/11/2005, 15h53
  4. [socket] Bloqué lors de la lecture
    Par oiffrig dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 01/04/2005, 10h04
  5. Réponses: 1
    Dernier message: 23/02/2004, 12h58

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