Manuel de référence de programmation du module Transact

© 1997 Benoît GILON
v0.2.1, 9 Juin 1997
Logo de HTMLEdit v3

Table des matières

Objectif du document

Ce document décrit les SWIs qui sont couramment fournis par le module Transact et donc peuvent être utilisés par une application cliente désirant s'interfacer à ce niveau. Notez cependant qu'un autre document décrit l'API C au dessus de Transact et que l'usage de cette dernière est recommandée pour des applications cliente écrites en C.

Généralités

Fonctionalités offertes

Le module Transact permet un accès transactionnel et concurrent de façon uniforme et cohérente à des ressources de données disponible dans l'environement de l'application (aujourd'hui uniquement les fichiers plats sont considérés). Plus de détails à propos des capacités du moteur Transact peuvent être lus dans le document "Gestion transactionnelle pour l'accès à des fichiers plats" qui se trouve dans la même distribution que le docment que vous lisez.
Typiquement, une application cliente désirant apporter des changements à plusieurs fichiers de données RISC OS dans un mode transactionnel procédera comme suit:
  1. Ouvre une session (lors de l'initialisation); Une création de session déclenche automatiquement le début d'une transaction;
  2. Soumet les requêtes de lecture/écriture adhoc (cad telles que prévues par l'API);
  3. Termine la transaction, soit en validant les écritures, soit en abandonnant toute écriture soumise depuis le début de la tranaction. Bien entendu, le module prend soin de ne pas perturber les transactions concurrentes même si elles écrivent dans les mêmes fichiers que la trnsaction courante.
  4. Ferme la session (aussitôt que l'application n'a plus besoin des services Transact).

Conventions d'appel

Détails d'implémentation

L'interface du module Transact pour accéder aux ressources système est basé sur l'utilisation de la librairie partagée CLib d'Acorn. Le module a été généré avec l'aide des outils standard Acorn (CMHG et Acorn C v5.06);
La version courante du module n'utilise pas la fonction de la librairie partagée CLib pour masquer les interruptions. En conséquence il est possible (et cela peux s'avérer dangereux) qu'un SWI Transact soit appelé (par exemple d'une routine de traitement d'interruption) alors que un SWI du module Transact est en cours d'exécution en mode "foreground". Une version ultérieure du module corrigera cette faiblesse en appelant lui même une fonction utilisant l'instruction SWP qui est disponible depuis la sortie de l'ARM3 (pour la gestion des sémaphores). Les SWIs de Transact sont enregistrés auprès de Acorn, vous pouvez donc utiliser sans risque le module Transact en concurrence avec d'autres modules enregistrés ou non.

Que se passe-t-il lorsque le module Transact est tué?

Toutes les sessions ouvertes sont fermées; les transactions actives (en cours) sont abandonnées (rollbacked) et les fichiers de donnée sont rendus disponibles pour toute autre application.

Référencement des fichiers RISC OS

Dès qu'un appel SWI référence un fichier RISC OS, les conventions suivantes s'appliquent: La partie frontale du module exécute le pseudo-code suivant:
Si R1 <> 0 Alors
	Conversion du nom de fichier (ID externe dans R1): GSTransformation;
	Rechercher une entrée correspondante dans la liste des entrées existantes;
	Si trouvé Alors
		Utiliser cet emplacement pour les opérations suivantes.
	Sinon	Create a new entry in the system for this file (never refered to before)
	FinSi
	Si R2 <> 0 Et valid file entry Alors
		*R2 = handle du fichier de données (résultat d'un appel à fopen)
	FinSi
Sinon	/* R1 = 0 */
	Si R2 = 0 Alors
		Erreur sortie "Paramètres invalides"
	FinSi
	Rechercher dans la liste des fichiers déjà répertoriés une entrée avec le même ID interne (*R2);
	Si non trouvé Alors
		Erreur sortie "Objet inconnu"
	FinSi
FinSi
Appliquer cette procédure peut impliquer l'échec pour l'une des raisons suivantes: