Détection des erreurs à la compilation...
Détection des erreurs à l'exécution...
Rattrapage des erreurs d'exécution...
Tâche Moniteur...
Journalisation des modifications des entrepôts persistants...
Archivage des fichiers...
Procédure de reprise à partir des journaux...
Dans un langage classique, la fiabilité d'un programme est directement liée à l'attention des informaticiens lors de l'écriture et du test de leur programmes. Nous pouvons affirmer qu'aucun programme conséquent n'est exempt d'erreurs qui, un jour ou l'autre, provoqueront un dysfonctionnement. En plus des erreurs propres au programme, il y a :
Afin d'alléger grandement ces efforts consentis et d'offrir à chaque application en technologie Up ! Virtual Technical Machine une sûreté de fonctionnement de prêt de 100 %, Up ! Application System comporte des mécanismes spécifiques qui ne nécessitent aucun codage particulier.
Si le modèle de données comporte des contraintes d'intégrité, ce qui est fortement recommandé, Up ! Compiler ajoute au code généré du code visant à s'assurer que celles-ci ne sont pas violées. Il faut toutefois générer le programme en activant l'option contrainte.
Pour plus de précisions, veuillez vous référer à la fiche La cohérence du programme.
Revenir en haut de la page...
De plus, il vous est possible de créer des exceptions applicatives visant à signaler des dysfonctionnements d'ordre fonctionnel. Ceci s'effectue au moyen de l'instruction Exception.
Revenir en haut de la page...
Entre chaque partie d'un programme, il est fortement recommandé de rattraper les exceptions au moyen de l'instruction AttraperException et de traiter au mieux ces situations de dysfonctionnement. Dans le pire des cas, si l'exception est renvoyée ou si elle n'est jamais rattrapée par l'application, l'exception est rattrapée par Up ! Virtual Technical Machine et le programme s'arrête en douceur.
Revenir en haut de la page...
Afin de remédier à ces problèmes, il est possible d'activer la tâche Moniteur de Up ! Object Management System dont l'objet est de s'assurer du bon fonctionnement des autres tâches. Cela s'effectue en fixant une période de vérification non nulle au paramètre d'exécution periodemoniteur. Quand une tâche subit un arrêt brutal parce que le dysfonctionnement est suffisamment grave pour qu'il n'y ait pas eu d'arrêt en douceur, la tâche moniteur se substitue à celle-ci et exécute la procédure d'urgence suivante :
Afin d'offrir un minimum de performances, Up ! Object Management System utilise au maximum le volume de mémoire Ram qui est attribuée au programme, ceci grâce à son ramasse-miettes. De ce fait, pour les objets les plus récemment modifiés, il y a des différences entre les valeurs de leurs propriétés lues en mémoire ou relues depuis un fichier de persistance.
Sans autre précaution, si un arrêt brutal survient, le programme une fois relancé exploitera des données qui seront corrompues puisque certaines modifications d'objets auront été déposées sur disque et pas d'autres. Ceci est particulièrement dommageable pour les objets transactionnels.
Up ! Object Management System comporte alors un mécanisme optionnel de journalisation des modifications apportées aux objets. Il est activé si le paramètre d'exécution fichierjournal est renseigné. Ce dernier désigne un nom de fichier journal générique. A chaque modification d'un objet, lorsque celle-ci est effective, i.e. lorsque le verrou en écriture est levé, Up ! Object Management System écrit en asynchrone, via la tâche EnregistrementJournal, un enregistrement dans le fichier journal permettant de répercuter la modification en cas d'arrêt brutal. En cas de validation ou d'invalidation d'une transaction, l'écriture est synchrone, i.e. la tâche opération sur la transaction est suspendue tant que l'écriture n'a pas eu lieu.
Up ! Object Management System utilise autant de fichiers journaux que cela est spécifié par le paramètre d'exécution nbfichiersjournaux. Le minimum est de deux fichiers journaux. Un fichier journal est rempli dans la limite de la valeur du paramètre d'exécution maxfichierjournal, exprimée en mégaoctets. Quand un fichier journal est plein, Up ! Object Management System le ferme et passe au suivant. S'il n'y a pas de suivant, il reprend au premier fichier journal.
Périodiquement, selon la valeur du paramètre d'exécution periodesynchronisation, à l'occasion d'un changement de fichier journal ou suite à un appel à la procédure SynchroniserEntrepotsEtFichierJournal, la tâche EnregistrementJournal fait synchroniser le contenu des mémoires cache de chaque entrepôt avec leur fichier de persistance. Cela est réalisé par les tâches FichierEchange si elles existent, sinon cela est directement effectué par la tâche EnregistrementJournal. Pendant ce court moment, aucune tâche ne peut modifier ou consulter un objet.
Revenir en haut de la page...
Up ! Object Management System comporte un mécanisme d'archivage automatique de fichiers intègres sans qu'il soit nécessaire d'arrêter le programme. Ceci est particulièrement important pour les serveurs d'objets devant être disponibles prêt de 100 % du temps.
La tâche Archive est activée si le paramètre d'exécution archiverfichier est renseigné. Ce dernier désigne le nom d'une commande où l'argument NomFichier est un nom de fichier à archiver. A chaque synchronisation entre les mémoires cache de chaque entrepôt avec leur fichier de persistance, Up ! Object Management System utilise cette commande pour archiver dans l'ordre :
L'entrepôt Système étant le plus critique puisqu'il contient notamment le dictionnaire de données. Il est important que la sauvegarde de son fichier de persistance soit rapide. Il est donc conseillé de ne pas créer un trop grand entrepôt Système.
Revenir en haut de la page...
Si le mécanisme de journalisation des modifications n'est pas activé, il sera possible de le relancer si les fichiers de persistance du programme et des entrepôts sont intègres i.e. s'ils proviennent d'une sauvegarde réalisée suite au dernier arrêt normal du programme.
Dans le pire des cas, il est nécessaire de supprimer les fichiers de persistance, ce qui fait perdre toutes les données.
Si le mécanisme de journalisation des modifications est activé, Up ! Object Management System cherchera à mettre à jour les fichiers de persistance des entrepôts à partir des fichiers journaux en suivant la procédure suivante :