Liaison pgm à pgm. -> Par l'intermédiaire de fichiers ICF. CRTICFF (fichiers définis à l'aide du langage SDD) C'est l'interface entre les pgms et le support de communication. Ces fichiers sont indépendants du type de support (APPC,BSC,...) -> A un fichier ICF on va associer X unité-pgm ADDICFDEVE Ces unité-pgm permettent de définir un lieu éloigné. (système cible) représenté par une DEVICE (APPC ou autre) Un même fichier ICF peut donc permettre l'accès à X systèmes cibles. |
Sur le système source CRTDEVAPPC DEVD(DEVAPPC) RMTLOCNAME(AUTREAS) CRTICFF FILE(FICICF) SRCFILE(QDDSSRC) ACQPGMDEV(*NONE) ADDICFDEVE FILE(FICICF) PGMDEV(DEV01) RMTLOCNAME(AUTREAS) PUIS (RPG) ! OU (CBL) ! C 'DEV01' ACQ FICICF ! ACQUIRE "DEV01" FOR FICICF ! ou bien CRTICFF FILE(FICICF) SRCFILE(QDDSSRC) ACQPGMDEV(DEV01) CECI va provoquer l'établissement d'une session (lien logique entre deux systèmes) |
système A (source) Systeme B (cible) ---------------------- ---------------------- ! ! ! ! ! °°°°°°°° ! ! ! ! ° PGM1 ° ! ! ! Lien provoqué! °°°°°°°° ! ! ! par OPEN ! * ! ! ! ! * ! ! ! ! °°°°°°° ! ! ! ! ° ICF ° ! ! ! °°°°°°° ! ! ! ! * ! ! ! Lien provoqué! * ----- ----- --! !-- ----- ----- ! par PGMDEV ! * ! D ! ! C ! !L! !L! ! C ! ! D ! ! + ACQUIRE ! **! E !**! T !*!I!<*** Z ****>!I!*! T !**! E ! ! ! ! V ! ! L ! !N! !N! ! L ! ! V ! ! ! ----- ----- --! !-- ----- ----- ! ---------------------- ---------------------- ETABLISSEMENT D'UNE SESSION |
Mais cela ne suffit pas (il n'y a pas de pgm actif sur le système cible) Il faut donc demander sur le système source l'activation d'un pgm sur le système cible. Cela va initialiser une transaction (liaison logique entre deux pgms) "à l'intérieur" de la session qui vient d'être établie On parlera de pgm-source et de pgm-cible pour une transaction. Un des mots-clés du langage SDD/ICF est EVOKE(nom-pgm) Lors de l'écriture d'un format contenant ce mot-clé (normalement au premier envoi) il y a demande de la part du système source d'initialisation automatique de ce pgm sur le système cible, ce pgm-cible utilisera lui aussi un fichier ICF. Puis il faudra connecter ce pgm-cible à la session initialement établie par l'ordre ACQUIRE. |
système A Systeme B ---------------------- ---------------------- ! ! ! ! ! °°°°°°°° ! PGM ! °°°°°°°° ! ! ° PGM1 ° ! activé ! ° PGM2 ° ! ! °°°°°°°° ! par ! °°°°°°°° ! ! * ! EVOKE ! ! ! * ! ! ! ! °°°°°°° ! ! ! ! ° ICF ° ! ! ! °°°°°°° ! ! ! ! * ! ! ! ! * ----- ----- --! !-- ----- ----- ! ! * ! D ! ! C ! !L! !L! ! C ! ! D ! ! ! **! E !**! T !*!I!<*** Z ****>!I!*! T !**! E ! ! ! ! V ! ! L ! !N! !N! ! L ! ! V ! ! ! ----- ----- --! !-- ----- ----- ! ---------------------- ---------------------- |
Sur le système cible CRTICFF FILE(FICICF) SRCFILE(QDDSSRC) ACQPGMDEV(*NONE) ADDICFDEVE FILE(FICICF) PGMDEV(DEV01) RMTLOCNAME(*REQUESTER) PUIS (RPG) ! OU (CBL) ! C 'DEV01' ACQ FICICF ! ACQUIRE "DEV01" FOR FICICF ou bien CRTICFF FILE(FICICF) SRCFILE(QDDSSRC) ACQPGMDEV(DEV01) |
Système A Système B ---------------------- ---------------------- ! ! ! ! ! °°°°°°°° ! ! °°°°°°°° ! ! ° PGM1 ° ! ! ° PGM2 ° ! ! °°°°°°°° ! ! °°°°°°°° ! ! * ! Lien par --!-------------> * ! ! * ! OPEN ! * ! ! °°°°°°° ! ! °°°°°°° ! ! ° ICF ° ! Lien par ° ICF ° ! ! °°°°°°° ! PGMDEV ! °°°°°°° ! ! * !(*REQUESTER)!-------------> * ! ! * ----- ----- --! !-- ----- ----- * ! ! * ! D ! ! C ! !L! !L! ! C ! ! D ! * ! ! **! E !**! T !*!I!<*** Z ****>!I!*! T !**! E !** ! ! ! V ! ! L ! !N! !N! ! L ! ! V ! ! ! ----- ----- --! !-- ----- ----- ! ---------------------- ---------------------- ETABLISSEMENT D'UNE TRANSACTION |
Le dialoque entre ces deux pgms par l'intermédiaire des fichiers ICF est maintenant possible: source cible !-> 1 WRITE fmt1 --> (envoi) 2 --> READ fmt1 (réception) -! !-- <-! un changement du sens de dialogue est possible à l'initiative du pgm émetteur(mot-clé ALWWRT ou READ apres WRITE),il devient récepteur le pgm récepteur va recevoir un ordre de changement de sens (TRNRND) et va pouvoir devenir émetteur (WRITE) source cible !-> 1 WRITE fmt1 --> (envoi) 2 --> READ fmt1 (réception) -! ! (avec ALWWRT) +TRNRND ! ! ! !- 4 READ fmt2 <-- 3 <-- WRITE fmt2 <-! (reçoit TRNRND) (avec ALWWTR) |
La Transaction peut être interrompue à la demande du pgm-cible ou du pgm-source. 1/ Implicitement par CLOSE du fichier ICF (cela provoque également la fin de la session) 2/ Explicitement par le mot-clé DETACH. Les pgms ne peuvent plus dialoguer,mais la session étant toujours active (liaison pgm-cible/SYSTME-source) le pgm-cible peut initialiser une autre transaction (avec un autre pgm) par EVOKE. Le pgm-cible peut continuer le traitement en autonome ou s'arrêter |
La session peut être interrompue 1/ à la demande du pgm-source par l'ordre RELEASE (code opération du langage, inverse de l'acquire) C 'DEV01' REL FICICF DROP "DEV01" FROM FICICF le pgm-source doit tester un code retour indiquant que la session ne peut être interrompue (transfert de données non terminé par ex) 2/ à la demande du pgm-source ou du pgm-cible par le mot-clé EOS (END-OF-SESSION), la fin de session étant alors forcée. ==> risque de perte de données. Le pgm-source peut initialiser une autre session.(ACQUIRE) ou continuer le traitement en autonome ou s'arrêter. Le pgm-cible peut continuer le traitement en autonome ou s'arrêter. |
------------------- 1 SESSION / 1 TRANSACTION ----------------------- S ! 1/ VRYCFG !***** Z ******! 1/ VRYCFG ! C O !....pgms...... ..ICFF.. ! ! ! I U !:2/ OPEN ICF :===> : ! ! ..ICFF.. ! B R !: : : : ! Session ! : : ! L C !:3/ ACQUIRE :=========================>! : : ! E E !: : : : ! transaction ! : : ! !:4/ EVOKE :============================: :===>.pgmc........! !: (pgmc) : : : ! ! : <=====: 5/ OPEN :! !: : : : ! ! : : : :! !: <=========================================:=>6/ ACQUIRE:! !: : : : ! ! : : : *REQUESTER! !:7/snd-rcv <=======data=======data========data=======:=>7/snd-rcv :! !: : : : ! ! : : : :! !:8/ DETACH ===========================>! == / <=====:= 8/DETACH :! !: (session : : : ! ! : : : (fin de :! !: active) : : : ! ! : : : session) :! !:9/ RELEASE :====> : ! ! : : <=:/==.CLOSE...:! !: (fin de : : : ! ! : : ! !: session) : : : ! ! : : ! !:...CLOSE.==/:=>:......: ! ! :......: ! --------------------------- ---------------------------- |
------------------- 1 SESSION / x TRANSACTIONS ---------------------- S ! 1/ VRYCFG !***** Z ******! 1/ VRYCFG ! C O !....pgms...... ..ICFF.. ! ! ! I U !:2/ OPEN ICF :===> : ! ! ..ICFF.. ! B R !:3/ ACQUIRE :=========================>! : : ! L C !:4/ EVOKE :============================: :===>.pgmc........! E E !: (pgmc) : : : ! ! : <=====:= 5/ OPEN :! !: <=========================================:=>6/ ACQUIRE:! !: : : : ! ! : : : *REQUESTER! !:7/snd-rcv <=======data=======data========data=======:=>7/snd-rcv :! !:8/ DETACH ===========================>! == / <=====:= 8/DETACH :! !: : : : ! ! : : <=:/==.CLOSE...:! !: : : : ! ! : : ! !:9/ EVOKE :============================: :===>.pgmc2.......! !: (pgmc2) : : : ! ! : <=====:= 10/OPEN :! !: <=========================================:=>11/ACQUIRE:! !: : : : ! ! : : : *REQUESTER! !12/snd-rcv <=======data=======data========data=======:=> snd-rcv :! !13/ DETACH ===========================>! == / <=====:= 13/DETACH :! !14/ RELEASE :====> : ! ! : : <=:/==..CLOSE..:! !:...CLOSE.==/:=>:......: ! ! :......: ! --------------------------- ---------------------------- |
------------------ x SESSIONS / x TRANSACTIONS --- ------------------- ! 1/ VRYCFG !**** Z *****! 1/ VRYCFG !*Z**! 1/VRYCFG ! !....pgms...... ! ! ! ! ! !:2/ OPEN ICF :===> ! ! ! ! !:3/ ACQUIRE :===============>! ! ! ! !:4/ EVOKE :===================>.pgmc.........! ! ! !: (pgmc) : ! !<==:= 5/ OPEN :! ! ! !: <======================:=>6/ ACQUIRE:! ! ! !: : ! ! : *REQUESTER! ! ! !:7/snd-rcv <=========data=========:=>7/snd-rcv :! ! ! !: : ! ! : 8/ACQUIRE======>! ! !: : ! session et ! : 9/EVOKE ===========>.pgmz.........! !: : ! transaction! : :!<=======:= 10/OPEN :! !: : ! toujours ! : <==============>11/ACQUIRE:! !: : ! activés ! : :! ! : *REQUESTER! !: : ! ! : <=====data=====> snd-rcv :! !: : ! ! : :!<=== / =:= 12/DETACH :! !: <=======================> :! ! <=:/==..CLOSE..:! !13/ DETACH =================>! : :! ! ! !14/ RELEASE :==>! ! : :! ! ! !:...CLOSE.==/:=> ! ! :............:! ! ! ---------système I- --------système II- -------système III- |
Un fichier ICF peut être associé à plusieurs DEVICE telecom (dialogue entre un et plusieurs) Un fichier ICF peut être rattaché à une unité INTRA cela permet de faire dialoguer deux pgms du même système comme s'il étaient en réseau (test de fichiers ICF ,ou travaux asynchrones) Passe-système, DDM et SNADS utilisent des fichiers ICF. Il existe une alternative aux fichiers ICF (provoquant le même résultat et le même type de dialogue logique), Les CPI de communication. Les mêmes fonctionnalités sont mises en oeuvre par l'appel de routines système. Ces routines sont communes à beaucoup de systemes de la gamme IBM (architecture S/370 par ex.) ceci pour un souci de cohérence dans le cadre SAA. |