1. IMS DB vs IMS DC β a divisΓ£o de responsabilidades
IMS tem dois subsistemas que podem funcionar juntos ou independentemente:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β IMS Control Region β
β β
β ββββββββββββββββ ββββββββββββββββββββββββββββββββ β
β β IMS DB β β IMS DC β β
β β β β β β
β β HDAM/HIDAM β β Message Queues (entrada) β β
β β HISAM/HSAM β β Scheduler (despachante) β β
β β datasets β β Terminais 3270 / MFS β β
β β VSAM β β Message Queues (saΓda) β β
β ββββββββ¬ββββββββ ββββββββββββββββ¬ββββββββββββββββ β
β β β β
βββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββ
β β
DL/I calls IOPCB calls
(GU/GN/ISRT...) (GU msg / ISRT resposta)
β β
ββββββββββββββββ¬βββββββββββββββββββ
β
Programa COBOL (MPP ou BMP)
| Subsistema | Responsabilidade | Acesso via |
|---|---|---|
| IMS DB | Bancos de dados hierΓ‘rquicos β armazenar e recuperar segmentos | PCBs de banco (TYPE=DB) β calls GU, GN, GNP, ISRT, DLET, REPL |
| IMS DC | Filas de mensagens β receber de terminais, despachar para programas, retornar respostas | IOPCB (I/O PCB) β calls GU (ler mensagem) e ISRT (enviar resposta) |
Quem jΓ‘ conhece CICS vai reconhecer o modelo: IMS DC recebe uma mensagem de um terminal (equivalente ao EXEC CICS RECEIVE MAP), despacha para um programa MPP (equivalente ao programa CICS), que processa, atualiza o banco (via DL/I, nΓ£o SQL) e envia resposta (equivalente ao EXEC CICS SEND MAP). A diferenΓ§a Γ© que o IMS DC usa filas de mensagens em vez de chamadas diretas.
2. Tipos de programa IMS β MPP, BMP, JBP e DL/I batch
| Tipo | Nome completo | Ambiente | Acesso DB | Acesso DC |
|---|---|---|---|---|
| DL/I batch | DL/I Batch Program | JCL batch puro | Sim β PCBs tipo DB | NΓ£o |
| MPP | Message Processing Program | IMS DC online | Sim β PCBs tipo DB | Sim β IOPCB |
| BMP | Batch Message Processing | IMS DC + batch | Sim β PCBs tipo DB | Sim β IOPCB (filas) |
| JBP | Java Batch Processing | IMS DC + Java | Sim | Sim |
| IFP | IMS Fast Path Program | IMS DC β alta performance | Sim (DEDB) | Sim |
Em ambientes bancΓ‘rios, DL/I batch Γ© o mais comum para programadores COBOL β processar extratos, atualizar saldos, gerar relatΓ³rios. BMP aparece quando o batch precisa ler filas de entrada (mensagens geradas por outro sistema) ou escrever em filas de saΓda. MPP Γ© o online β vocΓͺ vai escrever MPP quando precisar implementar uma transaΓ§Γ£o de terminal 3270.
3. IOPCB β o PCB de mensagens
O IOPCB (I/O Program Communication Block) Γ© o canal de comunicaΓ§Γ£o entre o programa e o IMS DC. Diferente dos PCBs de banco (TYPE=DB), o IOPCB Γ© gerado automaticamente pelo IMS β vocΓͺ nΓ£o o define no PSB, mas precisa declarΓ‘-lo na LINKAGE SECTION e recebΓͺ-lo como o primeiro parΓ’metro do ENTRY 'DLITCBL'.
LINKAGE SECTION.
*
* IOPCB β sempre o PRIMEIRO PCB no ENTRY (para MPP e BMP)
*
01 IOPCB.
05 IO-LTERM-NAME PIC X(08). -- nome do terminal lΓ³gico
05 FILLER PIC XX.
05 IO-STATUS PIC XX. -- status da operacao DC
05 IO-LOCAL-DATE PIC 9(04). -- data local YYDDD
05 IO-LOCAL-TIME PIC 9(06). -- hora local HHMMSS
05 IO-MSG-SEQ-NUM PIC 9(04). -- numero sequencial msg
05 IO-MOD-NAME PIC X(08). -- nome do MFS MOD
05 IO-USERID PIC X(08). -- userid do terminal
*
* PCBs de banco vΓͺm DEPOIS do IOPCB
*
01 PCB-BANCOCLI.
05 PCB-DBD-NAME PIC X(08).
05 PCB-SEG-LEVEL PIC XX.
05 PCB-STATUS PIC XX.
05 PCB-PROC-OPT PIC X(04).
05 FILLER PIC X(04).
05 PCB-SEG-NAME PIC X(08).
05 PCB-KEY-LEN PIC S9(05) COMP.
05 PCB-NUMB-SENS PIC S9(05) COMP.
05 PCB-KEY-FDBK PIC X(21).
PROCEDURE DIVISION.
* IOPCB SEMPRE PRIMEIRO β depois os PCBs de banco
ENTRY 'DLITCBL' USING IOPCB
PCB-BANCOCLI.
Status codes do IOPCB
| IO-STATUS | Significado |
|---|---|
| bb (espaΓ§os) | Sucesso β mensagem lida ou enviada com sucesso |
| QC | No more messages β fila de entrada vazia (fim do processamento BMP) |
| QD | Queue full β fila de saΓda cheia; tentar novamente |
| AD | Terminal disconnected β terminal saiu durante envio |
| AK | Invalid message segment β segmento de mensagem invΓ‘lido |
| AM | Access denied β programa nΓ£o autorizado a usar o LTERM |
4. MPP β Message Processing Program
Um MPP processa uma mensagem por vez. O IMS DC despacha o programa quando uma mensagem chega na fila da transaΓ§Γ£o, o programa processa e termina (GOBACK), e o IMS pode despachar outra instΓ’ncia. O modelo Γ© pseudo-conversacional β exatamente como o CICS.
Terminal 3270 β usuΓ‘rio digita dados e pressiona ENTER
β
IMS DC recebe a mensagem e coloca na fila da transaΓ§Γ£o CONS
β
IMS Scheduler invoca o programa PGMCONS (MPP)
β
PGMCONS executa ENTRY 'DLITCBL' USING IOPCB PCB-BANCOCLI
β
GU no IOPCB β lΓͺ a mensagem do terminal (dados digitados)
β
DL/I calls no PCB-BANCOCLI β consulta/atualiza banco IMS
β
ISRT no IOPCB β envia resposta de volta ao terminal
β
GOBACK β programa termina, IMS retorna resposta ao terminal
β
IMS estΓ‘ pronto para prΓ³xima mensagem (mesmo ou outro terminal)
Cada invocaΓ§Γ£o do MPP comeΓ§a do zero β sem variΓ‘veis persistentes entre chamadas. Para manter estado entre telas (como no CICS com COMMAREA), o MPP usa a SPA (Scratchpad Area), uma Γ‘rea de dados que o IMS persiste entre invocaΓ§Γ΅es consecutivas do mesmo usuΓ‘rio na mesma transaΓ§Γ£o.
5. GU e ISRT no IOPCB β lendo e respondendo mensagens
No IOPCB, apenas duas DL/I calls fazem sentido: GU para ler a prΓ³xima mensagem da fila de entrada, e ISRT para inserir uma mensagem na fila de saΓda (resposta ao terminal ou para outra fila).
IDENTIFICATION DIVISION.
PROGRAM-ID. PGMCONSULTA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-FUNC-GU PIC X(04) VALUE 'GU '.
01 WS-FUNC-ISRT PIC X(04) VALUE 'ISRT'.
01 WS-SSA-0 PIC S9(05) COMP VALUE 0.
01 WS-SSA-1 PIC S9(05) COMP VALUE 1.
* Γrea da mensagem de entrada (layout do terminal 3270)
01 WS-MSG-ENTRADA.
05 ME-TRANSACAO PIC X(04). -- codigo da transacao
05 ME-CPF PIC 9(11). -- CPF digitado pelo usuario
05 FILLER PIC X(65).
* Γrea da mensagem de saΓda (resposta ao terminal)
01 WS-MSG-SAIDA.
05 MS-PREFIXO PIC X(02). -- LL (tamanho) e ZZ (reservado)
05 MS-NOME PIC X(40).
05 MS-SALDO PIC ZZZ.ZZZ.ZZ9,99.
05 MS-STATUS PIC X(30).
* SSA do segmento cliente (para DL/I no banco)
01 WS-SSA-CLI-QUAL.
05 FILLER PIC X(08) VALUE 'CLIENTE '.
05 FILLER PIC X(01) VALUE '('.
05 FILLER PIC X(08) VALUE 'CLICPF '.
05 FILLER PIC X(02) VALUE '= '.
05 SSA-CLI-CPF PIC 9(11).
05 FILLER PIC X(01) VALUE ')'.
01 WS-SEG-CLIENTE.
05 CLI-CPF PIC 9(11).
05 CLI-NOME PIC X(40).
05 FILLER PIC X(29).
LINKAGE SECTION.
01 IOPCB.
05 IO-LTERM PIC X(08).
05 FILLER PIC XX.
05 IO-STATUS PIC XX.
05 FILLER PIC X(20).
01 PCB-BANCOCLI.
05 PCB-DBD-NAME PIC X(08).
05 PCB-SEG-LEVEL PIC XX.
05 PCB-STATUS PIC XX.
05 PCB-PROC-OPT PIC X(04).
05 FILLER PIC X(04).
05 PCB-SEG-NAME PIC X(08).
05 PCB-KEY-LEN PIC S9(05) COMP.
05 PCB-NUMB-SENS PIC S9(05) COMP.
05 PCB-KEY-FDBK PIC X(21).
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING IOPCB PCB-BANCOCLI.
0000-PRINCIPAL.
* 1. LΓͺ a mensagem de entrada do terminal
CALL 'CBLTDLI' USING
WS-SSA-0
WS-FUNC-GU
IOPCB
WS-MSG-ENTRADA
IF IO-STATUS NOT = SPACES
DISPLAY 'ERRO IOPCB GU: ' IO-STATUS
GOBACK
END-IF
* 2. Busca o cliente no banco IMS
MOVE ME-CPF TO SSA-CLI-CPF
CALL 'CBLTDLI' USING
WS-SSA-1
WS-FUNC-GU
PCB-BANCOCLI
WS-SEG-CLIENTE
WS-SSA-CLI-QUAL
EVALUATE PCB-STATUS
WHEN SPACES
MOVE CLI-NOME TO MS-NOME
MOVE 'CLIENTE ENCONTRADO' TO MS-STATUS
WHEN 'GE'
MOVE 'CLIENTE NAO ENCONTRADO'
TO MS-STATUS
WHEN OTHER
MOVE 'ERRO NO BANCO IMS'
TO MS-STATUS
END-EVALUATE
* 3. Envia resposta ao terminal
CALL 'CBLTDLI' USING
WS-SSA-0
WS-FUNC-ISRT
IOPCB
WS-MSG-SAIDA
IF IO-STATUS NOT = SPACES
DISPLAY 'ERRO IOPCB ISRT: ' IO-STATUS
END-IF
GOBACK.
Os primeiros 4 bytes de cada segmento de mensagem IMS tΓͺm um prefixo especial: bytes 1-2 = LL (comprimento total do segmento incluindo o prefixo, binΓ‘rio PIC S9(04) COMP) e bytes 3-4 = ZZ (reservado, deve ser SPACES ou zeros). O IMS usa LL para saber onde termina cada segmento da mensagem de saΓda. Em sistemas com MFS (Message Format Service), o MFS cuida disso automaticamente.
6. SPA β Scratchpad Area para programas conversacionais
A SPA Γ© uma Γ‘rea de memΓ³ria que o IMS persiste entre invocaΓ§Γ΅es consecutivas de um MPP conversacional. Ela permite ao programa "lembrar" o que aconteceu na tela anterior β como a COMMAREA do CICS.
PCB TYPE=TP, IOPCB tipo Terminal Processamento X
EXPRESS=YES, RESPOSTA EXPRESSAMENTE NECESSARIA X
MODIFY=YES PERMITE MODIFICAR O MOD DE SAIDA
*
* SPA: 128 bytes de dados persistentes entre invocacoes
*
PCB TYPE=TP,
ALTPCB=YES
PSBGEN LANG=COBOL,
PSBNAME=PGMCONSPA,
CMPAT=YES COMPATIBILIDADE COM SPA
END
* SPA β 128 bytes persistidos pelo IMS entre chamadas
01 WS-SPA.
05 SPA-TAMANHO PIC S9(04) COMP. -- comprimento SPA (fixo)
05 SPA-TRANCOD PIC X(08). -- codigo transacao retorno
05 SPA-ESTADO PIC X(01). -- 1=inicial 2=confirmacao
05 SPA-CPF PIC 9(11). -- CPF da tela anterior
05 SPA-VALOR PIC S9(11)V99 COMP-3.
05 FILLER PIC X(90).
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING IOPCB PCB-BANCOCLI.
0000-PRINCIPAL.
* GU lΓͺ mensagem E SPA simultaneamente (SPA vem junto)
CALL 'CBLTDLI' USING
WS-SSA-0
WS-FUNC-GU
IOPCB
WS-MSG-ENTRADA -- dados do terminal
IF IO-STATUS NOT = SPACES
GOBACK
END-IF
* SEGUNDA invocaΓ§Γ£o (SPA-ESTADO = '2') β confirmar operacao
IF SPA-ESTADO = '2'
PERFORM 2000-CONFIRMA-OPERACAO
ELSE
* PRIMEIRA invocaΓ§Γ£o β tela inicial
PERFORM 1000-TELA-INICIAL
END-IF
* Atualiza SPA antes de enviar resposta
MOVE '2' TO SPA-ESTADO
MOVE ME-CPF TO SPA-CPF
* ISRT com SPA: envia resposta E persiste SPA
CALL 'CBLTDLI' USING
WS-SSA-0
WS-FUNC-ISRT
IOPCB
WS-SPA -- SPA primeiro
CALL 'CBLTDLI' USING
WS-SSA-0
WS-FUNC-ISRT
IOPCB
WS-MSG-SAIDA -- resposta ao terminal
GOBACK.
7. BMP β Batch Message Processing
Um BMP roda como job batch (via JCL), mas tem acesso ao IMS DC β pode ler mensagens de filas de entrada e escrever em filas de saΓda. Γ usado principalmente para processar grandes volumes de mensagens geradas por outros sistemas, atualizando bancos IMS em modo batch com a capacidade de fazer checkpoints.
1. Processamento de lote de transaΓ§Γ΅es geradas por sistema externo: Sistema de TED gera 100.000 mensagens β fila IMS DC BMP lΓͺ as mensagens, atualiza contas no IMS DB, faz checkpoint a cada 1000 2. GeraΓ§Γ£o de mensagens em lote para terminais: BMP processa extrato mensal e envia mensagens de notificaΓ§Γ£o via fila IMS DC para o sistema de impressΓ£o 3. Reprocessamento de mensagens com erro: Fila de dead-letter IMS β BMP re-tenta com lΓ³gica de compensaΓ§Γ£o
IDENTIFICATION DIVISION.
PROGRAM-ID. PGMTRANSF.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-FUNC-GU PIC X(04) VALUE 'GU '.
01 WS-FUNC-GHU PIC X(04) VALUE 'GHU '.
01 WS-FUNC-REPL PIC X(04) VALUE 'REPL'.
01 WS-FUNC-CHKP PIC X(04) VALUE 'CHKP'.
01 WS-SSA-0 PIC S9(05) COMP VALUE 0.
01 WS-SSA-1 PIC S9(05) COMP VALUE 1.
01 WS-SSA-2 PIC S9(05) COMP VALUE 2.
01 WS-CONTADOR PIC S9(07) COMP-3 VALUE 0.
01 WS-CHKPID PIC X(08) VALUE 'CHKP0001'.
* Mensagem de entrada com dados de transferΓͺncia
01 WS-MSG-TRANSF.
05 MT-CONTA-DEB PIC X(10).
05 MT-CONTA-CRE PIC X(10).
05 MT-VALOR PIC S9(11)V99 COMP-3.
05 MT-CPF PIC 9(11).
01 WS-SEG-CONTA.
05 CTA-NUM PIC X(10).
05 CTA-TIPO PIC X(02).
05 CTA-SALDO PIC S9(13)V99 COMP-3.
05 CTA-STATUS PIC X(01).
05 FILLER PIC X(13).
01 WS-SSA-CTA-QUAL.
05 FILLER PIC X(08) VALUE 'CONTA '.
05 FILLER PIC X(01) VALUE '('.
05 FILLER PIC X(08) VALUE 'CTANUM '.
05 FILLER PIC X(02) VALUE '= '.
05 SSA-CTA-NUM PIC X(10).
05 FILLER PIC X(01) VALUE ')'.
LINKAGE SECTION.
01 IOPCB.
05 IO-LTERM PIC X(08).
05 FILLER PIC XX.
05 IO-STATUS PIC XX.
05 FILLER PIC X(20).
01 PCB-BANCOCLI.
05 PCB-DBD-NAME PIC X(08).
05 PCB-SEG-LEVEL PIC XX.
05 PCB-STATUS PIC XX.
05 PCB-PROC-OPT PIC X(04).
05 FILLER PIC X(04).
05 PCB-SEG-NAME PIC X(08).
05 PCB-KEY-LEN PIC S9(05) COMP.
05 PCB-NUMB-SENS PIC S9(05) COMP.
05 PCB-KEY-FDBK PIC X(21).
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING IOPCB PCB-BANCOCLI.
0000-PRINCIPAL.
PERFORM UNTIL IO-STATUS = 'QC'
PERFORM 1000-LE-MENSAGEM
IF IO-STATUS NOT = 'QC'
PERFORM 2000-PROCESSA-TRANSFERENCIA
ADD 1 TO WS-CONTADOR
IF WS-CONTADOR >= 1000
PERFORM 3000-CHECKPOINT
MOVE 0 TO WS-CONTADOR
END-IF
END-IF
END-PERFORM
DISPLAY 'BMP CONCLUIDO'
GOBACK.
1000-LE-MENSAGEM.
CALL 'CBLTDLI' USING
WS-SSA-0
WS-FUNC-GU
IOPCB
WS-MSG-TRANSF
EVALUATE IO-STATUS
WHEN SPACES CONTINUE
WHEN 'QC' CONTINUE -- fila vazia, fim normal
WHEN OTHER PERFORM 9999-ERRO-DC
END-EVALUATE.
2000-PROCESSA-TRANSFERENCIA.
* Debita conta de origem
MOVE MT-CONTA-DEB TO SSA-CTA-NUM
CALL 'CBLTDLI' USING
WS-SSA-2 WS-FUNC-GHU PCB-BANCOCLI
WS-SEG-CONTA WS-SSA-CLI-QUAL WS-SSA-CTA-QUAL
IF PCB-STATUS = SPACES
SUBTRACT MT-VALOR FROM CTA-SALDO
CALL 'CBLTDLI' USING
WS-SSA-0 WS-FUNC-REPL PCB-BANCOCLI WS-SEG-CONTA
END-IF
* Credita conta de destino
MOVE MT-CONTA-CRE TO SSA-CTA-NUM
CALL 'CBLTDLI' USING
WS-SSA-2 WS-FUNC-GHU PCB-BANCOCLI
WS-SEG-CONTA WS-SSA-CLI-QUAL WS-SSA-CTA-QUAL
IF PCB-STATUS = SPACES
ADD MT-VALOR TO CTA-SALDO
CALL 'CBLTDLI' USING
WS-SSA-0 WS-FUNC-REPL PCB-BANCOCLI WS-SEG-CONTA
END-IF.
8. Checkpoints β CHKP call
O checkpoint Γ© o mecanismo de controle de integridade em jobs IMS longos. A call CHKP comita todas as mudanΓ§as feitas atΓ© aquele ponto no banco IMS e salva o posicionamento atual na fila de mensagens. Se o job falhar, ele pode ser reiniciado a partir do ΓΊltimo checkpoint em vez de recomeΓ§ar do zero.
01 WS-FUNC-CHKP PIC X(04) VALUE 'CHKP'.
01 WS-CHKPID PIC X(08). -- identificador do checkpoint
01 WS-CHKP-LEN PIC S9(05) COMP VALUE 0.
01 WS-CHKP-AREA PIC X(01). -- area de dados do usuΓ‘rio (opcional)
3000-CHECKPOINT.
* Gera ID ΓΊnico para o checkpoint (ex: sequencial)
ADD 1 TO WS-CHKP-SEQ
MOVE WS-CHKP-SEQ TO WS-CHKPID -- ex: '00001 '
* CHKP: comita tudo e salva posiΓ§Γ£o na fila
CALL 'CBLTDLI' USING
WS-SSA-1
WS-FUNC-CHKP
IOPCB
WS-CHKPID -- ID para identificar este checkpoint
WS-CHKP-LEN -- tamanho da area de dados usuario (0 = nenhuma)
WS-CHKP-AREA -- area de dados usuario (ignorada se LEN=0)
IF IO-STATUS NOT = SPACES
DISPLAY 'ERRO NO CHECKPOINT: ' IO-STATUS
PERFORM 9999-ERRO-DC
END-IF
DISPLAY 'CHECKPOINT: ' WS-CHKPID
' REGISTROS: ' WS-CONTADOR.
A frequΓͺncia ideal de checkpoint depende do volume e criticidade. Checkpoints frequentes (a cada 100β500 registros) reduzem o trabalho perdido em caso de falha, mas aumentam overhead de I/O. Checkpoints raros (a cada 10.000) reduzem overhead mas exigem reprocessar muito em caso de falha. Em bancos de alto volume, checkpoints a cada 1.000β2.000 registros Γ© um ponto de equilΓbrio comum.
O terceiro e quarto parΓ’metros do CHKP permitem salvar dados de contexto do programa junto com o checkpoint β por exemplo, contadores, chaves do ΓΊltimo registro processado ou flags de estado. Esses dados sΓ£o recuperados pelo XRST no restart, permitindo que o programa retome exatamente de onde parou sem perder contexto.
9. Restart β XRST e recuperaΓ§Γ£o apΓ³s falha
XRST (Extended Restart) Γ© a call que permite ao BMP retomar a partir do ΓΊltimo checkpoint depois de uma falha. Ela deve ser a primeira DL/I call do programa β antes de qualquer GU ou operaΓ§Γ£o de banco. Se o job estΓ‘ sendo executado pela primeira vez (nΓ£o Γ© um restart), o XRST simplesmente Γ© ignorado sem efeito.
01 WS-FUNC-XRST PIC X(04) VALUE 'XRST'.
01 WS-XRST-LEN PIC S9(05) COMP VALUE 0.
01 WS-XRST-AREA PIC X(01).
01 WS-CHKPID-XRST PIC X(08) VALUE SPACES.
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING IOPCB PCB-BANCOCLI.
0000-PRINCIPAL.
* XRST DEVE SER A PRIMEIRA CALL DO PROGRAMA
* Se for restart, IMS reposiciona na fila e retorna o CHKPID
* Se nΓ£o for restart, XRST retorna status QC e o programa continua
CALL 'CBLTDLI' USING
WS-SSA-1
WS-FUNC-XRST
IOPCB
WS-CHKPID-XRST -- retorna ID do ultimo checkpoint (se restart)
WS-XRST-LEN -- tamanho area usuario (0 = nΓ£o hΓ‘)
WS-XRST-AREA
EVALUATE IO-STATUS
WHEN SPACES
* E restart: IMS reposicionou a fila no ultimo CHKP
DISPLAY 'RESTART A PARTIR DO CHKP: ' WS-CHKPID-XRST
WHEN 'QC'
* Nao e restart: primeira execucao normal
DISPLAY 'PRIMEIRA EXECUCAO - SEM RESTART'
WHEN OTHER
DISPLAY 'ERRO XRST: ' IO-STATUS
PERFORM 9999-ERRO-DC
END-EVALUATE
* A partir daqui, continua o processamento normal
PERFORM UNTIL IO-STATUS = 'QC'
PERFORM 1000-LE-MENSAGEM
IF IO-STATUS NOT = 'QC'
PERFORM 2000-PROCESSA
ADD 1 TO WS-CONTADOR
IF WS-CONTADOR >= 1000
PERFORM 3000-CHECKPOINT
MOVE 0 TO WS-CONTADOR
END-IF
END-IF
END-PERFORM
GOBACK.
/* Restart: adicionar o DD IMSLOGR apontando para o log IMS */ //RESTART EXEC PGM=DFSRRC00, // PARM='BMP,PGMTRANSF,PGMTRANSP,,,,,,,,,,Y,N' //STEPLIB DD DSN=IMS.RESLIB,DISP=SHR // DD DSN=PROD.LOADLIB,DISP=SHR //IMS DD DSN=IMS.PSBLIB,DISP=SHR // DD DSN=IMS.DBDLIB,DISP=SHR //IMSLOGR DD DSN=IMS.RLOGRECD,DISP=SHR /* LOG DE RESTART */ //SYSPRINT DD SYSOUT=* //IEFRDER DD SYSOUT=*
10. JCL para BMP
O JCL de um BMP Γ© similar ao de um DL/I batch, mas com PARM='BMP' em vez de 'DLI' e com DDs adicionais para as filas de mensagens IMS DC.
//BMPTRANS JOB (ACCT),'BMP TRANSFERENCIAS',CLASS=A,MSGCLASS=X //STEP1 EXEC PGM=DFSRRC00, // PARM='BMP,PGMTRANSF,PGMTRANSP,,,,,,,,,,Y,N' // ^ ^ ^ // | | PSB name (PGMTRANSP) // | Programa COBOL (PGMTRANSF) // BMP = Batch Message Processing // //STEPLIB DD DSN=IMS.RESLIB,DISP=SHR // DD DSN=PROD.LOADLIB,DISP=SHR //IMS DD DSN=IMS.PSBLIB,DISP=SHR // DD DSN=IMS.DBDLIB,DISP=SHR //DFSVSAMP DD DSN=IMS.PROCLIB(DFSVSMHP),DISP=SHR //IEFRDER DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //DFSRESLB DD DSN=IMS.RESLIB,DISP=SHR // //* DD para o dataset VSAM do banco IMS //BANCOCLID DD DSN=IMS.BANCOCLI.DATA,DISP=SHR // //* DD para filas IMS DC (nome definido no sistema IMS) //DFSYSDMP DD SYSOUT=*
Diferente do DL/I batch (que roda de forma completamente independente), o BMP precisa que o subsistema IMS DC esteja ativo e acessΓvel. Se o IMS DC estiver down, o BMP falha na inicializaΓ§Γ£o com PARM invΓ‘lido. Em ambientes com janela de manutenΓ§Γ£o do IMS DC, os BMPs precisam ser suspendidos enquanto o DC estΓ‘ offline.
11. Comparativo dos tipos de programa
| CaracterΓstica | DL/I Batch | MPP | BMP |
|---|---|---|---|
| InvocaΓ§Γ£o | JCL batch (scheduler) | IMS DC (mensagem chega) | JCL batch (scheduler) |
| IOPCB | NΓ£o | Sim β obrigatΓ³rio | Sim β lΓͺ filas de mensagens |
| Acesso a IMS DB | Sim β direto | Sim β via PCBs | Sim β via PCBs |
| Requer IMS DC ativo | NΓ£o | Sim | Sim |
| Checkpoint / Restart | NΓ£o (use COMMIT via SMF) | NΓ£o (pseudo-conversacional) | Sim β CHKP + XRST |
| Termina com | GOBACK ou STOP RUN | GOBACK (apΓ³s cada msg) | GOBACK (quando fila vazia) |
| MΓΊltiplas mensagens | N/A | Uma por vez | Loop atΓ© QC (fila vazia) |
| Estado entre chamadas | VariΓ‘veis WS persistem | Apenas via SPA | VariΓ‘veis WS persistem no loop |
| PARM do JCL | DLI,pgm,psb | Definido no MFS / transaΓ§Γ£o DC | BMP,pgm,psb |
VocΓͺ chegou ao fim da trilha IMS com uma base sΓ³lida: entende o modelo hierΓ‘rquico, sabe escrever e depurar todas as DL/I calls, domina SSAs avanΓ§ados com command codes, consegue ler e interpretar DBD e PSB, e agora entende como programas online (MPP) e batch com mensagens (BMP) funcionam no IMS DC. O prΓ³ximo nΓvel Γ© praticar com bancos reais β e para isso, cada empresa tem seu ambiente e seus DBDs especΓficos que vocΓͺ vai aprender lendo a documentaΓ§Γ£o interna e consultando o DBA.