Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > CORBA
CORBA Forum d'entraide et de discussion sur le développement distribué avec CORBA & les ORB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/08/2011, 11h56   #1
Candidat au titre de Membre du Club
 
Inscription : octobre 2007
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 40
Points : 13
Points : 13
Par défaut variable liberee - CORBA::TRANSIENT

Bonjour,

dans mon application, j'ai besoin d'arreter parfois un processus client sauf que celui-ci partage des donnees via CORBA avec mon serveur.

Quand je parcours ma liste dans le serveur, bien evidemment certaines variable ne sont plus accessible sauf que je ne sais pas quel test utiliser pour les identifier (et nettoyer mon std::vector<corba_var> ).

Recuperer l'exception pour supprimer cet element n'est pas la meilleur facon de faire mais elle fonctionne.
J'ai essayer de verifier avec CORBA::is_nil(corba_var) ou carba_var->_nil() mais il ne detecte pas que l'instance n'est plus disponible.

Si quelqu'un a connait une methode qui m'eviterai de recuperer l'exception ce serait super.

Merci beaucoup
L'elfe d'Azur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 16h26   #2
Membre confirmé
 
Homme Julien Enoch
Architecte technique
Inscription : septembre 2006
Messages : 215
Détails du profil
Informations personnelles :
Nom : Homme Julien Enoch
Âge : 36
Localisation : France

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

Informations forums :
Inscription : septembre 2006
Messages : 215
Points : 291
Points : 291
Bonjour,

Citation:
dans mon application, j'ai besoin d'arreter parfois un processus client sauf que celui-ci partage des donnees via CORBA avec mon serveur.
Quelles sont ces données ?
Si ce ne sont pas des objets CORBA (i.e. implémentation d'une interface définie en IDL) alors le serveur a une copie des données. En effets tout les types basiques, struct, sequence... sont passés par copie du client au serveur.

Citation:
Quand je parcours ma liste dans le serveur, bien evidemment certaines variable ne sont plus accessible sauf que je ne sais pas quel test utiliser pour les identifier (et nettoyer mon std::vector<corba_var> ).
Donc je crois comprendre que ce sont des objets CORBA implémentés par le client. Effectivement, lorsque le client n'est plus là, un appel à ces objets provoque une exception CORBA::TRANSIENT.

Citation:
J'ai essayer de verifier avec CORBA::is_nil(corba_var) ou carba_var->_nil() mais il ne detecte pas que l'instance n'est plus disponible.
Ca ne peut pas marcher. Lorsque le client disparaît, l'objet CORBA qu'a le serveur ne change pas (il ne passe pas à nil). En effet cet objet CORBA n'est qu'un proxy encapsulant l'adresse (IP+port+identifiant) du véritable objet implémentant l'interface IDL.

Citation:
Si quelqu'un a connait une methode qui m'eviterai de recuperer l'exception ce serait super.
Une autre solution est d'appeler CORBA::Object::_non_existent() et de vérifier si ça retourne false (i.e. l'objet existe bien et répond). Mais cette opération peut aussi lever une exception (TRANSIENT, COMM_FAILURE...).
Et rien ne dit que juste après cet appel le client ne va pas s'arrêter...
Donc: toujours récupérer les exceptions lors d'un appel distant !
CorbAddict est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 10h43   #3
Candidat au titre de Membre du Club
 
Inscription : octobre 2007
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 40
Points : 13
Points : 13
Je ne connaissais pas la methode CORBA::Object::_non_existent()

Trouver sur le site de support d'OmniORB
Citation:
Using omniORB4 i get the right behaviour;
_non_existent returns true, if the object
has been deactivated, and i get a transient
exception, if i kill the server.
I do agree, that one of the points of using
_non_existent is to avoid getting an OBJECT_NOT_EXIST
exception, but TRANSIENT and COMM_FAILURE are
ok, since one can not conclude, that an object
does not exist based on inability to reach it.
Donc apparement c'est normal que meme avec cette methode je recupere une exception CORBA::TRANSIENT.

Je vais rester sur mon catch d'exception.

Merci de ton aide
L'elfe d'Azur est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h50.


 
 
 
 
Partenaires

Hébergement Web