ThomasRuleEngine
Description générale
Les métadonnées
XWiki possède un ensemble de métadonnées associées à chaque page, commentaire ou encore pièce jointe. On trouvera par exemple associé à chaque page :- Id (String) : identificateur unique de la page
- Space (String) : identificateur de l’espace de la page
- Title (String) : titre de la page
- Created (Date) : date de création de la page
- Creator (String) : login du créateur de la page
- Modified (Date) : date de création de la page
- Modifier (String) : login du dernier utilisateur ayant modifié la page
- Content (String) : contenu de la page (cette donnée est traitée par le WootEngine)
- Version (int) : version de la page
- homePage (boolean) : la page est elle homePage de l’espace
- ...
Difficulté de fusion des métadonnées
Il n’est pas possible de fusionner et de résoudre des conflits de métadonnées avec le moteur du WootEngine (les métadonnées sont représentées sous forme d’XML ; le WootEngine permet de gérer des structure linéaires et non arborescentes…).La règle du Last Writter Win (LWW)
Afin de remédier au problème des métadonnées, nous avons choisi d’utiliser la règle de Thomas. Plus communément appelé la règle du Last Writter Win (LWW), cet algorithme représente un compromis permettant de faire converger la réplication des métadonnées vers un état commun.Modèle de représentation des métadonnées
Ce composant permet de stocker les métadonnées en appliquant directement l’algorithme du LWW. Pour ce faire il utilise un modèle interne permettant de générer/d’appliquer des opérations correspondantes aux modifications des métadonnées effectuées dans XWiki.Application d’opérations
A chaque opération effectuée dans XWiki sur des métadonnées, le composant ThomasRuleEngine va être sollicité pour récupérer l’opération ThomasRuleEngine correspondante. Celle-ci sera appliquée localement et envoyée aux autres sites. Lorsqu’un site reçoit une opération, il l’applique à son modèle ThomasRuleEngine ; la règle du LWW sera alors appliquée : l’opération sera exécutée en fonction des conditions de l’algorithme.Serialisation du modèle interne
L’ensemble des métadonnées stockées dans le modèle interne sont sérialisées dans des fichiers.Modèle interne
Une donnée lorsqu'elle est supprimée ne l'est pas physiquement, c'est un attribut booléen (Tombstone) qui caractérise sont existence. Chaque donnée est représentée par deux éléments devant être fournis par le client du composant voulant gérer une nouvelle métadonnée :- Un identifiant unique
- Une valeur donnée
- Une « tombstone » : un booléen à True si la donnée est supprimée, à False sinon.
- Un premier « timestamp » : date de création de la donnée.
- Un second « timestamp » : date de modification de la donnée.
Les opérations
Il existe trois types d’opérations :- La création (ThomasRuleOpNew)
- L’édition (ThomasRuleOpSet)
- La suppression (ThomasRuleOpDel)
Algorithmes
Création d'une nouvelle opération
Condition de création d’une nouvelle opération en fonction d’un identificateur, d’une valeur et d’un module ThomasRuleEngine :Soit id : identificateur ; val : valeur ; tre : ThomasRuleEngine ; e : tre.get(id) ; Si (val !=null && (e==null || e.isDeleted()) return new ThomasRuleOpNew ; Sinon Si (e!=null) Si (val!=null && !e.isDeleted()) Si (!val.equals(e.getValue()) return new ThomasRuleOpSet ; FinSi Sinon return new ThomasRuleOpDel ; FinSi FinSi FinSi return null ;
Vérification des timestamps
Une opération donnée est appliquée si ses timestamps vérifient certaines conditions :Soit op : ThomasRuleOp ; tre : ThomasRuleEngine ; e : tre.get(op.getIdentificateur()) ; Si (e !=null) Si (e.getTimestampCreation > op.getTimestampCreation) return false ; Sinon Si (e.getTimestampCreation == op.getTimestampCreation) Si (e.getTimestampModif >= op.getTimestampModif) return false; FinSi FinSi FinSi FinSi return true;
Diagramme de composant

Entrées
- getOp : permet de créer un object représentant l’opération ThomasRuleEngine correspondant au couple identificateur/valeur fourni.
- getValue : permet de récupérer la valeur associée à un identificateur donné dans le modèle interne.
Sortie
- applyOp : permet d’appliquer au modèle interne une opération ThomasRuleEngine donnée.
Diagramme de classe

Version 1.14 last modified by Julien MAIRE on 21/02/2008 at 17:14
![[img] [img]](/xwiki/skins/albatross/mimetypes/jpg.png)

Comments: 0