Hello tout le monde,
Je continue avec mes histoires de classe...
Là, c'est la gestion de perte de connexion avec le serveur HFSQL que j'essaye de gérer.
alors avant de passer par des objets, ma manière de gérer la perte de connexion au serveur était la suivante :
dans le code d'init du projet, je mettais :
HSurErreur(MonFic,hErrPerteConnexion,MaProc)
Voici le contenu de MaProc() :
1 2 3 4 5 6
| PROCÉDURE MaProc()
//...
trace("Déconnexion HFSQL")
RENVOYER opFinTraitement |
et du coup ça marchait nickel !!
Fallait juste penser que les HExecuteRequete() ne déclenchent pas le HSurErreur()... donc fallait faire un simple HLit() avant... bref...
Quand le serveur HFSQL revenait, la reconnexion se faisait toute seul !! super !!!
Mais maintenant dans mon autre projet, avec les objets, ça semble une autre histoire !?
Déjà on est d'accord pour dire que tous objets ont leur propre context HFSQL.
En tout cas j'ai rien précisé nul part pour faire l'inverse...
Du coup, la ligne :
HSurErreur(MonFic,hErrPerteConnexion,:MaProc)
je la place dans le constructeur de l'objet ?? j'ai juste ??
et MaProc n'est plus une procédure au projet, mais une méthode de l'objet !!
Bon, ça à l'aire de fonctionner... alors je continue
Dans la méthode de mon objet qui fait appel au serveur HFSQL, si le serveur tombe, l'exception est bien interceptée, cool
Je m'en rends compte grâce au trace() qui me retourne bien "Déconnexion HFSQL".
mais je me rends compte surtout qu'il met fin au traitement de la méthode appelante, et non de la méthode en cours d'exécution !!! oulà j'espère être clair
Et ça c'est pas bon du tout vu que la méthode appelante, est en fait, un thread qui tourne en boucle... bref...
Je suis donc obligé de traité l'exception (en passant par la gestion automatique des erreurs) dans la dite méthode, en plus du HSurErreur() !!??
1 2 3 4
| CAS ERREUR:
trace(ErrorInfo(errComplet))
CAS EXCEPTION:
trace(ExceptionInfo(errComplet)) |
Puis alors là c'est la grosse insulte erreur machin, perte de connexion bidule, ligne, dll, tout le truc quoi...
Bon en tout cas, ça met fin au traitement en cours et non plus celui de l'appelant.
Mais la reconnexion ne se fait plus toute seul, comme précisé plus haut (sans objets) !!
Donc je suis obligé de faire un HReconnect() à chaque fois dans la méthode callback du HSurErreur()
C'est un peu ... compliqué tout ça !!!! et bordellique je trouve !
Y aurait pas moyen de faire plus simple ?
Merci pour votre patience et vos conseils !!
Partager