===== Cache pour les objets Analysis ===== ==== Spécifications ==== L'objectif est de maintenir la liste des ''Analysis'' non seulement lors de l'exécution d'eP-Back mais également d'une exécution sur l'autre. Ceci permet de faire un refresh light afin de ne lire que les nouvelles acquisitions ..... D'un point de vue techno, le choix d'XStream a été fait. Plutot que de gérer le cache d'une liste, nous avons choisi de maintenir un cache sur les ''Analysis'' elles-mêmes. ( En effet, le cache de la liste oblige à faire automatiquement et/ou manuellement des refresh de la liste relativement souvent : dès qu'une nouvelle acquisition a été réalisée sur l'instrument par exemple .... ) \\ Une **configuration** est une association instrument, donc type de format, et répertoire source (entre autres... voir chapitre [[epbackconfig]]). \\ Lors de l'accès à une configuration donnée, le DataFormat associé doit permettre d'obtenir la liste des ''Analysis'' pour le répertoire source spécifié. Ce sont donc aux implémentations de DataFormat (ou aux factory qu'ils utilisent ) de s'assurer que les ''Analysis'' qu'ils référencent ne sont pas dans le cache avant de les créer effectivement. Pour cela, ils font appel à un gestionnaire de cache qui permet de récupérer les ''Analysis'' qui ont déjà été créées. Par conséquent, seules les ''Analysis'' n'ayant jamais été accédées sont créées. Le gestionnaire de cache enregistre les caractéristiques des ''Analysis'' de chaque configuration dans un fichier séparé. Si l'on souhaite un rafraîchissement complet, il suffit de supprimer le fichier cache associé à la configuration avant l'ouverture d'eP-Back. Le gestionnaire de cache (CacheManager) gère une liste d'''Analysis'' pour chaque configuration. Lors du premier accès à une configurations, le CacheManager crée son cache à partir du fichier correspondant à la configuration. Par la suite, il doit permettre une mise à jour et la sauvegarde dans le fichier cache de cette liste. La mise à jour comprend l'ajout de nouvelles acquisitions mais également la suppression des acquisitions qui ont été supprimées physiquement .... Il a été choisi de sauvegarder les changements dans le fichier "cache" lors d'un changement de configuration et à la fin de l'application. ==== Implem ==== {{ epb_model.png }} ** Architecture globale de eP-Back** Modification de l'interface ''Analysis'' pour que toutes les informations soient présentes (la sérialisation/désérialisation d'un objet ''Analysis'' permet donc de conserver l'ensemble des infos nécessaire). Deux propriétés sont exclus lors de la sauvegarde des objets ''Analysis'' dans le fichier cache : le DataFormat (présent dans les implémentations de ''Analysis'') et les fichiers associés. Néanmoins, les fichiers attachés sont recalculés une seule fois lors du premier accès à cette propriété. L'interface DataFormat n'est pas modifié, par contre les implémentations utilisent un IFactory. FIXME: A mettre au niveau de l'interface ?! Une implémentation abstraite de IFactory utilise, dans un premier temps, le cache pour récupérer les ''Analysis'' et fait ensuite appel si nécessaire à la méthode abstraite createAnalysis (spécifique au format des données). Le gestionnaire de cache gère une Map par configuration, cette Map étant référencée par le nom de la configuration. Chaque Map, contient une liste d'''Analysis'' par nom de fichier résultat d'acquisition. Le nom de fichier résultat d'acquisition est absolue. Dans le cas où le répertoire source associé à la configuration change de path, le fichier cache devra être recréé. {{ epb_cachemgmt.jpg }} ** Changement de configuration et mise a jour du cache ** FIXME: Pour le noter quelque part pour le moment : Lors de la création des objets ''Analysis'' depuis le fichier cache, on utilise XStream. La propriété DataFormat n'a pas été sauvegardé (positionnée comme transiant) et est par conséquent nulle ! Ce qui pose problème lors de l'exécution de certaine méthode ! **Pour le moment, mais à revoir !!**; les implémentations d'''Analysis'' (nécessitant que cette propriété soit positionnée) doivent implémenter la méthode ''setDataFormat''. Lorsque les objets ''Analysis'' sont retournés par le CacheManager, la classe AbstractCacheFactory vérifie (en utilisant l'introspection) que la méthode existe et positionne la valeur dans l'affirmative. **Le problème** est que cette méthode est appelé à chaque fois que l'on accède à l'analyse dans le cache et non pas QUE la première fois que l'objet est créé à partir du fichier !!! \\ \\ \\ ---- **(Continuez vers la suite de la documentation => [[.:epbackanalysis]])**