Translate

Mostrar mensagens com a etiqueta handle condition. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta handle condition. Mostrar todas as mensagens

segunda-feira, 13 de março de 2023

Os Holocrons Esquecidos do Tratamento de Erros no IBM Z – O Lado Sombrio das Exceções - Parte III

 

Bellacosa Mainframe e o tratamento de erros em cobol parte III



EXCEPTION/ERROR Procedures em COBOL

Os Holocrons Esquecidos do Tratamento de Erros no IBM Z

Parte 3 – O Lado Sombrio das Exceções

LE, CICS HANDLE CONDITION, ON EXCEPTION, CEEHDLR, Dumps, Fault Analyzer, IPCS e os Monstros do S0C4

Por Bellacosa Mainframe


"Um Padawan trata FILE STATUS. Um Cavaleiro domina DECLARATIVES. Um Mestre Bellacosa sabe conversar com o Language Environment enquanto observa um CEEDUMP às três horas da manhã."

Mestre Bellacosa Sysprog Jedi


Introdução

Na Parte 1 aprendemos:

  • DECLARATIVES

  • USE AFTER ERROR PROCEDURE

  • Tratamento centralizado

Na Parte 2 aprendemos:

  • FILE STATUS

  • VSAM

  • Retry

  • Logging

  • Frameworks corporativos

Mas existe um outro universo.

Muito mais sombrio.

Muito mais antigo.

Muito mais poderoso.

O universo chamado:

Language Environment

Ou simplesmente.

LE


O que é LE?

LE significa.

Language Environment.


É o runtime comum.

De várias linguagens.

No z/OS.

Suporta.

COBOL

PL/I

C

C++

Metal C

Assembler


Visualmente.

Programa COBOL

↓

Language Environment

↓

z/OS

↓

Hardware

O que acontece quando ocorre um erro?

Exemplo.

DIVIDE A

BY B

B.

Vale.

Zero.


Resultado.

Exceção.


LE detecta.


Avalia.

Condition Handler.


Decide.

Continuar.

Terminar.

Gerar dump.


Condition Handling

LE trabalha.

Com condições.


Exemplos.

CEE3207S

CEE0813S

CEE0198S

CEE3250C


Muito conhecidos.


Exemplo

Overflow.

COMPUTE TOTAL

=

99999999999999

*

99999999999999

LE.

Captura.


Mensagem.

CEE3207S

ON SIZE ERROR

Primeira linha.

De defesa.


Exemplo.

ADD A TO B

ON SIZE ERROR

DISPLAY 'ERRO'

Muito elegante.


ON EXCEPTION

Outro mecanismo.


JSON.

JSON PARSE

WS-JSON


ON EXCEPTION


DISPLAY 'ERRO'

XML.

Também.


STRING.

Também.


CEEHDLR

Aqui começa.

A magia.


Pouquíssimos conhecem.


CEEHDLR.

Permite.

Criar.

Condition Handlers.

Personalizados.


Arquitetura.

Erro


↓

LE


↓

CEEHDLR


↓

Handler


↓

Aplicação

Muito sofisticado.


CEESGL

Outra API.


Sinalização.

Condições.


Pouco usada.


Muito poderosa.


Exemplo conceitual

CALL 'CEEHDLR'

Handler.

Registrado.


Toda exceção.

Passa.

Por ele.


CICS HANDLE CONDITION

Outro Holocron.

Muito famoso.


Exemplo.

EXEC CICS

HANDLE CONDITION

NOTFND(ERRO1)

ENDFILE(ERRO2)

END-EXEC

Muito elegante.


CICS.

Intercepta.

Condição.


Transfere.

Controle.


HANDLE ABEND

Mais poderoso.


Exemplo.

EXEC CICS

HANDLE ABEND

LABEL(ABEND1)

END-EXEC

Padawan.

Protegido.


S0C4

O rei.

Dos monstros.


Endereço inválido.


Overlay.


Heap.

Corrompido.


Pointer.

Errado.


Resultado.

SOC4.


SOC7

Muito comum.


Decimal inválido.


Exemplo.

Campo.

COMP-3.

Corrompido.


SOC7.


S0CB

Divide.

Por zero.


Muito clássico.


S878

Storage.

Exhausted.


Leak.

Heap.


Muito desagradável.


Dumps

O arqueólogo.

Do IBM Z.

Ama.

Dumps.


Tipos.

SYSUDUMP

CEEDUMP

SYSABEND

SNAP


CEEDUMP

Excelente.

Mostra.

Heap.

Stack.

Pointers.

Condition Handlers.


Muito útil.


Fault Analyzer

Fantástico.


Exemplo.

Mostra.

Linha COBOL.

Offset.

Variável.

Registradores.


Tempo.

Economizado.

Enorme.


Abend-AID

Outro clássico.


Muito amado.

Por bancos.


IPCS

O Holocron Supremo.


Ferramenta.

Dos sysprogs.


Comandos.

VERBX

IPCS

LIST

TRACE


Pouco amigável.


Muito poderosa.


Como funciona na memória?

LE mantém.

Stack.

Heap.

Tabela.

Condition Handlers.


Visualmente.

Stack


↓


Programa



↓


LE



↓


Handler

Erro.


LE consulta.

Tabela.


Executa.

Handler.


Performance

Excelente.


Handlers.

Quase.

Zero overhead.


Só atuam.

Quando necessário.


Segurança

Importante.


Permite.

Mascarar.

Informações.

Sensíveis.


Evita.

Expor.

Dados.

No dump.


Muito útil.

LGPD.

PCI.

SOX.


Framework Bellacosa

Arquitetura.

Erro


↓

LE


↓

CEEHDLR


↓

Logger


↓

MQ


↓

Splunk


↓

OpenTelemetry


↓

SOC Team

Muito moderna.


Curiosidades

Muitos bancos.

Possuem.

Condition Handlers.

Criados.

Há décadas.


Funcionam.

Até hoje.


Curiosidade 2

Grande parte.

Dos SOC4.

Não acontece.

Em teste.


Aparece.

Produção.


Sexta-feira.


23h58.


Naturalmente.


Curiosidade 3

Muitos desenvolvedores.

Nunca.

Viram.

CEEHDLR.


Mesmo após.

20 anos.

COBOL.


Bellacosa Best Practices

Sempre.

ON EXCEPTION.


Sempre.

ON SIZE ERROR.


Sempre.

Fault Analyzer.


Sempre.

CEEDUMP.


Sempre.

Logging.


Nunca.

Ignorar.

SOC7.


Nunca.

Ignorar.

SOC4.


Documente.

Tudo.


O Conselho do Mestre Bellacosa

Os erros mais perigosos do IBM Z raramente são aqueles previstos nos requisitos.

Eles vivem escondidos.

Nos registradores.

Nos heaps.

Nas pilhas.

Nos ponteiros esquecidos.

Nos buffers corrompidos.

E aguardam pacientemente o fechamento contábil do mês para se manifestar.

O jovem Padawan aprende FILE STATUS.

O Cavaleiro domina DECLARATIVES.

Mas o Mestre Bellacosa conversa com o Language Environment, lê um CEEDUMP como quem consulta um antigo manuscrito e utiliza CEEHDLR para interceptar exceções antes que elas se transformem em monstros capazes de derrubar uma galáxia inteira de jobs batch.

Porque talvez a maior lição desta jornada seja simples.

Um programa COBOL verdadeiramente robusto não é aquele que nunca falha.

É aquele que sabe exatamente o que fazer quando inevitavelmente a falha decide aparecer.


Continua na Parte 4

O Mestre Bellacosa – Frameworks Corporativos de Tratamento de Erros, MQ Dead Letter Queue, APIs JSON, OpenTelemetry, Splunk, Elastic, Observabilidade e a Arte Jedi de Transformar Falhas em Conhecimento.


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.

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988