Exposé du problème
Il arrive souvent dans le web que deux personnes souhaitent modifier une même donnée au même moment, ou bien qu'une personne travaille sur une version qui n'est plus à jour (car modifiée entre temps).
Dans Copix, cette problématique est gérée pour vous de façon transparente et automatique !
Uniquement pour les DAO "déclarées"
Comme vous le savez, Copix est capable de vous fournir des DAO automatiques en inspectant la base de données.
Toutefois, la fonctionnalité de concurrence d'accès ne peut pas réellement être détectée, c'est pourquoi vous devrez créer un fichier de définition pour votre DAO.
Rassurez vous, rien de compliqué !
Le fichier en question
Pour notre exemple, nous allons simplement inspecter une DAO fournie avec Copix dans le module copixtest?, en particulier le fichier project/modules/public/standard/copixtest/resources/copixtestmain.dao.xml
Ce fichier fait partie du jeu de test que nous lançons régulièrement avant chaque livraison de Copix pour nous assurer que nous vous livrons un produit avec le moins de bugs possible.
Mais allons à la partie qui nous intéresse :
<property name="version_test"
caption="version"
type="version"
/>
Grâce à cet élément, nous indiquons à Copix de se servir du champ "version_test" pour vérifier que nous travaillons bien sur le dernier enregistrement disponible en cas d'update.
Un petit script pour tester la concurrence d'accès
$dao = _ioDAO ('copixtest|copixtestmain'); $record = $dao->get ($this->_firstID); $record2 = clone ($record);//on fait une copie de l'objet $record->titre_test = 'Titre modifié'; $dao->update ($record);//record est modifié, record2 ne corresponds donc plus à la dernière version de l'enregistrement. //Nous allons essayer de modifier une nouvelle fois l'élément à partir de cette version non à jour de l'enregistrement, et cela va échouer :-) try { $dao->update ($record2);//record2 n'est pas à jour }catch (CopixDAOVersionException $e){ echo "Enregistrement déja modifié, Copix vois tout !"; }
