Le serveur batch intégré au progiciel permet de lancer en arrière plan, sur le serveur d'application :
Le démarrage du serveur batch peut être fait directement depuis le progiciel, mais également par une commande directement depuis le système.
Une tâche de surveillance permet de visualiser les tâches quel que soit leur état (en attente, en cours, terminé), de modifier les paramètres de lancement si elles n'ont pas démarré, de les arrêter lorsqu'elles tournent, ou de visualiser le fichier de trace lorsqu'elles sont terminées.
La soumission de tâches pour exécution via le serveur de batch peut se faire de différentes façons :
Les schémas ci-dessous décrivent la cinématique de fonctionnement du serveur batch. Les losanges figurent des tests logiques, les boites jaunes des actions simples, les boîtes vertes des actions plus complexes décrites dans un autre schéma. Le titre de chaque schéma est donné dans un carré bleu. Enfin, les boîtes rouges figurent une action terminale.
Le serveur est un processus ADONIX fonctionnant sur un dossier SERVX3 dédié. Il utilise un ensemble de tables se trouvant dans le dossier superviseur (et de ce fait visibles par l'ensemble des dossiers). Un seul processus serveur tourne à un moment donné. Le lancement de la tâche serveur se fait selon le processus suivant :
Une fois les vérifications réalisées et les initialisations faites, des fichiers sont mis en place dans des sous-répertoires du répertoire SERVX3 :
De plus, le nombre de requêtes qui peuvent être exécutées simultanément est vérifié, selon les paramètres du serveur batch définies.
La boucle principale de fonctionnement du serveur batch est résumée ci-dessous :
Il est à noter que la présence d'un fichier kill dans le répertoire FIL du dossier SERVX3 provoque l'arrêt de toutes les tâches batch encore en cours, et la présence d'un fichier stop dans ce même répertoire provoque l'arrêt du serveur. Si on veut arrêter le serveur batch en arrêtant toutes les requêtes, il faut placer ces deux fichiers dans le répertoire, en commençant par le premier, mais de façon rapprochée (dans un délai de 2 secondes), afin que le serveur commence par arrêter les tâches, puis s'arrête.
Les tâches à exécuter sont recherchées dans l'ordre chronologique croissant : la plus prioritaire est la plus ancienne, dès lors que le retard admissible au lancement (tel qu'il est défini, en heures, dans la fiche tâche), n'est pas dépassé. Il est à noter à ce propos que les contraintes horaires données par ailleurs définissent une heure de lancement programmée pour la tâche. Cf. le chapitre concernant la >gestion des contraintes horaires ci-après.
Il est à noter qu'un délai « de traitement » permet de définir un délai au bout duquel le serveur s'active périodiquement pour traiter les nouvelles requêtes arrivant (un délai compris entre 30 secondes et une minute est souvent raisonnable, sachant que toutes les 2 secondes s'exécute un traitement de polling répondant aux sollicitations des processus qui interrogent le serveur pour vérifier qu'il est toujours vivant.
Le lancement d'une requête se fait ainsi que le montre le schéma ci-dessous :
Sur le dossier SERVX3, on lance un processus ADONIX sur le bon dossier, et on récupère le numéro de processus pour mettre à jour les informations correspondantes. Si la requête a été soumise par fichier, on met à jour les fichiers correspondants.
Sur le dossier cible, l'exécution du processus associé à la requête commence par ouvrir la trace, vérifier les contraintes d'exécution (est-on en mono-utilisateur, l'utilisateur a-t-il toujours les droits d'exécution ?). Puis on lance le traitement ou le script, et on exécute le traitement de fin de tâche :
Une fin de tâche conduit non seulement à l’ouverture du fichier trace et à la mise à jour des fichiers liés à l’exécution, par fichier, mais aussi à l’activation de la tâche suivante sur un groupe si aucune erreur ne s’est produite ; dans le cas inverse, les tâches suivantes sont annulées.
Les traitements complémentaires non décrits ci-dessus concernent tout d'abord le polling (on efface un fichier stat dans le sous-répertoire FIL du dossier SERVX3, s'il a été créé par une tâche désirant tester que le serveur est toujours vivant), et le traitement des requêtes en temps-mort. Il est à noter qu'un délai plus important que le premier délai de traitement peut être défini pour éviter le test des requêtes pour vérifier si elles ont dépassé le délai imparti. Ce traitement étant lourd, on peut proposer un délai de l'ordre de 5 minutes par exemple (ceci suppose que l'on admette un dépassement d'au plus 5 minutes du délai maximum autorisé pour cette tâche) :
La mise à jour de la liste des requêtes peut être faite par l'intermédiaire de fichiers externes (c'est la boîte lecture des fichiers de soumission de requête indiquée dans la boucle principale du serveur). Ce traitement est décrit par le schéma ci-dessous :
Enfin, le dernier traitement présent dans la boucle d'exécution du serveur concerne le traitement des abonnements. Il est décrit ci-dessous :
Il est possible de définir des contraintes horaires pour le lancement d'une tâche ou d'un groupe de tâches. Ces contraintes sont considérées uniquement pour le lancement de la tâche. Il s'agit, par exemple :
Les contraintes horaires sont définies par une table dédiée commune à tous les dossiers, et permettant de définir des horaires pour les jours ouvrés et des horaires différents pour les jours fériés, etc. Un code de contrainte horaire peut être affecté à une tâche, mais également à un groupe de tâches. Il est important de noter les règles suivantes :
Il est à noter que les tables concernées sont toutes situées dans le dossier superviseur, ce dossier pouvant prendre des noms divers selon le produit installé : par exemple X3, PAYE ou GX. Elles sont donc communes à tous les dossiers.
Table | Intitulé Table |
ABATABT [ABA] | Serveur batch (abonnements) - en-tête |
ABATABTD [ABD] | Serveur batch (abonnements) - lignes |
ABATCAL [ABC] | Calendrier d'exclusion |
ABATGRP [ABG] | Serveur batch (groupes) |
ABATHOR [ABH] | Contraintes horaires |
ABATPAR [ABP] | Paramètres du serveur batch |
ABATRQT [ABR] | Requêtes du serveur batch |
ABATTAC [ABT] | Serveur batch (tâches) |