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 :

Gestion des timeout


Sujet :

CORBA

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 19
    Points : 17
    Points
    17
    Par défaut Gestion des timeout
    Salut à tous,

    Je travaille sur un projet dans lequels on envoie des requêtes DII CORBA vers un serveur. Ce que je veux faire, c'est pourvoir gérer un timeout au cas où, par exemple, le serveur est mort ou ce genre de choses, histoire de pas rester sur un appel de fonction.

    J'ai vu que dans l'invocation dynamique, on pouvait faire des appels asynchrones a l'aide de send_deferred. Le seul problème, c'est qu'on est obligé de questionner continuellement l'ORB à l'aide de poll_response pour savoir si une réponse est arrivée, ce qui, dans mon cas, est pénalisant car ca consomme de la charge CPU.

    En lisant la doc de JacORB, j'ai vu qu'on pouvait utiliser la classe Policy pour gérer des temps, comme par exemple dire à l'ORB de délivrer les réponses avant un certain temps (mon timeout out). En revanche, aucune idée de comment il faut utiliser ca...

    Donc si qqun avait deja utilisé ce systeme, ce serait vraiment qu'il me donne qqes billes pour avancer.

    Merci

    Julien

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 125
    Points : 149
    Points
    149
    Par défaut
    Bonjour Julien,

    Effectivement, les Policy permettent de gérer les timeout. L'OMG a ainsi défini 4 timeout policies et certains ORB en on ajouté.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      RelativeRoundtripTimeoutPolicy
      ReplyEndTimePolicy
      RelativeRequestTimeoutPolicy
      RequestEndTimePolicy
    Tout dépend de ce que tu veux faire avec les timeout. Tu peux définir des Policy pour tes appels de fonction mais tu peux aussi utiliser les Policy pour tester si ton serveur est mort ou pas, à l'aide d'un ping.

    En utilisant JacORB tu peux faire un timeout à 3 secondes avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PolicyManager policyManager = PolicyManagerHelper.narrow(      
       orb.resolve_initial_references("ORBPolicyManager"));
    Policy p = new
    org.jacorb.orb.policies.RelativeRoundtripTimeoutPolicy(3L
    * 10000000);
    policyManager.set_policy_overrides(new Policy[]{ p },
                            SetOverrideType.ADD_OVERRIDE);
    Tu peux aussi faire un test avec ping une fois que tu as fixé les policies, pour tester toi même si un serveur est mort. J'ai trouvé le code suivant qui fonctionne avec les policies précédentes:
    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
      CORBA::Object_var newObj = ior->_set_policy_overrides ( policies, CORBA::ADD_OVERRIDE );
      try
        {
          SBase_var newSB = SBase::_narrow ( newObj );
          if ( !CORBA::is_nil ( newSB ) )
    	newSB->Ping();
        }
      catch ( const CORBA::NO_RESPONSE& )
        {
          cout << "ping timed out" << endl;
        &#125;
      catch &#40; CORBA&#58;&#58;Exception& e &#41;
        &#123;
          cout << e;
        &#125;
    Sinon, tout ca est très bien expliqué ici:
    http://www.cs.wustl.edu/~schmidt/PDF/C++-report-col19.pdf


    Cordialement.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    Merci, j'ai juste encore un souci, en ce qui concerne l'erreur qui devrait être renvoyée par l'ORB. Normalement, une exception org.omg.CORBA.TIMEOUT est levée, ce qui n'arrive jamais chez moi.

    Pour info, mon code :
    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
    try
    &#123;
         Policy p = new RelativeRoundtripTimeoutPolicy&#40;1000&#41;;
         PolicyManager policyManager = PolicyManagerHelper.narrow&#40;
              orb.resolve_initial_references&#40;"ORBPolicyManager"&#41;&#41;;
         policyManager.set_policy_overrides&#40;
              new Policy&#91;&#93; &#123; p &#125;,SetOverrideType.ADD_OVERRIDE&#41;;
         requestOnObject.invoke&#40;&#41;;
    &#125;
    catch &#40;Exception e&#41;
    &#123;
         System.out.println&#40;"TO"&#41;;
         e.printStackTrace&#40;&#41;;
    &#125;
    Ce qui est sur, c'est que ma méthode invoke met au moins 15ms pour être exécutée, donc le timeout (qui est ici de 0,1ms) est écoulé alors que je n'entre jamais dans le catch.

    Si qqun a une idee, merci

    Julien

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 125
    Points : 149
    Points
    149
    Par défaut
    Mon exemple avec le ping était justement fait pour lever des exceptions de TIMEOUT. Mais si tu es sur JacORB, le plus simple est d'utiliser les deux timeout policies qui ont été définies depuis la version 1.4.1 et qui lèvent des TIMEOUT exceptions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    jacorb.connection.client.pending_reply_timeout&#58; timeout sur les requêtes
    jacorb.connection.client.idle_timeout&#58; timeout sur les connections
    Tu peux mettre tout ca dans le fichier de config (properties) de JacORB. Il est vrai que tout celà n'est pas tout à fait évident parce qu'il y a les 4 timeout policies de l'OMG et puis après ca, en fonction des implémentations les choses sont plus ou moins conformes. Pour prendre un autre exemple, IONA a ajouté les policies suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      BindingEstablishmentPolicy
      RelativeBindingExclusiveRoundtripTimeoutPolicy
      RelativeBindingExclusiveRequestTimeoutPolicy
      InvocationRetryPolicy
      RelativeConnectionCreationTimeoutPolicy
    La meilleure chose à faire pour ce genre de choses, est de consulter en détail la doc de l'ORB concerné, pour voire ce qu'ils recommandent d'utiliser pour les TIMEOUT. Ainsi, dans le cas de JacORB, le plus simple semble être d'utiliser le fichier de config.

    Bye.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    Il semblerait qu'il y ait un bug dans la distrib 2.2 de JacORB au sujet de cette property particulière (c'est pas de chance pour moi sur ce coup là...)

    http://www.jacorb.org/cgi-bin/bugzil...bug.cgi?id=482

    En attendant des suggestions particulières, je fais voir ce que je peux faire avec leur patch...

    Julien

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 19
    Points : 17
    Points
    17
    Par défaut
    Sur le site de JacORB, on peut trouver la correction du bug :

    http://www.jacorb.org/cgi-bin/cvsweb...-cvsweb-markup

    En revanche, cette correction n'est pas incluse dans la distribution standard. Il faut alors télécharger les sources, les compiler avec Ant après avoir remplacé le fichier incriminé...

    Pour le moment, j'obtiens donc un CORBA_TIMEOUT avec la propriété
    jacorb.connection.client.pending_reply_timeout

    Je mettrai un résolu quand je verrai quand ca marche parfaitement

    Julien

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 125
    Points : 149
    Points
    149
    Par défaut
    Pour le moment, j'obtiens donc un CORBA_TIMEOUT avec la propriété
    jacorb.connection.client.pending_reply_timeout
    C'est déjà ça.


    Je mettrai un résolu quand je verrai quand ca marche parfaitement
    C'est d'accord, et d'ici là, bon courage à toi.

    A bientôt.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. JAAS et gestion des timeouts
    Par kodaa dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 14/03/2011, 15h26
  2. Gestion des timeout
    Par danlyf dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/01/2011, 09h30
  3. [Struts]Gestion des timeout de session
    Par JohnBlatt dans le forum Struts 1
    Réponses: 3
    Dernier message: 13/12/2004, 14h49
  4. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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