Programme d'exit pour pwrdwnsys
La problématique

De plus en plus d'applications ou de fonctions existant dans un environnement intégré tel qu'OS/400 nécéssitent d'êtres arrêtées selon leurs moyens propres.

A titre d'exemple, les applications suivantes :
  • Lotus Domino pour iSeries
  • Websphere MQ pour iSeries
  • Les serveurs xSeries intégrés (IXS/IXA)

... etc ... etc ... cette liste ne se veut pas exaustive. Nombre d'applications IBM ou non-IBM requièrent d'effectuer une suite d'opérations plus complexes que le simple arrêt d'un sous-système pour terminer leur activité "proprement" et assurer l'intégrité des données !

Lorsque la commande PWRDWNSYS est exécutée, un ordre d'arrêt (cf. ENDSBS) est envoyé à l'ensemble des sous-systèmes actifs. Peu d'applications sont capables d'intercepter cet ordre pour effectuer un arrêt correct.

Comprendre : les "Exit Points" et les "Exit Programs"

Exit Points

Exit Programs


Comprendre : l'exit point relatif au "Power Down System"

Cet "exit point" est utilisé lors de l'exécution des commandes PWRDWNSYS ou ENDSYS.

Quand un utilisateur ou une application invoque la commande PWRDWNSYS ou la commande ENDSYS, le système appelle le programme spécifié dans le registre sous le nom QIBM_QWC_PWRDWNSYS, format PWRD0100.

Attention : le programme référencé N'EST PAS appelé si le système se trouve dans une des conditions suivantes :
  • Le système est en mode restreint
  • Le système est sous alimentation électrique auxiliaire (UPS)
  • Le système s'arrête sous une action *ENDSYS ou *PWRDWNSYS ordonnée par le paramétrage des valeurs systèmes QSTGLOWACN et QSTGLOWLMT
  • Le système est une partition secondaire s'arrêtant suite à l'arrêt de la partition primaire.
Un exemple de programme CL

A titre d'exemple, le programme suivant se propose d'arrêter "proprement" un serveur domino et un serveur xSeries intégré.

PGM

DCL VAR(&STATUS) TYPE(*DEC) LENGTH(5 0)
MONMSG MSGID(CPF0000)

/* Stop Lotus Domino Servers */

ENDDOMSVR SERVER(<domino_server_name>) OPTION(*CNTRLD)
DLYJOB DLY(300)
ENDDOMSVR SERVER(<domino_server_name>) OPTION(*IMMED)

/* Stop Integrated xSeries Servers */

RTVCFGSTS CFGD(<windows_server_name>) CFGSTYPE(*NWS) STSCDE(&STATUS)
IF COND(&STATUS *GE 20) THEN(DO)
VRYCFG CFGOBJ(<windows_server_name>) CFGTYPE(*NWS) STATUS(*OFF) FRCVRYOFF(*YES)
ENDDO

... to be completed ...

RETURN
ENDPGM

Important :
  • Cet exit program n'a pas de paramètres
  • Le système ignorera tout code erreur retourné par le programme

Association du programme créé avec l'Exit Point

Après compilation, le programme doit être enregistré :

ADDEXITPGM EXITPNT(QIBM_QWC_PWRDWNSYS) FORMAT(PWRD0100) PGMNBR(1) PGM(<library_name>/<program_name>)                                                                     

Important :
  • Un seul exit program est admis pour cette fonction
  • Le paramètre "Program Number" (PGMNBR) doit être égal à "1" : toute autre valeur sera ignorée !