| 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.
Sem comentários:
Enviar um comentário