Autres//Utilitaires divers - AWS Modernisation du mainframe

AWS Le service de modernisation du mainframe (expérience de l'environnement d'exécution géré) n'est plus ouvert aux nouveaux clients. Pour des fonctionnalités similaires au service de modernisation AWS du mainframe (expérience de l'environnement d'exécution géré), explorez le service de modernisation AWS du mainframe (expérience autogérée). Les clients existants peuvent continuer à utiliser le service normalement. Pour plus d'informations, consultez la section Modification de la disponibilité de la modernisation du AWS mainframe.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Autres//Utilitaires divers

Cette section couvre divers programmes utilitaires, à des fins diverses, qui n'ont pas pu être rattachés à des catégories existantes

Dans les paragraphes suivants, PICTURE il doit être compris comme le PICTURE mot clé COBOL, utilisé pour décrire le type de données et les formats des champs.

CBL_ _NON AND/CBL_OR/CBL_XOR/CBL_EQ/CBL_IMP/CBL

Objectif

Cela concerne la prise en charge des opérations logiques au niveau du bit sur les éléments de données, que l'on trouve dans certains dialectes COBOL (Micro Focus). Veuillez noter que le refactorisation automatique avec AWS Transform gère la transformation des utilisations des opérateurs bit à bit du dialecte Cobol MF en java (voir les exemples d'utilisation ci-dessous). Pour que le code modernisé fonctionne correctement, l'application utilitaire devra être déployée parallèlement.

Opérateurs pris en charge :

  • Opérateur unaire :

Opérateur unaire détails
CBL_NOT Complément bit à bit (~target)
  • Opérateurs binaires :

Opérateurs binaires détails
CBL_AND ET bit à bit (source et cible)
CBL_OR OR bit à bit (source | cible)
CBL_XOR OR exclusif au niveau du bit (source ^ cible)
CBL_EQ Équivalence binaire (~ (source ^ cible))
CBL_IMP Implication binaire (~source | cible)

Signature

Hormis CBL_NOT qui n'a qu'un seul opérande (cible), toutes les autres opérations ont au moins deux opérandes, qui sont des éléments de données. Le premier opérande est la source, le second est la cible. Un argument optionnel supplémentaire (longueur) indique le nombre d'octets à traiter (de gauche à droite). Si la longueur est omise, elle est définie par défaut sur la taille minimale de la source et de la cible (en octets). Le résultat de l'opération est enregistré dans la cible. Le code de retour du programme est 0 (sauf exception).

Contrôle et gestion des erreurs

  • Pour chaque opérateur disponible, le nombre d'arguments requis est vérifié. Si le nombre minimal d'arguments requis n'est pas atteint, un IllegalArgumentException sera émis.

  • La positivité de l'argument entier facultatif est vérifiée. Si la longueur fournie est négative, un message sera affiché dans les journaux et l'opérateur ne sera pas appliqué.

Utilisation de l'échantillon

  • Exemple d'opérateur unaire :

Voici une utilisation cobol de CBL_NOT :

* TARGET: 00000101 * OPERATION: NOT * EXPECTED: 11111010 = 64000 dec (2nd byte unchanged - all 0) MOVE X'0500' to TARGET CALL "CBL_NOT" USING TARGET BY VALUE 1.

et la modernisation Java correspondante :

/* TARGET: 00000101 OPERATION: NOT EXPECTED: 11111010 = 64000 dec (2nd byte unchanged - all 0) */ ctx.getTarget().getTargetReference().setBytes(new byte[]{ 5, 0 }); ctrl.callSubProgram("CBL_NOT", CallBuilder.newInstance() .byReference(ctx.getTarget().getTargetReference()) .byValue(1) .getArguments(), ctx);
  • Exemple d'opérateur binaire :

Voir par exemple le code COBOL suivant utilisant CBL_AND :

* SOURCE: 00000011 * OPERATION: AND * TARGET: 00000101 * EXPECTED: 00000001 = 256 dec (2nd byte unchanged - all 0) MOVE X'0300' to SRC MOVE X'0500' to TARGET CALL "CBL_AND" USING SRC TARGET BY VALUE 1.

et sa modernisation de Java :

/* SOURCE: 00000011 OPERATION: AND TARGET: 00000101 EXPECTED: 00000001 = 256 dec (2nd byte unchanged - all 0) */ ctx.getSrc().getSrcReference().setBytes(new byte[]{ 3, 0 }); ctx.getTarget().getTargetReference().setBytes(new byte[]{ 5, 0 }); ctrl.callSubProgram("CBL_AND", CallBuilder.newInstance() .byReference(ctx.getSrc().getSrcReference()) .byReference(ctx.getTarget().getTargetReference()) .byValue(1) .getArguments(), ctx);

CEE3ABD

Objectif

Ce programme utilitaire imite le comportement de l'ancien programme du même nom, dont le rôle est de terminer un programme avec un code Abend (fin anormale) et un délai de nettoyage facultatif. Le moteur de transformation AWS gère la modernisation automatique des appels vers CEE3 ABD. Pour que le code modernisé fonctionne correctement, l'application utilitaire devra être déployée parallèlement.

Le programme arrête l'unité d'exécution en cours en utilisant le code d'abend fourni. Un message d'information est imprimé dans les journaux, spécifiant qu'une sortie utilisateur a été appelée avec le code donné. Pour l'instant, le paramètre de temporisation n'est PAS pris en compte, mais est présent comme argument pour des raisons de compatibilité avec la modernisation.

Signature

Le programme accepte 0 ou 2 arguments. Les deux arguments sont les suivants :

  • Le code Abend (un élément de données qui doit être interprétable comme une valeur entière positive)

  • Le moment du nettoyage (élément de données qui doit être interprétable comme une valeur entière positive) -- ignoré

Lorsqu'aucun argument n'est fourni, les valeurs par défaut suivantes sont utilisées :

  • Code d'abend : 0

  • Durée du nettoyage : 0

Contrôle et gestion des erreurs

  • Vérifie que 0 ou 2 arguments sont fournis, sinon un argument IllegalArgumentException sera émis.

  • Si deux arguments sont fournis, vérifiez que : le code abend est compris entre 0 et 4095 (les deux inclus) ; le timing est compris entre 0 et 5 (les deux inclus)

Tout échec à ces tests déclenchera unIllegalArgumentException.

Utilisation de l'échantillon

Voici un exemple d'utilisation dans un programme COBOL, à partir de l'application Carddemo :

9999-ABEND-PROGRAM. DISPLAY 'ABENDING PROGRAM' MOVE 0 TO TIMING MOVE 999 TO ABCODE CALL 'CEE3ABD'.

et le code Java modernisé correspondant :

public void _9999AbendProgram(final Cbtrn03cContext ctx, final ExecutionController ctrl) { DisplayUtils.display(ctx, ctrl, LOGGER, "ABENDING PROGRAM"); ctx.getTiming().setTiming(0); ctx.getAbcode().setAbcode(999); ctrl.callSubProgram("CEE3ABD", CallBuilder.newInstance() .getArguments(), ctx); }

CÉDER

Objectif

L'utilitaire CEEDATE convertit un nombre représentant une date Lilian (jours écoulés depuis le 15 octobre 1582) en une représentation de date basée sur des caractères, en utilisant un format fourni.

Il imite le comportement de l'ancien utilitaire système portant le même nom.

Signature

Compte tenu de sa nature, l'utilitaire CEEDATE est plutôt destiné à être appelé depuis des programmes.

Il prend trois ou quatre arguments (le dernier argument est facultatif) :

  • Le premier argument obligatoire est une donnée numérique dont la valeur sera interprétée comme une date Lilian.

  • Le deuxième argument obligatoire est un élément de données alphanumérique contenant la PICTURE chaîne utilisée pour la conversion de la date en caractères

  • Le troisième argument obligatoire est l'élément de données alphanumérique cible, contenant le résultat de la conversion du premier argument en utilisant le deuxième argument comme PICTURE

  • Le quatrième argument facultatif est un élément de données utilisé pour stocker le code de feedback de l'utilitaire.

Contrôle et gestion des erreurs

  • Si le nombre d'arguments transmis à l'utilitaire n'est pas de trois ou quatre, un BluageWrapperException sera émis

  • Si le premier argument numérique fourni ne peut pas être correctement évalué en tant que date Lilian (hors limites), un message d'erreur sera enregistré. Le détenteur du code de feedback facultatif, s'il est présent, recevra un code de feedback de gravité 3 et le message numéro 2512

  • Si une exception se produit lors de la conversion de date en raison d'une saisie non validePICTURE, un message d'erreur sera enregistré. Le détenteur du code de feedback facultatif, s'il est présent, recevra un code de feedback de gravité 3 et le message numéro 2518

  • Si, pour une raison quelconque, la conversion ne peut pas se faire correctement, l'élément de données de sortie sera rempli de blancs

  • Si la conversion est réussie, le détenteur du code d'évaluation facultatif recevra un code de réponse de gravité 0 (et aucun message)

Utilisation de l'échantillon

Voici un exemple d'appel d'un programme COBOL (la structure du support de code de feedback FC contient des points de suspension, tout comme elle contient des centaines d'entrées de conditions (niveau 88) non affichées ici) :

WORKING-STORAGE SECTION. 01 LILIANS PIC S9(9) BINARY. 01 TIMESTAMP-OUT PIC X(80). 01 MASK. 05 MASK-LEN PIC S9(4) BINARY. 05 MASK-STR. 10 MASK-CHR PIC X OCCURS 0 TO 256 DEPENDING ON MASK-LEN. 01 ROUTINE-NAMES. 05 CEESECS-ROUTINE PIC X(08) VALUE 'CEESECS '. 05 CEELOCT-ROUTINE PIC X(08) VALUE 'CEELOCT '. 05 CEEDATE-ROUTINE PIC X(08) VALUE 'CEEDATE '. 01 FC. ... * lilian date for 4 June 1990 MOVE SPACES TO MASK-STR MOVE 148887 TO LILIANS. MOVE 23 TO MASK-LEN MOVE 'YYYY-MM-DD-HH:MI:SS.999' TO MASK-STR CALL CEEDATE-ROUTINE USING LILIANS MASK TIMESTAMP-OUT FC.

CEELOCT

Objectif

L'utilitaire CEELOCT est utilisé pour renvoyer le fichier local date/time sous trois formats :

  • Date lilienne (le nombre de jours écoulés depuis le 14 octobre 1582)

  • Lilian (secondes écoulées depuis le 14 octobre 1582 à 00:00:00)

  • Chaîne de caractères grégoriens (sous la formeYYYYMMDDHHMISS999)

Il imite le comportement de l'ancien utilitaire système portant le même nom.

Signature

Compte tenu de sa nature, l'utilitaire CEELOCT est plutôt destiné à être appelé depuis des programmes.

Il prend trois ou quatre arguments (le dernier argument est facultatif) :

  • Le premier argument obligatoire est un élément de données, utilisé pour stocker la date Lilian

  • Le deuxième argument obligatoire est un élément de données, utilisé pour stocker les secondes Lilian

  • Le troisième argument obligatoire est un élément de données, utilisé pour stocker la date grégorienne en utilisant le formulaire ci-dessus

  • Le quatrième argument facultatif est un élément de données utilisé pour stocker le code de feedback de l'utilitaire.

Contrôle et gestion des erreurs

  • Si le nombre d'arguments transmis à l'utilitaire n'est pas de trois ou quatre, un BluageWrapperException sera émis

  • Si une exception se produit lors de la gestion de la conversion du format local date/time vers l'un des formats de sortie : les premier et deuxième arguments seront définis sur 0 et le troisième argument restera inchangé ; un message d'erreur sera enregistré ; éventuellement, le détenteur du code de feedback sera alimenté avec un code de feedback de gravité 3 et le message numéro 2531

  • En cas de succès, les trois arguments seront remplis avec le contenu approprié et le code de feedback facultatif sera alimenté par un code de gravité 0

Utilisation de l'échantillon

Voici un exemple d'extrait de code COBOL illustrant l'utilisation de l'utilitaire CEELOCT. La structure du support de code de feedback FC n'est pas donnée dans son intégralité car elle contient des centaines d'entrées de conditions (niveau 88).

WORKING-STORAGE SECTION. 01 LILIANS PIC S9(9) BINARY. 01 GREGORN PIC X(80). 01 SECONDS COMP-2. 01 FC. ... 01 ROUTINE-NAMES. 05 CEESECS-ROUTINE PIC X(08) VALUE 'CEESECS '. 05 CEELOCT-ROUTINE PIC X(08) VALUE 'CEELOCT '. 05 CEEDATE-ROUTINE PIC X(08) VALUE 'CEEDATE '. ... CALL CEELOCT-ROUTINE USING LILIANS SECONDS GREGORN FC.

CEERAN0

Objectif

Le programme CEERAN0 est appelé pour générer des nombres pseudo-aléatoires, compris entre 0,0 et 1,0, en utilisant une graine spécifiée. Il est basé sur l'algorithme de la méthode congruentielle multiplicative, qui nécessite une valeur de départ spécifiée par l'utilisateur. L'utilisation de 0 comme valeur de départ déclenche un mode spécifique dans lequel la valeur initiale est en fait calculée à partir du temps moyen de Greenwich (au moment de l'exécution du programme). Sinon, la graine est utilisée telle quelle. La séquence pseudo-aléatoire est prévisible.

Signature

Le programme CEERAN0 prend trois paramètres :

  • la graine (paramètre d'entrée), un élément de données qui peut être interprété comme un entier positif (0 inclus)

  • le nombre aléatoire (paramètre de sortie), une donnée qui peut être interprétée comme un nombre flottant à double précision (dont la valeur sera comprise entre 0,0 et 1,0, exclusif) ; c'est le résultat du programme

  • le code de retour optionnel (paramètre de sortie), une donnée de 12 octets, utilisé pour stocker le feedback du programme concernant le calcul des nombres aléatoires

Contrôle et gestion des erreurs

  • Si le nombre d'arguments n'est pas 2 ou 3, un IllegalArgumentException sera lancé

  • La valeur initiale doit être comprise entre 0 et 2147483646 inclus. Si la valeur initiale se situe en dehors de ces limites, un message d'erreur sera enregistré et le code de feedback sera défini sur la sévérité 3 et le numéro du message sur 2524. Le nombre aléatoire obtenu sera fixé à -1,0 (comportement analogue à celui d'origine)

  • Si la valeur initiale est définie sur 0, mais que le système n'a pas pu récupérer le temps moyen de Greewich (pour une raison quelconque), le calcul sera effectué en utilisant la valeur 1 comme solution de rechange et le code de retour sera défini sur la sévérité 1 et le numéro du message sur 2523. Le calcul des nombres aléatoires se poursuivra avec la valeur initiale de repli (analogue au comportement traditionnel)

Utilisation de l'échantillon

Voici un exemple Java qui montre comment utiliser le programme CEERAN0, en utilisant tous les paramètres, y compris le code de feedback, avec des bits provenant de plusieurs couches (entité, service) :

//Entity layer public class Randomin extends RecordEntity { private final Group root = new Group(getData()).named("RANDOMIN"); private final Elementary randomin = new Elementary(root,new BinaryIntegerType(4, true),new BigDecimal("0")).named("RANDOMIN"); ... public class Randomout extends RecordEntity { private final Group root = new Group(getData()).named("RANDOMOUT"); private final Elementary randomout = new Elementary(root,new DoubleFloatingPointType(),new BigDecimal("0")).named("RANDOMOUT"); ... public class Returncode1 extends RecordEntity { private final Group root = new Group(getData()).named("RETURNCODE"); private final Elementary returncode1 = new Elementary(root,new AlphanumericType(12)," ").named("RETURNCODE"); ... // Service layer CallHandler.newInstance(ctrl, ctx, ctx.getErrorContext()) .byReference(ctx.getRandomin().getRandominReference(), ctx.getRandomout().getRandomoutReference(), ctx.getReturncode1().getReturncode1Reference()) .call("CEERAN0");

CEESECS

Objectif

L'utilitaire CEESECS convertit une représentation sous forme de chaîne d'horodatage en secondes Lilian (le nombre de secondes écoulées depuis le 14 octobre 1582 à 00:00:00).

Signature

Compte tenu de sa nature, l'utilitaire CEESECS est plutôt destiné à être appelé depuis des programmes.

Il prend trois ou quatre arguments (le dernier argument est facultatif) :

  • Le premier argument obligatoire est un élément de données dont la valeur sera interprétée comme un horodatage

  • Le deuxième argument obligatoire est un élément de données alphanumérique contenant la PICTURE chaîne utilisée pour spécifier comment interpréter le premier argument.

  • Le troisième argument obligatoire est l'élément de données, contenant le résultat de la conversion du premier argument en utilisant le deuxième argument comme PICTURE

  • Le quatrième argument facultatif est un élément de données utilisé pour stocker le code de feedback de l'utilitaire.

Contrôle et gestion des erreurs

  • Si le nombre d'arguments transmis à l'utilitaire n'est pas de trois ou quatre, un BluageWrapperException sera émis

  • Si l'horodatage transmis à l'utilitaire en tant qu'argument n'est pas valide, un message d'erreur sera enregistré et, éventuellement, le détenteur du code de feedback recevra un code de feedback de gravité 3 et un message numéro 2513

  • Si l'image transmise à l'utilitaire en tant qu'argument n'est pas valide, un message d'erreur sera enregistré et, éventuellement, le détenteur du code de feedback recevra un code de feedback de gravité 3 et un message numéro 2518

  • Si, pour une raison quelconque, la sortie en secondes liliennes ne peut pas être calculée, le troisième argument (sortie) sera défini sur 0

Utilisation de l'échantillon

Voici un exemple d'appel à l'utilitaire CEESECS dans un programme COBOL :

WORKING-STORAGE SECTION. 01 SECONDS COMP-2. 01 TIMESTAMP-IN. 05 TIMESTAMP-IN-LEN PIC S9(4) BINARY. 05 TIMESTAMP-IN-STR. 10 TIMESTAMP-IN-CHAR PIC X OCCURS 0 TO 256 DEPENDING ON TIMESTAMP-IN-LEN. 01 MASK. 05 MASK-LEN PIC S9(4) BINARY. 05 MASK-STR. 10 MASK-CHR PIC X OCCURS 0 TO 256 DEPENDING ON MASK-LEN. 01 FC. ... 01 ROUTINE-NAMES. 05 CEESECS-ROUTINE PIC X(08) VALUE 'CEESECS '. 05 CEELOCT-ROUTINE PIC X(08) VALUE 'CEELOCT '. 05 CEEDATE-ROUTINE PIC X(08) VALUE 'CEEDATE '. ... ... * date for lilian second 12,799,191,601.123 MOVE '1988-5-16-19:00:01.123' TO TIMESTAMP-IN-STR MOVE 23 TO MASK-LEN MOVE 'YYYY-MM-DD-HH:MI:SS.999' TO MASK-STR CALL CEESECS-ROUTINE USING TIMESTAMP-IN MASK SECONDS FC.

ILBOABN0

Objectif

Le but du programme ILBOABN0 est d'interrompre l'unité en cours d'exécution de manière contrôlée, en utilisant un code d'abend (fin anormale) fourni par l'utilisateur. Souvent utilisé dans les programmes dédiés à la gestion des erreurs.

L'interruption de l'unité en cours d'exécution se produit en lançant unStopRunUnitException.

Signature

Le programme ILBOABN0 prend un seul argument obligatoire qui est un élément de données contenant le code abend (qui doit être interprétable comme un entier).

Contrôle et gestion des erreurs

Lors du lancement du StopRunUnitException pour interrompre l'exécution de l'unité d'exécution en cours, le programme définira le code de retour sur la valeur fournie comme premier argument. De plus, un message d'information sera enregistré.

Utilisation de l'échantillon

Voici un exemple d'utilisation en Java du programme ILBOABN0, issu d'une modernisation de COBOL via AWS Transform :

77 WS-ABND-CODE COMP PIC S9(4) VALUE +1234. ... ... 1970-ABNDIT. CALL 'ILBOABN0' USING WS-ABND-CODE.

et la modernisation de Java correspondante :

//Entity layer private final Group root = new Group(getData()); private final Elementary wsAbndCode = new Elementary(root,new BinaryType(4, 0, "STD", false, false, true),Short.valueOf("1234")); ... //Service layer @Override public void _1970Abndit(final MyPgmContext ctx, final ExecutionController ctrl) { ctrl.callSubProgram("ILBOABN0", CallBuilder.newInstance() .byReference(ctx.getWsAbndCode().getWsAbndCodeReference()) .getArguments(), ctx);