AICA

Un abend AICA intervient lorsque CICS détecte qu’un programme est en train de boucler.

La situation de boucle dépend de fa quantité de temps écoulé entre l’exécution de deux commandes CICS. Si le temps est plus long que le temps imparti à la tâche (intervalle fixé par le paramètre ICVR de la SIT), CICS considère que le programme boude et le termine par un abend AICA.

Lorsqu’il y a une boucle, il est nécessaire de déterminer l’endroit où elle se trouve. Avec AICA, on sait par définition qu’elle se situe après la dernière commande CICS exécutée et avant l’exécution de toute autre commande CICS en séquence logique.

Sous EDF, la dernière commande est facilement localisée. A partir du listing du programme il est possible de trouver la prochaine commande attendue. Si la recherche est vaine, il faut analyser le contenu des variables de la Working Storage. Le plus souvent, ces valeurs associées à la connaissance de la logique du programme permettent de déterminer où l’on se trouve dans le code.

Si d’avantage d’informations sont nécessaires, il faut travailler avec EDF ou les dumps de transaction.

Avec EDF, on choisit un ordre CICS dont on est sûr qu’il n’est pas exécuté. On l’utilise comme condition d’arrêt en saisissant son numéro d’ordre translateur (si l’option DEBUG a été utilisée) ou son adresse hexadécimale, sur l’écran STOP CONDITIONS (option PF9). Ensuite, on laisse le programme se dérouler.

Si la boucle est éloignée dans le code, supprimer les affichages (option suppress display).

Si le programme atteint la condition d’arrêt, alors on sait que l’ordre CICS a été exécuté. Il faut marquer un autre ordre CICS au delà de celui-ci’ et répéter le processus. Si l’ordre n’est pas exécuté avant l’apparition de l’abend AICA, il faut marquer un ordre CICS entre ce dernier et ledébut de la boucle. Il faut répéter le processus jusqu’à la localisation de la boucle.

La technique employée avec les dumps de la transaction est sensiblement la même, excepté qu’il faut noter d’un seul coup tous les ordres à analyser, et placer une commande DUMP derrière chacun d’eux, avec un identifiant DMPCODE différent. Ensuite, il faut lancer le programme et analyser les dumps produits. La séquence des DMPCODEs permet de localiser la portion du code exécuté, et de vérifier le contenu de la Working Storage disponible à chacun de ces points de capture.

Remarques importantes sur AICA

Dans les versions les plus récentes de CICS, le système utilise le temps ” réel ” plutôt que le temps ” processeur ” pour détecter les boucles. Ainsi, il est possible qu’une transaction se termine par un abend AICA sans pour autant qu’il y ait une boucle. Ceci peut se produire dans le cas où la valeur du paramètre ICVR est trop faible, mais aussi dans le cas où il y a de nombreuses interférences entre la région CICS et les autres régions concurrentes, ou encore pour les deux raisons à la fois. S’il existe un doute sur la validité de l’abend AICA, il faut augmenter la valeur du paramètre ICVR et répéter plusieurs fois la transaction. Si c’est un ” vrai ” abend AICA, la dernière commande CICS exécutée sera toujours la même

Certaines commandes CICS ne passent pas par le contrôle de tâche et par conséquent ne peuvent pas réinitialiser l’intervalle de durée de la tâche.