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 :
Par ailleurs, on vérifie le nombre de requêtes pouvant être lancées simultanément, d'une part en fonction du paramétrage réalisé, et d'autre part en fonction du nombre de processus batch autorisés par la licence.
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 :
Il est à noter qu'outre la fermeture du fichier de trace et la mise à jour des fichiers relatifs aux lancements par fichier, la fin de tâche active la tâche suivante d'un groupe s'il n'y a pas eu d'erreur, et passe les tâches suivantes dans l'état avorté sinon.
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 time-out. 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. Prenons un 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. 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é : X3, PAYE, GX par exemple. 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) |