User Tools

Site Tools


wiki:epims4_1m1:developer:epcorearchivage

Table of Contents

Archivage

Services

On fait apparaître au niveau d'eP-Core la notion d’archivage. Il existe un repository, PIMS_ARCHIVE, dédié à l’archivage, un champ archived, est ajouté dans la table acquisitions_result et les études ont un état qui peut être ‘archivable’ ou ‘archived’. Enfin des services permettent d’archiver certaines données.

C'est le service IArchiveManager qui gère la gestion des différents archivages. De manière générale, l'archivage d'une étude consiste en

  o recréer l’arborescence depuis PIMS_ROOT jusqu’au répertoire de l’étude sous PIMS_ARCHIVE
  o déplacer récursivement depuis le répertoire de l’étude tous les fichiers dans le répertoire correspondant sous PIMS_ARCHIVE
  o copier un fichier texte standard, en mettant à jour la date, dans le répertoire (vide) de l’étude
  o changer l’état de l’étude dans la base de données à ‘archived’
  o positionner le champs ‘archived’, dans la base de données, des acquisitions associées à l’étude

Pour les acquisitions de contrôles, l'archivage consiste en

  o recréer l’arborescence depuis PIMS_ROOT jusqu’au répertoire de l’acquisition sous PIMS_ARCHIVE
  o déplacer l’acquisition dans le répertoire créé sous PIMS_ARCHIVE
  o positionner le champ archived, dans la base de données.

L’archivage peut être long puisqu’il consiste en la copie de données pouvant représenter plusieurs GO. C’est pourquoi, l'archivage est fait par un thread indépendant.

ArchiveManager

Quartz

Quartz est une librairie qui permet de gérer des « jobs » et de les programmer afin qu’ils soient exécuter à un moment précis, de manière récursive ou non. L’opération que l’on souhaite exécuter est défini dans une classe implémentant l’interface Job. On définit par ailleurs un Trigger qui s’activera à une certaine date/heure (et qui pourra ensuite se déclencher régulièrement), enfin, on spécifie à la classe Scheduler l’association Job-Trigger ou plus exactement JobDetail-Trigger. La classe JobDetail contenant non seulement la classe Job a exécuter mais également, un identifiant, un groupe d’appartenance et un espace permettant de partager des données avec les instances de Job. Lorsque le Trigger se déclenche, le Job qui lui est associé est exécuté.

Les Job sont exécutés dans des threads, une instance de Job est créée à chaque exécution, ils peuvent lever des exceptions, de type JobExecutionException.

Un autre fichier de propriété quartz.properties est présent sous ../resources/main. Ce fichier est utilisé par Quartz et qui est utilisé pour la gestion des archivages (les opérations sont executées dans des thread).

ArchiveManager

D’une manière plus générale, une classe gère toute la partie archivage, de la définition du répertoire d’archivage à l’archivage proprement dit. Toute les références à l’archivage sont ainsi regroupées en une seule classe. Cette classe, ArchiveManager, utilise Quartz pour l’exécution de l’archivage, opération qui peut être longue et qui doit donc être exécuté dans un thread. L’utilisation de Quartz, permet également aux opérations d’archivage de lever des exceptions en cas d’erreur.

Un autre intérêt de cette définition est qu’il est possible à tout moment de connaître l’ensemble des opération en cours. On pourrait même conserver un historique sur les X derniers archivages.

Figure : Diagramme de classes - Gestion de l’archivage

Le diagramme de classes ci-dessus représente de façon grossière les classes définit dans le projet Quartz, en jaune, ainsi que les classes spécifique à eP-Core ArchiveManager et ArchiveXXJob. La classe ArchiveManager, qui est un singleton, masque l’utilisation du package Quartz. C’est elle qui crée et démarre le Scheduler. Elle s’enregistre également auprès du Scheduler afin d’être notifiée des évènements relatifs aux Job.

L’utilisateur (développeur) fait appel à l’ArchiveManager lorsqu’il souhaite archiver des acquisitions, dans le cadre d’une étude ou d’un groupe de contrôle ; le Job approprié est alors créé et l’ArchiveManager dédie au Scheduler la gestion de cette opération. L’archivage est exécuté dans un thread à part, créé par le Scheduler. Il est possible d’interroger l’ArchiveManager à tout moment sur l’état de l’archivage : en cours, terminé, en erreur.

Le diagramme de séquence ci-après reprend le scénario d’archivage d’une étude.

Le diagramme de classes ci-dessus représente de façon grossière les classes définit dans le projet Quartz, en jaune, ainsi que les classes spécifique à eP-Core ArchiveManager et ArchiveXXJob. La classe ArchiveManager, qui est un singleton, masque l’utilisation du package Quartz. C’est elle qui crée et démarre le Scheduler. Elle s’enregistre également auprès du Scheduler afin d’être notifiée des évènements relatifs aux Job.

L’utilisateur (développeur) fait appel à l’ArchiveManager lorsqu’il souhaite archiver des acquisitions, dans le cadre d’une étude ou d’un groupe de contrôle ; le Job approprié est alors créé et l’ArchiveManager dédie au Scheduler la gestion de cette opération. L’archivage est exécuté dans un thread à part, créé par le Scheduler. Il est possible d’interroger l’ArchiveManager à tout moment sur l’état de l’archivage : en cours, terminé, en erreur.

Le diagramme de séquence ci-après reprend le scénario d’archivage d’une étude.

Figure : Diagramme de séquence - Archivage d’une étude





(Continuez vers la suite de la documentation ⇒ epcorerunrobot)

wiki/epims4_1m1/developer/epcorearchivage.txt · Last modified: 2008/10/02 10:21 (external edit)