Page 1 sur 1

Groupe d'activation

Posté : mar. 31 mai 2016, 10:31:40
par florian67
Bonjour à tous,

C'est encore moi...

Je ne vais pas dire que c'est un problème mais plutôt un fonctionnement que j'ai du mal à comprendre.

J'ai deux programmes, le premier (PGM1) fait un CALL du second (PGM2).
Le premier fait une lecture sur un fichier pour vérifier que l'enregistrement existe et le second met à jour l'enregistrement.

Déjà je ne comprends pas comment ça ne plantait pas vu que des deux côtés le fichier est en MAJ...

Bref on modifie PGM2 pour rajouter une fonction (BNDDIR DFTACTGRP(*NO)... Cette fois boom ça plante car enregistrement déjà verrouillé par ce travail. Pourquoi le DFTACTGRP(*NO) fait planter la mise à jour or que ça fonctionnait avant?

On a remarqué que si on rajoutait DFTACTGRP(*NO) dans PGM1 ou ACTGRP(*CALLER) dans PGM2 ça solutionnait le problème. Je me demande pourquoi également....

Je pense que je n'ai pas tout compris sur les groupes d'activations.

Merci d'avance.
Florian

je suis surpris

Posté : mar. 31 mai 2016, 12:45:54
par cmasse
JE suis surpris

Chez moi ce pgm

Code : Tout sélectionner

**free
ctl-opt alwnull(*usrctl);
dcl-pr verrou02 extpgm;
  *n bindec(9) const;
END-PR;
dcl-f producteur disk keyed usage(*update);
pr_code = 1;
chain pr_code producteur;
verrou02(1);
*inLR = *ON;    
appelle ce pgm

Code : Tout sélectionner

**free
ctl-opt alwnull(*usrctl);
dcl-pi *n;
  p1 bindec(9);
END-PI;
dcl-f producteur disk keyed usage(*update);
chain p1 producteur;
dsply pr_nom;
*INLR = *ON;     
et je reçois
Erreur. RNX1299 non intercepté par VERROU02 à la spécif 0000000030

SHARE(*YES)

Posté : mar. 31 mai 2016, 16:14:49
par cmasse
Peut-être le fichier est-il en SHARE(*YES) ???

Si oui, l'ouverture est commune (partagée) aux pgms du même groupe d'activation.

Posté : jeu. 02 juin 2016, 09:00:31
par florian67
Bonjour,

Pour le SHARE(*YES) je ne pense pas.

Il fait quoi exactement le DFTACTGRP(*NO)?

Groupe d'activation

Posté : jeu. 02 juin 2016, 11:06:18
par cmasse
LE groupe d'activation propose un cloisonnement pour :

- les substitutions (OVRxxx OVRSCOPE) qui ne sont valables que pour les pgm du même groupe

- les ouvertures partagées OPNQRYF par ex (OPNSCOPE) ou tout fichier ouvert en SHARE(*YES), le partage n'ayant lieu que pour les pgm du même groupe.(sans SHARE(*YES) chaque pgm a sa propre "vision" du fichier)

- le commit , la transaction étant limité au groupe d'activation actif (si un pgm d'un autre groupe fait un ROLLBACK, cela n'impacte pas les actions DB du pgm)

- enfin cela influence la gestion des erreurs, la même erreur étant transmise de pgm à pgm, à l'intérieur du groupe d'activation. Quand on sort du groupe vous recevez CEE9001.

Posté : lun. 06 juin 2016, 12:21:04
par florian67
Je regarde un peu plus en détail ce problème car c'est encore un peu un mystère ... :)

Posté : lun. 13 juin 2016, 08:09:18
par florian67
Pour revenir à cette phrase :
- les substitutions (OVRxxx OVRSCOPE) qui ne sont valables que pour les pgm du même groupe.

ça veut dire que si je fais un OVRDBF (qcmdexc) avec DFTACTGRP(*NO), ça peut poser des problèmes?

OVRDBF

Posté : mer. 15 juin 2016, 10:34:48
par cmasse
Ca veut surtout dire, que si vous faites un OVRDBF dans un CLP (forcement dans la groupe d’activation par défaut) qui appel un RPG dans un groupe d’activation (DFTACTGRP(*NO) sans autre paramètre place le pgm dans un groupe nommé QILE) ce dernier ne "verra" pas la substitution.

Posté : mer. 15 juin 2016, 12:23:09
par florian67
Je testé ça. Si je fais un OVRDBF (fichier multi-membre) dans le RPG je ne vois pas les données. Par contre si je rajoute OVRSCOPE(*ACTGRPDFN) SHARE(*YES) ça fonctionne très bien. Je commence à comprendre la mécanique des groupes d'activations.