Translate

Mostrar mensagens com a etiqueta exec cics. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta exec cics. Mostrar todas as mensagens

quinta-feira, 5 de julho de 2012

☕🔥 CICS NA PRÁTICA — EXEMPLOS REAIS COM RESP E RESP2

 

Bellacosa Mainframe uso correto do resp1 e resp2 em comandos cics

☕🔥 CICS NA PRÁTICA — EXEMPLOS REAIS COM RESP E RESP2

Como Programadores Enterprise Tratam Erros, Controle Transacional e Exceções no Mundo IBM Z

No CICS profissional…

não basta executar comandos.

Você precisa:

  • validar retorno,

  • tratar erro,

  • evitar abend,

  • proteger integridade,

  • controlar concorrência,

  • garantir recovery.

E é aqui que entram:

RESP()
RESP2()

🔥 O QUE É RESP?

RESP:

  • retorna o código principal do resultado do comando CICS.

Exemplo:

EXEC CICS READ
     FILE('CLIENTE')
     RIDFLD(WS-CHAVE)
     INTO(WS-REG)
     RESP(WS-RESP)
END-EXEC

☕ O QUE É RESP2?

RESP2:

  • retorna detalhes adicionais do erro.

É o “subcódigo”.


Exemplo clássico

RESP:

NOTFND

RESP2:

80

Indica detalhe interno específico do recurso.


🔥 PADRÃO PROFISSIONAL

Todo sistema enterprise usa algo parecido com isto:

01 WS-RESP     PIC S9(8) COMP.
01 WS-RESP2    PIC S9(8) COMP.

☕ EXEMPLO 1 — READ FILE COM VALIDAÇÃO


Objetivo

Ler cliente VSAM.


EXEC CICS READ
     FILE('CLIENTE')
     RIDFLD(WS-CLIENTE-ID)
     INTO(WS-CLIENTE)
     LENGTH(WS-LEN)
     RESP(WS-RESP)
     RESP2(WS-RESP2)
END-EXEC

EVALUATE WS-RESP

    WHEN DFHRESP(NORMAL)

         DISPLAY 'CLIENTE ENCONTRADO'

    WHEN DFHRESP(NOTFND)

         DISPLAY 'CLIENTE NAO EXISTE'
         DISPLAY 'RESP2: ' WS-RESP2

    WHEN DFHRESP(NOTOPEN)

         DISPLAY 'ARQUIVO FECHADO'

    WHEN OTHER

         DISPLAY 'ERRO CICS'
         DISPLAY 'RESP=' WS-RESP
         DISPLAY 'RESP2=' WS-RESP2

END-EVALUATE

🔥 EXPLICAÇÃO DOS PARÂMETROS

ParâmetroFunção
FILENome lógico do FCT
RIDFLDChave VSAM
INTOÁrea destino
LENGTHTamanho do registro
RESPCódigo principal
RESP2Detalhe técnico

☕ EXEMPLO 2 — WRITE COM DUPREC


EXEC CICS WRITE
     FILE('CLIENTE')
     FROM(WS-REGISTRO)
     RIDFLD(WS-CHAVE)
     RESP(WS-RESP)
     RESP2(WS-RESP2)
END-EXEC

IF WS-RESP = DFHRESP(DUPREC)

    DISPLAY 'CHAVE DUPLICADA'
    DISPLAY 'RESP2=' WS-RESP2

END-IF

🔥 O QUE É DUPREC?

Duplicate Record.

Ocorre quando:

  • chave já existe no KSDS.


☕ EXEMPLO 3 — READ UPDATE + REWRITE


Cenário

Atualização segura com lock.


EXEC CICS READ
     FILE('CLIENTE')
     RIDFLD(WS-CHAVE)
     INTO(WS-REG)
     UPDATE
     RESP(WS-RESP)
     RESP2(WS-RESP2)
END-EXEC

UPDATE

Esse parâmetro:

  • trava o registro,

  • impede alteração simultânea.


Depois:

MOVE 'ATIVO' TO WS-STATUS

EXEC CICS REWRITE
     FILE('CLIENTE')
     FROM(WS-REG)
     RESP(WS-RESP)
     RESP2(WS-RESP2)
END-EXEC

☕ ERRO COMUM

Esquecer:

  • REWRITE

  • UNLOCK

  • SYNCPOINT

Resultado:
🔥 lock pendurado.


🔥 EXEMPLO 4 — HANDLE CONDITION


EXEC CICS HANDLE CONDITION
     NOTFND(SEM-REG)
     DUPREC(REG-DUP)
     ERROR(ERRO-GERAL)
END-EXEC

Como funciona?

Se ocorrer:

  • NOTFND → desvia para SEM-REG

  • DUPREC → REG-DUP

  • ERROR → ERRO-GERAL


Vantagem

Evita:

IF RESP = ...

em todos comandos.


☕ EXEMPLO 5 — LINK


EXEC CICS LINK
     PROGRAM('CADCLI')
     COMMAREA(WS-COMMAREA)
     LENGTH(LENGTH OF WS-COMMAREA)
     RESP(WS-RESP)
     RESP2(WS-RESP2)
END-EXEC

Explicação

ParâmetroFunção
PROGRAMPrograma chamado
COMMAREAÁrea compartilhada
LENGTHTamanho
RESPResultado

O LINK retorna

Diferente do XCTL.


☕ EXEMPLO 6 — XCTL


EXEC CICS XCTL
     PROGRAM('MENU001')
     COMMAREA(WS-COMM)
     LENGTH(100)
END-EXEC

Diferença crítica

LINKXCTL
retornanão retorna
empilhasubstitui
subrotinatransferência

🔥 EXEMPLO 7 — RETURN COMMAREA


EXEC CICS RETURN
     TRANSID('MEN1')
     COMMAREA(WS-COMM)
     LENGTH(LENGTH OF WS-COMM)
END-EXEC

TRANSID

Transação reiniciada quando usuário pressionar ENTER.


COMMAREA

Preserva contexto.


☕ EXEMPLO 8 — SEND MAP


EXEC CICS SEND MAP('TELA01')
     MAPSET('MAPSET1')
     FROM(WS-MAPA)
     ERASE
     CURSOR
     RESP(WS-RESP)
END-EXEC

Explicação

ParâmetroFunção
MAPNome do mapa
MAPSETBiblioteca BMS
FROMDados
ERASELimpa tela
CURSORPosiciona cursor

☕ EXEMPLO 9 — RECEIVE MAP


EXEC CICS RECEIVE MAP('TELA01')
     MAPSET('MAPSET1')
     INTO(WS-MAPA)
     RESP(WS-RESP)
END-EXEC

O RECEIVE captura

  • ENTER

  • PFKEY

  • campos digitados


🔥 EXEMPLO 10 — WRITEQ TS


EXEC CICS WRITEQ TS
     QUEUE('FILA001')
     FROM(WS-DADOS)
     LENGTH(200)
     RESP(WS-RESP)
     RESP2(WS-RESP2)
END-EXEC

TS Queue

Usada para:

  • sessão,

  • paginação,

  • cache,

  • workflow.


☕ EXEMPLO 11 — READQ TS


EXEC CICS READQ TS
     QUEUE('FILA001')
     INTO(WS-DADOS)
     ITEM(1)
     RESP(WS-RESP)
END-EXEC

ITEM

Lê item específico da fila.


🔥 EXEMPLO 12 — STARTBR + READNEXT


STARTBR

EXEC CICS STARTBR
     FILE('CLIENTE')
     RIDFLD(WS-CHAVE)
     GTEQ
     RESP(WS-RESP)
END-EXEC

GTEQ

Começa:

  • na chave,

  • ou próxima maior.


READNEXT

EXEC CICS READNEXT
     FILE('CLIENTE')
     INTO(WS-REG)
     RIDFLD(WS-CHAVE)
     RESP(WS-RESP)
END-EXEC

ENDFILE

Fim do browse.


☕ EXEMPLO 13 — SYNCPOINT


EXEC CICS SYNCPOINT
     RESP(WS-RESP)
     RESP2(WS-RESP2)
END-EXEC

O que ele faz?

Commit de:

  • VSAM

  • DB2

  • MQ

  • TS recoverable


ROLLBACK

EXEC CICS SYNCPOINT ROLLBACK
END-EXEC

🔥 EXEMPLO 14 — ABEND CONTROLADO


EXEC CICS ABEND
     ABCODE('ER01')
     NODUMP
END-EXEC

ABCODE

Código customizado.


NODUMP

Evita dump completo.


☕ EXEMPLO 15 — GETMAIN


EXEC CICS GETMAIN
     SET(WS-PTR)
     LENGTH(1024)
     INITIMG(X'00')
     RESP(WS-RESP)
END-EXEC

INITIMG

Inicializa memória.


☕ EXEMPLO 16 — FREEMAIN


EXEC CICS FREEMAIN
     DATAPOINTER(WS-PTR)
     RESP(WS-RESP)
END-EXEC

ERRO CLÁSSICO

Não liberar storage:
🔥 SOS CONDITION.


🔥 EXEMPLO 17 — ENQ / DEQ


ENQ

EXEC CICS ENQ
     RESOURCE('CLIENTE001')
     LENGTH(10)
     RESP(WS-RESP)
END-EXEC

RESOURCE

Nome lógico protegido.


DEQ

EXEC CICS DEQ
     RESOURCE('CLIENTE001')
END-EXEC

☕ EXEMPLO 18 — START


EXEC CICS START
     TRANSID('TRN1')
     FROM(WS-DADOS)
     LENGTH(100)
     INTERVAL(000500)
     RESP(WS-RESP)
END-EXEC

INTERVAL

Dispara:

  • após 5 minutos.


🔥 EXEMPLO 19 — DELAY


EXEC CICS DELAY
     FOR SECONDS(5)
END-EXEC

DELAY

Suspende task.


☕ EXEMPLO 20 — WRITE OPERATOR


EXEC CICS WRITE OPERATOR
     TEXT('ERRO CRITICO')
     TEXTLENGTH(13)
     RESP(WS-RESP)
END-EXEC

Envia mensagem para

  • console operador,

  • automação,

  • suporte.


🔥 O SEGREDO DOS SISTEMAS ENTERPRISE

Os melhores sistemas CICS:

  • validam RESP sempre,

  • usam HANDLE CONDITION estrategicamente,

  • controlam locks,

  • fazem rollback corretamente,

  • evitam storage leak,

  • minimizam pseudo-conversação incorreta.


☕ CONCLUSÃO

Programar CICS profissionalmente não é apenas “executar comandos”.

É entender:

  • concorrência,

  • recovery,

  • sincronização,

  • gerenciamento de recursos,

  • integridade transacional,

  • comportamento interno da região CICS.

E é exatamente isso que separa:

  • um programador COBOL comum,
    de

  • um verdadeiro engenheiro IBM Z enterprise.

domingo, 6 de maio de 2012

☕🔥 CICS COMMANDS — O UNIVERSO OCULTO QUE MOVE O MAINFRAME MUNDIAL

 

Bellacosa Mainframe e os comandos cics mainframe

☕🔥 CICS COMMANDS — O UNIVERSO OCULTO QUE MOVE O MAINFRAME MUNDIAL

A Anatomia Completa dos Comandos CICS Que Todo Programador IBM Z Precisa Dominar

O CICS (Customer Information Control System) não é apenas um monitor transacional.

Ele é o “sistema nervoso” de milhares de bancos, companhias aéreas, seguradoras, governos e bolsas de valores.

Enquanto aplicações web modernas fazem milhões de chamadas REST…

o CICS já fazia processamento transacional distribuído, controle de concorrência, recuperação automática, segurança, filas, locking e gerenciamento de sessões desde os anos 70.

E tudo isso através dos famosos:

EXEC CICS
END-EXEC

A lista enviada contém praticamente o “arsenal clássico” do programador CICS.

Agora vamos muito além da referência.

Vamos explorar:

  • arquitetura,

  • filosofia,

  • comportamento interno,

  • performance,

  • armadilhas,

  • uso real em produção,

  • relação com VSAM,

  • pseudo-conversação,

  • concorrência,

  • recovery,

  • e o impacto histórico de cada grupo de comandos.


🔥 1 — A FILOSOFIA DO CICS

Antes de entender comandos…

precisa entender o modelo mental do CICS.

O CICS NÃO funciona como batch.

No batch:

  • programa começa,

  • executa,

  • termina.

No CICS:

  • milhares de tarefas coexistem,

  • compartilham memória,

  • disputam recursos,

  • acessam arquivos simultaneamente,

  • conversam com terminais,

  • podem ser interrompidas,

  • retomadas,

  • rollbackadas,

  • sincronizadas.

Por isso os comandos CICS existem.

Eles são uma “API do sistema operacional transacional”.


☕ 2 — OS COMANDOS MAIS IMPORTANTES DA HISTÓRIA DO CICS

Se fosse montar o “Top Tier” dos comandos mais usados no mundo real:

CategoriaComandos
Navegação de telaSEND, RECEIVE, SEND MAP
Fluxo de programaLINK, XCTL, RETURN
Arquivos VSAMREAD, WRITE, REWRITE, DELETE
BrowseSTARTBR, READNEXT, ENDBR
FilasWRITEQ TS, READQ TS
Tratamento de erroHANDLE CONDITION
Controle transacionalSYNCPOINT
MemóriaGETMAIN, FREEMAIN
ConcorrênciaENQ, DEQ
TemporizaçãoSTART, DELAY
Debug/RecoveryABEND, DUMP

Esses comandos sustentam literalmente bilhões de transações diárias.


🔥 3 — LINK vs XCTL — O DUELO MAIS IMPORTANTE DO CICS

EXEC CICS LINK

EXEC CICS LINK PROGRAM('PROG2')
END-EXEC

O LINK:

  • chama outro programa,

  • espera terminar,

  • volta para o chamador.

É semelhante ao:

  • CALL COBOL,

  • subrotina,

  • procedure call.

Mas com superpoderes:

  • troca de contexto CICS,

  • proteção transacional,

  • comunicação entre regiões,

  • syncpoint awareness.


EXEC CICS XCTL

EXEC CICS XCTL PROGRAM('MENU001')
END-EXEC

Aqui o programa atual MORRE.

O controle é transferido.

Não existe retorno.

É praticamente um:

  • GOTO inter-programas.


Impacto arquitetural

LINK:

  • aumenta stack lógica,

  • mantém contexto,

  • pode gerar encadeamentos enormes.

XCTL:

  • economiza recursos,

  • reduz profundidade,

  • muito usado em menus.


☕ 4 — O CORAÇÃO DO CICS: SEND e RECEIVE

Sem SEND/RECEIVE…

não existiria terminal 3270.


SEND MAP

EXEC CICS SEND MAP('TELA1')
END-EXEC

O BMS:

  • formata tela,

  • monta buffer 3270,

  • gerencia atributos,

  • protege campos,

  • controla cursor.


RECEIVE MAP

EXEC CICS RECEIVE MAP('TELA1')
END-EXEC

Recebe:

  • ENTER,

  • PFKEY,

  • PAKEY,

  • dados digitados.


O detalhe histórico incrível

Os terminais 3270 NÃO eram “burros”.

Eles tinham:

  • buffer local,

  • atributos físicos,

  • otimização de transmissão.

O CICS explorava isso décadas antes do AJAX existir.


🔥 5 — HANDLE CONDITION — A “EXCEPTION” DO MUNDO MAINFRAME

EXEC CICS HANDLE CONDITION
     NOTFND(SEM-REGISTRO)
END-EXEC

É o ancestral dos:

  • try/catch,

  • exception handlers,

  • middleware exception routing.


O que poucos entendem

HANDLE CONDITION NÃO captura COBOL errors.

Ele captura:

  • RESP CICS,

  • condições transacionais,

  • erros de recurso,

  • timeouts,

  • locks,

  • fim de browse.


Problema clássico

Junior faz:

READ FILE
IF RESP NOT = NORMAL

Veterano faz:

HANDLE CONDITION
    NOTFND(...)
    DUPREC(...)
    ENDFILE(...)

Porque:

  • reduz boilerplate,

  • melhora legibilidade,

  • segue padrão CICS.


☕ 6 — READ UPDATE + REWRITE — O LOCK INVISÍVEL

Esse é um dos conceitos mais importantes do CICS.


READ UPDATE

EXEC CICS READ
     FILE('CLIENTE')
     RIDFLD(CHAVE)
     UPDATE
END-EXEC

Aqui o registro fica LOCKADO.

Nenhuma outra task altera.


Depois:

EXEC CICS REWRITE
END-EXEC

ou:

EXEC CICS UNLOCK
END-EXEC

O perigo mortal

Se esquecer:

  • REWRITE,

  • DELETE,

  • UNLOCK,

  • SYNCPOINT,

você cria:

  • contention,

  • deadlocks,

  • waits,

  • tasks congeladas.

Isso derruba produção REAL.


🔥 7 — STARTBR / READNEXT — O “CURSOR VSAM”

Esses comandos implementam navegação sequencial.


STARTBR

EXEC CICS STARTBR
     FILE('CLI')
     RIDFLD(CHAVE)
END-EXEC

Abre um browse.


READNEXT

EXEC CICS READNEXT
END-EXEC

Lê o próximo.


ENDBR

EXEC CICS ENDBR
END-EXEC

Fecha browse.


Isso é equivalente ao quê?

Praticamente um cursor DB2.

Mas para:

  • VSAM KSDS,

  • RRDS,

  • ESDS.


☕ 8 — WRITEQ TS — O REDIS DOS ANOS 80

Temporary Storage Queue.


WRITEQ TS

EXEC CICS WRITEQ TS
     QUEUE('TEMP01')
END-EXEC

READQ TS

EXEC CICS READQ TS
END-EXEC

O que isso fazia?

Muito antes de:

  • Redis,

  • Memcached,

  • sessões web,

o CICS já tinha:

  • filas temporárias,

  • compartilhamento de estado,

  • persistência opcional,

  • armazenamento em memória ou disco.


TS Queue virou:

  • sessão web primitiva,

  • cache transacional,

  • passing area,

  • workflow storage.


🔥 9 — SYNCPOINT — O COMMIT DO CICS

EXEC CICS SYNCPOINT
END-EXEC

Esse comando é MONSTRUOSAMENTE importante.

Ele sincroniza:

  • VSAM,

  • DB2,

  • MQ,

  • journals,

  • recoverable TS queues.


Sem SYNCPOINT

Nada é garantido.


Com ROLLBACK

EXEC CICS SYNCPOINT ROLLBACK
END-EXEC

Tudo volta.


Isso é engenharia de altíssimo nível

O CICS fazia two-phase commit quando boa parte do mundo ainda usava arquivos flat sem recovery.


☕ 10 — GETMAIN / FREEMAIN — O malloc/free DO CICS


GETMAIN

EXEC CICS GETMAIN
     SET(PTR)
     LENGTH(1000)
END-EXEC

Aloca memória.


FREEMAIN

EXEC CICS FREEMAIN
     DATA(PTR)
END-EXEC

Libera memória.


O problema clássico

Se esquecer FREEMAIN:

🔥 storage leak.

E em CICS:

  • leak = SOS condition,

  • região degradando,

  • task abending,

  • operação entrando em pânico.


🔥 11 — ENQ / DEQ — O CONTROLE DE CONCORRÊNCIA EMPRESARIAL


ENQ

EXEC CICS ENQ
     RESOURCE('CLIENTE123')
END-EXEC

Reserva recurso lógico.


DEQ

EXEC CICS DEQ
END-EXEC

Libera.


Isso é fundamental porque:

Em sistemas financeiros:

  • duas tasks NÃO podem atualizar simultaneamente.


Exemplos reais

  • saldo bancário,

  • limite de cartão,

  • número de apólice,

  • geração de boleto,

  • emissão de passagem aérea.


☕ 12 — ABEND — O GRITO DE SOCORRO DO CICS

EXEC CICS ABEND
     ABCODE('ERRO')
END-EXEC

Força abend.


Por que isso existe?

Porque às vezes continuar é PIOR.

O ABEND:

  • protege integridade,

  • força rollback,

  • gera dump,

  • interrompe corrupção.


Grandes sistemas usam isso estrategicamente

Em ambientes críticos:

  • “falhar rápido” é mais seguro.


🔥 13 — DUMP — A AUTÓPSIA DIGITAL

EXEC CICS DUMP
END-EXEC

Gera snapshot da região.


Dump contém:

  • memória,

  • TCA,

  • TWA,

  • COMMAREA,

  • registers,

  • control blocks,

  • trace.


O dump é literalmente:

a caixa-preta do avião do mainframe.


☕ 14 — START — O AGENDADOR INTERNO

EXEC CICS START
     TRANSID('TRN1')
END-EXEC

Agenda transação futura.


Isso criou:

  • workflows,

  • processamento assíncrono,

  • retries automáticos,

  • timers,

  • batch online.

Muito antes de:

  • Kafka,

  • cron distribuído,

  • microservices schedulers.


🔥 15 — RETURN COMMAREA — O SEGREDO DA PSEUDO-CONVERSAÇÃO

Esse é o conceito MAIS IMPORTANTE do CICS clássico.


O problema

Terminal é lento.

Não dá para deixar task presa esperando usuário digitar.


Solução genial do CICS

A task termina.

Mas guarda estado.


RETURN COMMAREA

EXEC CICS RETURN
     TRANSID('MENU')
     COMMAREA(AREA)
END-EXEC

O que acontece?

  1. Task termina

  2. Usuário pensa

  3. Nova task nasce

  4. COMMAREA restaura contexto


Isso revolucionou computação

Pseudo-conversação:

  • economiza memória,

  • aumenta escalabilidade,

  • permite milhares de usuários simultâneos.

Esse conceito foi MUITO à frente do seu tempo.


☕ 16 — O QUE SEPARA UM JUNIOR DE UM VETERANO CICS

Junior:

  • aprende sintaxe.

Veterano:

  • entende:

    • locking,

    • pseudo-conversação,

    • recovery,

    • task lifetime,

    • syncpoint,

    • storage,

    • contention,

    • dispatching,

    • response time.


🔥 17 — A VERDADE QUE POUCOS FALAM SOBRE CICS

Muitos pensam:

“CICS é antigo.”

Mas a realidade é:

O CICS resolveu:

  • concorrência massiva,

  • alta disponibilidade,

  • transação distribuída,

  • recovery,

  • rollback,

  • escalabilidade,

  • segurança,

  • workload management,

décadas antes da computação moderna reinventar esses conceitos.

Grande parte do que hoje chamam:

  • microservices,

  • orchestration,

  • transactional middleware,

  • distributed coordination,

o CICS já fazia em produção bancária desde o século passado.


☕ CONCLUSÃO — O CICS NÃO É APENAS UM PRODUTO

É UMA DAS MAIORES OBRAS DE ENGENHARIA DA HISTÓRIA DA COMPUTAÇÃO

Cada comando CICS carrega:

  • décadas de evolução,

  • engenharia enterprise,

  • otimização extrema,

  • compatibilidade histórica,

  • confiabilidade absurda.

Quando alguém escreve:

EXEC CICS READ

existe um universo inteiro acontecendo por trás:

  • locks,

  • buffers,

  • recovery,

  • journaling,

  • dispatching,

  • integrity control,

  • syncpoint management,

  • task scheduling.

E é exatamente isso que torna o mundo IBM Z tão fascinante.