Accueil du site > Les articles > Un gestionnaire de travaux batchs généreux (pour iSeries)
Version à imprimer Enregistrer au format PDF

Un gestionnaire de travaux batchs généreux (pour iSeries)

vendredi 6 janvier 2006, par Grégory Jarrige Visites  19126

Le module présenté dans cet article est le résultat d’un travail collaboratif entre plusieurs personnes, dont David Malle et moi même. La première version de cet outil, développée il y a quelques années, ne me donnait pas complètement satisfaction, et j’avais demandé à David de m’apporter son expertise et ses idées, de manière à le rendre plus paramétrable. David était allé bien au delà de mes attentes, en prévoyant une solution encore plus puissante et paramétrable que ce que j’avais envisagé. Il ne le savait sans doute pas avant que j’écrive cet article, mais je l’ai souvent béni par la suite pour sa clairvoyance, car je dois reconnaître que sa solution m’a rendu, et continue de me rendre, de grands services.


Quand on développe un logiciel quel qu’il soit, on a 2 solutions :
- soit on démarre de zéro, et dans ce cas cet article peut vous intéresser
- soit on démarre en s’appuyant sur un certain nombre de briques existantes telles que des outils de paramétrage des travaux, des menus, etc... Dans ce cas cet article vous intéressera peut être moins, mais vous pouvez quand même y jeter un oeil, peut être y pêcherez-vous quelques bonnes idées pour améliorer vos propres outils.

Donc pour en revenir à notre logiciel, il est primordial de lui adjoindre les briques applicatives qui lui permettront de fonctionner de manière paramétrable. L’une de ces briques est un gestionnaire de travaux batchs.

Ce gestionnaire de travaux pourra revêtir différentes formes et fonctionnalités, mais pour être opérationnel il doit vous offrir au moins les éléments suivants :

- la possibilité de définir les travaux batchs, avec différents critères de recherche (par nom de travail, par nom de programme, etc...)
- la possibilité de définir la file d’attente de travaux où s’exécutera chacun des travaux définis
- la possibilité de conserver une "trace" des soumissions effectuées
- la possibilité de lancer un travail au choix : en batch (par un SBMJOB) ou en interactif (par un CALL). C’est extrêment pratique notamment pour les opérations de débugage.
- la possibilité de définir le type de log générée par le travail exécuté,
- etc...

L’outil que je vais vous présenter permet de faire tout ça et bien plus encore. Attention : si cet outil permet de standardiser le mode de lancement des travaux en file d’attente, il ne va pas jusqu’à superviser les travaux actifs, avec par exemple un système de reprise après incident, comme j’ai pu le voir dans certaines sociétés. Ce vaste sujet pourra faire l’objet d’autres articles, et on ne peut que vous inviter à nous faire part de vos expériences dans ce domaine.

Donc, notre outil est composé de plusieurs éléments :

- une règle de gestion prénommée SOUMETTRE_JOB
- un fichier de paramétrage des travaux, prénommé PRMBTC, et ses fichiers logiques PRMBTCL1, PRMBTCL2 et PRMBTCL3
- un programme de gestion du fichier PRMBTC prénommé JOBP1S
- un programme de mise à jour du fichier PRMBTC prénommé JOBP2M
- un programme CL prénommé SBMCALL
- un programme Adelia QSVJOB servant à archiver les soumissions de travaux dans un fichier historique

Tous ces éléments se trouvent dans le fichier texte zippé "uti_sbm.zip".

La règle de gestion SOUMETTRE_JOB est accompagnée de beaucoup de commentaires expliquant son fonctionnement et la manière de l’utiliser. Je vous recommande de lire ces informations avec soin. Pour vous donner un aperçu de la manière dont on peut l’utiliser, je vous mets ci-dessous un extrait de la documentation que vous trouverez dans le fichier texte joint à cet article :

- exemple n° 1 (soumission du pgm NMDXXBCL sans paramètres) :
      T_PARAMETRES      = *BLANK
      T_SOUMISSION      = *BLANK
      INSERER_RG SOUMETTRE_JOB(*BLANK;*BLANK;*BLANK;'NMDXXBCL';*BLANK;0;T_PARAMETRES;T_SOUMISSION;*; *NOM_PGM)

- exemple n° 2 : cas utilisant 2 paramètres (le premier est le résultat d'une concaténation de valeurs, le second est un code retour)
        P_PARAM           = *BLANK
        P_PARAM           = W_COD_SOC // W_COD_ETA // W_COD_DEP // W_COD_CDE
        P_COD_RETOUR      = *BLANK
        T_PARAMETRES      = *BLANK
        T_PARAMETRES(1)   = P_PARAM
        T_PARAMETRES(2)   = P_COD_RETOUR
        T_SOUMISSION      = *BLANK
        INSERER_RG SOUMETTRE_JOB(*BLANK;*BLANK;*BLANK;'NMDYYBCL';*BLANK;2;
            T_PARAMETRES;T_SOUMISSION;*;*NOM_PGM)

- exemple n° 3 : cas particulier utilisant 2 paramètres pour le CALL du programme lancé, et 2 paramètres pour le forçage des date et heures de soumission, gérés par l'intermédiaire du tableau T_SOUMISSION.
        P_COD_RETOUR      = *BLANK
        T_PARAMETRES      = *BLANK
        T_PARAMETRES(1)   = W_PARAM
        T_PARAMETRES(2)   = P_COD_RETOUR
        T_SOUMISSION      = *BLANK
        T_SOUMISSION(1,1) = '*SCD_DATE'
        T_SOUMISSION(1,2) = '*CURRENT  '
        T_SOUMISSION(2,1) = '*SCD_TIME'
        T_SOUMISSION(2,2) = W_HEU_SBM
        INSERER_RG SOUMETTRE_JOB(*BLANK;*BLANK;*BLANK;'NMDZZBCL';*BLANK;2;
           T_PARAMETRES;T_SOUMISSION;*;*NOM_PGM)

Les programmes JOBP1S et JOBP2M sont fournis ici à titre d’exemple. Ils sont accompagnés de leur documentation utilisateur. Vous aurez sans doute intérêt à les réécrire selon vos propres normes et standards. Le programme JOBP1S se compose d’une transaction de gestion, et d’une transaction de confirmation de suppression. Le programme JOBP2M se compose d’une transaction de mise à jour et d’une seconde transaction de visualisation. Les programmes ont été "nettoyés" de certaines informations spécifiques au contexte fonctionnel dans lequel ils ont été développés (tels que code société, code dépôt, etc...), afin que vous puissiez vous concentrer sur l’aspect strictement fonctionnel de ce module (ceci explique les trous dans la numérotation des lignes).

Le programme QSVJOB est un petit programme servant à stocker les paramètres de lancement d’un programme dans un fichier d’archivage, le fichier SUIJOB

Un dernier mot concernant la table paramètre SBMJOBPARM qui est utilisée dans le programme JOBP2M pour définir les types de travaux. Cette table est stockée dans un fichier de paramétrage, et permet de définir les types de travaux et leurs files d’attentes de travaux associées (JobQueue). Le contenu de cette table paramètre dépendra bien évidemment de votre contexte applicatif et organisationnel. A titre d’exemple, voici ce qu’elle pourrait contenir.

Code       Libellé  
=========  ==============================                    
JOB_EXPL   Jobs d'exploitation            
JOB_LONG   Jobs longs                    
JOB_NORMAL Jobs normaux (par défaut)        
JOB_NUIT   Jobs de Nuit                                  
JOB_STATJ  Jobq de jour réservée stats    

Comme je l’indiquais précédemment, chacun des types de travaux ci-dessus est associé à une file d’attente de travaux (JobQueue) spécifique, ceci dans le but de permettre une meilleure ventilation des travaux selon leur degré d’urgence. Bien évidemment, comme c’est une table paramètre, vous pouvez la personnaliser à votre convenance. Je n’ai pas jugé utile de vous indiquer ici quelles JobQueue sont associées aux différents types de travaux, ça n’offre pas un grand intérêt.

Vous verrez dans les sources Adelia des appels à des règles de gestion telles que RECUP_DON_PARAM, RECUP_PARM_DON2, EXIST_PARAM, ou encore GUIDE_PARAM. Vous l’aurez sans doute compris, ces règles de gestion, utilisées avec la table paramètre SBMJOBPARM, ont pour but de contrôler l’existence du type de travail dans un fichier de paramètres, ou de récupérer une valeur par défaut (la JobQueue en l’occurrence), ou d’afficher une fenêtre de guide, etc... Je n’ai pas jugé utile de vous fournir le source de ces règles de gestion, qui sont spécifiques à un contexte applicatif et que vous n’aurez aucun mal à écrire selon vos propres standards et besoins.

Voilà, vous savez tout, il ne vous reste plus qu’à étudier le contenu du fichier texte, à récupérer tout ou partie des sources, selon vos besoins, et à les adapter à votre contexte applicatif.

Bonne lecture, et bon courage.

Documents joints