Translate

Mostrar mensagens com a etiqueta Programação COBOL. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Programação COBOL. Mostrar todas as mensagens

segunda-feira, 2 de março de 2026

☕ “CALL ‘SABEDORIA’ USING PADAWAN” — O Guia Definitivo de Subprogramação COBOL Que Separa Aprendizes de Mestres do Mainframe

 

Bellacosa Mainframe exemplifica call no Cobol

☕ “CALL ‘SABEDORIA’ USING PADAWAN” — O Guia Definitivo de Subprogramação COBOL Que Separa Aprendizes de Mestres do Mainframe

Se você acha que subprogramação em COBOL é só “CALL e pronto”… prepare-se.
Você está prestes a atravessar a porta que leva do programador de exercícios para o engenheiro de sistemas que mantém bancos funcionando 💎

Neste artigo, vou falar com você — jovem Padawan do mainframe — no melhor estilo Bellacosa: direto, prático, cheio de contexto real, curiosidades históricas e aquelas “armadilhas invisíveis” que só aparecem em produção às 3h da manhã.

Pegue seu café ☕. Vamos lá.


🧠 Por que subprogramação é o coração do COBOL?

Grandes sistemas COBOL NÃO são programas gigantes.

Eles são:

👉 Redes de módulos especializados
👉 Bibliotecas corporativas compartilhadas
👉 Camadas de negócio reutilizáveis
👉 Serviços internos antes da palavra “microservice” existir

Um sistema bancário típico executa milhares de subprogramas por segundo.


🧩 O que é um Subprograma, afinal?

Um subprograma é um programa COBOL independente que:

✔ Pode ser chamado por outro
✔ Executa uma tarefa específica
✔ Recebe dados
✔ Retorna resultados
✔ Continua existindo sozinho

Em termos modernos:

É como uma função gigante com superpoderes de desempenho.


📞 O ritual sagrado: CALL

Programa principal (Caller)

CALL "CALCJURO" USING WS-VALOR WS-RESULT

Subprograma (Callee)

LINKAGE SECTION.
01 VALOR PIC 9(7)V99.
01 RESULT PIC 9(7)V99.

PROCEDURE DIVISION USING VALOR RESULT.
COMPUTE RESULT = VALOR * 1.05
GOBACK.

💥 Pronto. Comunicação entre programas.


🔗 Easter Egg #1 — COBOL já fazia “APIs internas” nos anos 70

Antes de REST, SOAP, gRPC…

Mainframes já tinham bibliotecas de serviços corporativos reutilizáveis.


📦 O segredo oculto: LINKAGE SECTION

Padawan, grave isto na pedra:

Sem LINKAGE SECTION, não há parâmetros.

Ela define a interface do subprograma — o “contrato”.


🔄 Como os dados são passados?

🔹 BY REFERENCE (padrão)

👉 Mesma área de memória
👉 Alterações retornam

CALL "PGM" USING WS-DATA

💎 Rápido, eficiente, poderoso… e perigoso.


🔹 BY CONTENT

👉 Cópia do valor
👉 Caller não vê mudanças

CALL "PGM" USING BY CONTENT WS-DATA

🔹 BY VALUE

👉 Valor literal — comum com C/Java


⚠️ Easter Egg #2 — A causa invisível de bugs fantasma

90% dos “dados misteriosamente alterados” em sistemas antigos são BY REFERENCE mal usado.


🧭 Quem é o Main Program?

Plot twist:

👉 O código não define.
👉 O ambiente define.

No batch:

➡ O programa do EXEC no JCL é o principal.

Em CICS:

➡ O ambiente decide.

O mesmo módulo pode ser:

✔ Main hoje
✔ Subprograma amanhã
✔ Serviço compartilhado depois


🧩 Embedded vs External — A Guerra dos Módulos

🧱 Embedded (Contained)

✔ Dentro do mesmo source
✔ Compilado junto
✔ Uso local

MAIN
└─ SUB-A (no mesmo arquivo)

🌐 External

✔ Fonte separado
✔ Compilado independente
✔ Reutilizável

👉 Padrão dominante nas empresas.


🏦 Curiosidade real

Alguns subprogramas bancários:

💰 Executam bilhões de vezes
📅 Estão em produção há décadas
🧠 São mais antigos que muitos programadores


🛑 Como terminar um programa corretamente?

Padawan, memorize isso:

ComandoSubprogramaMain Program
GOBACKRetornaEncerra
EXIT PROGRAMRetorna❌ Não usar
STOP RUN💀 Mata tudoEncerra

⚠️ Easter Egg #3 — O botão nuclear

Um STOP RUN dentro de um subprograma compartilhado pode derrubar:

💥 Transações online
💥 Jobs batch inteiros
💥 Sistemas críticos

Sim, já aconteceu.


📡 Comunicação entre Programas — Três níveis de poder

🟦 Local

Só dentro do programa.

👉 Padrão.


🌍 Global

Programa + subprogramas embutidos.


🌐 External

Todos os programas da run unit.

👉 Use com extremo cuidado.


⚠️ Regra de Ouro Corporativa

Prefira parâmetros explícitos a variáveis globais.

Isso é engenharia profissional.


📥 RETURNING — O modo “função moderna”

Alguns compiladores permitem retorno explícito:

CALL "SUB"
USING IN-DATA
RETURNING OUT-DATA

Subprograma:

PROCEDURE DIVISION USING IN-DATA
RETURNING OUT-DATA.

💎 Menos comum, mas elegante.


🏦 Padrão real de mercado

Quase sempre:

CALL "SERVICO"
USING REQUEST-BLOCK
RESPONSE-BLOCK

Porque sistemas grandes preferem estruturas completas.


🧪 Passo a passo para criar um subprograma robusto

1️⃣ Defina interface clara (LINKAGE)

2️⃣ Use estruturas, não campos soltos

3️⃣ Documente a ordem dos parâmetros

4️⃣ Use GOBACK

5️⃣ Evite GLOBAL/EXTERNAL sem necessidade

6️⃣ Teste isoladamente


💎 Easter Egg Final — O verdadeiro poder do COBOL

Subprogramação é a razão pela qual:

🏦 Bancos não param
✈️ Sistemas de reserva funcionam
📊 Processamento massivo é possível
🕰️ Código sobrevive por décadas


☕ Mensagem do Mestre para o Padawan

Se você dominar subprogramação COBOL, você deixa de ser apenas um programador.

Você se torna:

🏛️ Um arquiteto de sistemas críticos

Porque o mainframe não é sobre código pequeno.

É sobre:

👉 Confiabilidade
👉 Desempenho
👉 Longevidade
👉 Engenharia disciplinada

quinta-feira, 11 de dezembro de 2025

💥 CEMT NÃO MORREU — MAS O CICS EXPLORER DOMINA: Como Manipular Dados no CICS Explorer no IBM z17 (Guia Definitivo para Dev COBOL Sênior)

 

Bellacosa Mainframe em aquilo que não tem contaram sobre CICS Explorer Data

💥 CEMT NÃO MORREU — MAS O CICS EXPLORER DOMINA: Como Manipular Dados no CICS Explorer no IBM z17 (Guia Definitivo para Dev COBOL Sênior)

Se você vive de COBOL em CICS, já sabe:
o terminal 3270 moldou gerações — mas o jogo mudou.

No IBM z17 com CICS Explorer, você não apenas “consulta recursos”…
👉 você visualiza, filtra, manipula e governa o runtime em tempo real.

E mais: com muito mais segurança, contexto e velocidade.

Este guia é direto ao ponto, profundo e prático — do jeito que um dev COBOL sênior precisa.


🧠 De onde veio o CICS Explorer (e por que ele importa)

Antes:

  • CEMT INQ TRANS
  • CEDA DEFINE
  • CEMT SET FILE
  • Telas fragmentadas
  • Memorização pesada
  • Contexto limitado

Agora:

👉 Interface baseada em Eclipse
👉 Integração com CMCI
👉 Visão consolidada
👉 Operação gráfica + inteligente

💡 O Explorer não substitui o CEMT — ele o abstrai e potencializa.


🔥 O que significa “Manipulating CICS Explorer Data”

No Explorer, “dados” não são só registros.

São recursos vivos do CICS:

  • Transações
  • Programas
  • Arquivos VSAM
  • Filas TS/TD
  • Tasks
  • Conexões
  • Métricas runtime
  • Definições BAS/CSD

👉 Você está manipulando o estado do sistema em produção.


🧩 1) Views: seu novo painel operacional

Cada view é uma tabela dinâmica:

  • Linha = recurso
  • Coluna = atributo

Exemplo (Local Transactions):

NAME | STATUS | PROGRAM | PRIORITY | USE COUNT | DUMPING

💡 Isso substitui múltiplos comandos CEMT.


⚡ Personalização que muda o jogo

Você pode:

✔ Mostrar/ocultar colunas
✔ Reordenar (drag & drop)
✔ Filtrar dados
✔ Ordenar por qualquer atributo


💥 Exemplo real

Você está investigando lentidão:

ANTES:
NAME | GROUP | DESCRIPTION | PROGRAM | PRIORITY | STATUS

DEPOIS:
NAME | STATUS | PRIORITY | USE COUNT | RESPONSE TIME

👉 Em segundos, você enxerga o problema.


🔀 2) Drag & Drop: simples, poderoso, subestimado

Clique no cabeçalho → arraste → solte.

Parece trivial.

👉 Mas em produção isso economiza minutos — e minutos salvam SLA.


🔍 3) Filtering: o bisturi do operador

Ambientes reais têm:

  • Centenas de transações
  • Múltiplas regiões
  • CICSPlex

Sem filtro = caos.

Com filtro:

NAME LIKE PAY*
STATUS = ENABLED
PRIORITY > 200

👉 Você reduz milhares de linhas para o que importa.


📊 4) Sorting: enxergando padrões invisíveis

Clique na coluna → ordena.

Use para:

  • Identificar gargalos
  • Ver consumo alto
  • Detectar anomalias

💡 Ordenar por USE COUNT ou CPU revela muito mais do que logs.


✏️ 5) Editor View: onde o poder mora

Duplo clique em um recurso → abre o Editor.

Aqui você:

  • Visualiza todos os atributos
  • Modifica valores
  • Aplica mudanças em tempo real

🧠 Tipos de atributos

🔽 Lista (seguro)

  • ENABLED / DISABLED
  • TRANDUMP / NOTRANDUMP

⌨️ Freeform (perigoso 😅)

  • PRIORITY
  • TIMEOUT
  • Limites

💥 Exemplo prático (vida real)

Transação com abend intermitente:

  1. Abrir Editor
  2. Alterar:
DUMPING = TRANDUMP
  1. Ctrl + S
  2. Reproduzir erro
  3. Analisar dump

👉 Sem restart. Sem JCL. Sem drama.


🟡 O famoso “>” — detalhe que salva carreira

Se aparecer:

> PRIORITY = 255

👉 Significa:

⚠️ Alterado
⚠️ NÃO salvo

💡 Esse símbolo já causou incidentes reais.


💾 Salvamento — onde muitos erram

Você só aplica mudanças com:

✔ Ctrl + S
✔ Ícone de disquete
✔ Fechar + confirmar

👉 Enter NÃO salva.


🛡️ Validação: o guardião silencioso

Se você tentar algo inválido:

❌ Não salva
❌ Mostra erro
❌ Protege o CICS

Exemplo:

PRIORITY = 9999 → rejeitado

📚 Help do CICS Explorer — sua arma secreta

Aqui está um diferencial absurdo.


⚡ F1: magia instantânea

Em uma view:

👉 Explica a tela

Em um atributo:

👉 Explica o campo

  • Significado
  • Valores válidos
  • Impacto
  • Dependências

💬 Infopop (easter egg de produtividade)

Pop-up rápido com ajuda contextual.

👉 Não abre janela
👉 Não quebra fluxo
👉 Fecha com ESC

💡 É como um “Google interno do CICS”.


🔎 Busca avançada

Você pode buscar:

  • Termos técnicos
  • Mensagens
  • Atributos
  • Procedimentos

🏢 Easter egg corporativo (nível elite)

Você pode integrar documentação interna:

  • Runbooks
  • Playbooks
  • Procedimentos
  • Guias de incidente

👉 E pesquisar tudo via Help.

🔥 Isso transforma o Explorer em um portal DevOps mainframe.


📜 Error Log — a caixa preta do Explorer

Acesse:

Window > Show View > Error Log

Mostra:

  • Informational
  • Warning
  • Error

💥 Quando usar

  • Conexão falha
  • Operação não funciona
  • Comportamento estranho
  • Debug de ambiente

🧠 Dica de ouro

Leia nessa ordem:

  1. Error
  2. Warning
  3. Info

👉 Isso conta a história do problema.


🏆 Workflow completo (nível sênior)

Situação: problema em produção.

Você:

  1. Filtra a view
  2. Reorganiza colunas
  3. Ordena por impacto
  4. Identifica recurso
  5. Abre Editor
  6. Ajusta atributo
  7. Salva
  8. Monitora
  9. Usa Help se necessário
  10. Consulta Error Log

👉 Tudo no Explorer.

Sem sair. Sem 3270.


🤯 Curiosidades que poucos sabem

  • O Explorer é baseado em Eclipse RCP
  • Usa CMCI (HTTP) para comunicação
  • Pode integrar docs internas
  • Funciona como cliente DevOps
  • Substitui dezenas de comandos CEMT
  • Permite operação multi-região (CICSPlex)

💎 Conclusão (sem romantizar)

👉 O CEMT não morreu.
👉 Mas o Explorer mudou o jogo.

Para um dev COBOL sênior:

  • Não é só UI
  • É produtividade
  • É segurança
  • É velocidade
  • É visão sistêmica

🚀 Em uma frase

👉 Quem domina CICS Explorer não opera CICS — governa o ambiente.


quarta-feira, 29 de outubro de 2025

☕💣 Lab: SEU PRIMEIRO PLANTÃO NO MAINFRAME — LABORATÓRIO COMPLETO DE LÓGICA DE PROGRAMAÇÃO IBM Z PARA INICIANTES 💣☕

 

Bellacosa Mainframe Laboratorio de Logica de Programação Mainframe

☕💣 “SEU PRIMEIRO PLANTÃO NO MAINFRAME” — LABORATÓRIO COMPLETO DE LÓGICA DE PROGRAMAÇÃO IBM Z PARA INICIANTES 💣☕

Aprenda a pensar como um programador de alta plataforma antes mesmo de dominar COBOL


🔥 OBJETIVO DO LABORATÓRIO

Neste laboratório você irá aprender:

✅ Como pensar em lógica Mainframe
✅ Como funciona o raciocínio batch
✅ Variáveis
✅ Validações
✅ Estruturas de repetição
✅ Sections e Paragraphs
✅ Procedures
✅ Subrotinas
✅ Modularização
✅ Boas práticas de alta plataforma
✅ Erros clássicos de iniciantes
✅ Como programadores IBM Z organizam sistemas reais


☕ CENÁRIO DO LABORATÓRIO

Você foi contratado para trabalhar em um banco.

Sua missão:

💣 PROCESSAR UM ARQUIVO DE CLIENTES

Cada registro possui:

NOME
IDADE
SALDO
STATUS

O programa deve:

  1. Ler registros

  2. Validar dados

  3. Calcular bônus

  4. Gerar relatório

  5. Exibir totais


🔥 PRIMEIRA LIÇÃO — PENSAR COMO MAINFRAME

Antes do código:

☕ O PROGRAMADOR MAINFRAME PENSA EM FLUXO


Entrada

Arquivo de clientes

Processamento

Validar
Calcular
Atualizar
Contabilizar

Saída

Relatório
Arquivo atualizado
Totais

💣 ISSO É O DNA DO BATCH

No Mainframe:

  • entrada

  • processamento

  • saída

são sagrados.


☕ ETAPA 1 — DECLARANDO VARIÁVEIS

No Mainframe tudo precisa ser previsível.


🔥 TIPOS MAIS COMUNS

Texto

01 WS-NOME            PIC X(30).

Número inteiro

01 WS-IDADE           PIC 9(03).

Valores monetários

01 WS-SALDO           PIC 9(07)V99.

Indicadores lógicos

01 WS-FIM-ARQUIVO     PIC X VALUE 'N'.

☕ DICA BELLACOSA MAINFRAME

🔥 Nome de variável precisa explicar a intenção

RUIM:

01 A PIC 9(5).

BOM:

01 WS-TOTAL-CLIENTES PIC 9(5).

💣 O MAINFRAME SOBREVIVE POR LEGIBILIDADE

Quem mantém sistemas bancários precisa entender rápido o código.


☕ ETAPA 2 — ESTRUTURA DO PROGRAMA

O COBOL corporativo normalmente segue:

IDENTIFICATION DIVISION
ENVIRONMENT DIVISION
DATA DIVISION
PROCEDURE DIVISION

🔥 O CORAÇÃO DA LÓGICA

PROCEDURE DIVISION

Aqui vive:

  • fluxo

  • validação

  • cálculos

  • repetições


☕ ETAPA 3 — SECTIONS E PARAGRAPHS

SECTION

Agrupa grandes áreas do programa.


PARAGRAPH

Divide tarefas menores.


💣 EXEMPLO CORPORATIVO

PROCESSAMENTO-SECTION.

    PERFORM LE-ARQUIVO
    PERFORM VALIDA-DADOS
    PERFORM CALCULA-BONUS
    PERFORM GRAVA-RELATORIO.

☕ VANTAGEM DISSO

✅ Organização
✅ Manutenção
✅ Reuso
✅ Facilidade de debugging
✅ Clareza


🔥 ETAPA 4 — LEITURA DE REGISTROS

Todo batch gira em torno disso.


💣 MODELO CLÁSSICO MAINFRAME

PERFORM UNTIL WS-FIM-ARQUIVO = 'S'

    PERFORM LE-REGISTRO

    IF WS-FIM-ARQUIVO NOT = 'S'
       PERFORM PROCESSA-REGISTRO
    END-IF

END-PERFORM.

☕ O QUE O INICIANTE PRECISA ENTENDER

O batch:

  • processa

  • repete

até acabar o arquivo.


🔥 ETAPA 5 — LAÇOS DE REPETIÇÃO

☕ 1. PERFORM UNTIL

Mais usado em batch.


Exemplo

PERFORM UNTIL WS-FIM = 'S'

Repete até condição ser verdadeira.


☕ 2. PERFORM VARYING

Semelhante ao FOR.


Exemplo

PERFORM VARYING WS-INDICE FROM 1 BY 1
UNTIL WS-INDICE > 10

☕ 3. PERFORM TIMES

Executa quantidade fixa.


Exemplo

PERFORM 5 TIMES
   DISPLAY 'MAINFRAME'
END-PERFORM.

💣 ERRO CLÁSSICO DE INICIANTE

Criar loop infinito.

Exemplo perigoso:

PERFORM UNTIL WS-FIM = 'S'

Sem alterar WS-FIM.

Resultado:

  • CPU presa

  • JOB travado

  • consumo absurdo


☕ ETAPA 6 — VALIDAÇÕES

🔥 MAINFRAME AMA VALIDAÇÃO

Sistemas bancários precisam ser paranoicos.


☕ TIPOS DE VALIDAÇÃO


Campo vazio

IF WS-NOME = SPACES

Número inválido

IF WS-IDADE IS NUMERIC

Faixa permitida

IF WS-IDADE >= 18

Status permitido

IF WS-STATUS = 'A'

💣 DICA CORPORATIVA

Sempre valide:

  • entrada

  • arquivo

  • cálculo

  • retorno

  • integração


☕ ETAPA 7 — CÁLCULO DE BÔNUS

Regra:

Se saldo > 1000:

  • bônus = 10%


🔥 EXEMPLO

IF WS-SALDO > 1000
   COMPUTE WS-BONUS = WS-SALDO * 0.10
ELSE
   MOVE 0 TO WS-BONUS
END-IF.

☕ ETAPA 8 — MODULARIZAÇÃO

💣 O SEGREDO DOS SISTEMAS GIGANTES

Separar responsabilidades.


🔥 EXEMPLO

LEITURA
VALIDAÇÃO
PROCESSAMENTO
RELATÓRIO
FINALIZAÇÃO

☕ ISSO REDUZ

✅ Bugs
✅ Retrabalho
✅ Confusão
✅ Dependência de pessoas


☕ ETAPA 9 — SUBROTINAS

Grandes empresas usam MUITO isso.


🔥 O QUE É SUBROTINA?

Programa auxiliar reutilizável.


Exemplo

CALCULA-JUROS
VALIDA-CPF
FORMATA-DATA

💣 VANTAGEM

Um único módulo pode ser usado por:

  • banco

  • cartão

  • seguros

  • investimentos


☕ CHAMADA DE SUBROTINA

CALL 'CALCJURO'

☕ ETAPA 10 — FUNÇÕES

Funções retornam valores.


🔥 EXEMPLO

FUNCTION CURRENT-DATE

☕ MUITAS FUNÇÕES MODERNAS COBOL

  • data

  • matemática

  • string

  • conversão


💣 O QUE O INICIANTE PRECISA EVITAR


🔥 1. GOTO EM EXCESSO

Código vira espaguete.


🔥 2. NOMES RUINS

Dificultam manutenção.


🔥 3. DUPLICAÇÃO

Mesmo código repetido.


🔥 4. FALTA DE VALIDAÇÃO

Causa bugs perigosos.


🔥 5. TENTAR FAZER TUDO NUM BLOCO

Divida em procedures.


☕ LABORATÓRIO PRÁTICO — FLUXO COMPLETO

💣 OBJETIVO

Processar 3 clientes.


🔥 PASSO 1 — INICIALIZAÇÃO

MOVE 0 TO WS-TOTAL
MOVE 'N' TO WS-FIM

🔥 PASSO 2 — LOOP PRINCIPAL

PERFORM UNTIL WS-FIM = 'S'

🔥 PASSO 3 — LEITURA

READ CLIENTE-ARQ

🔥 PASSO 4 — VALIDAÇÃO

IF WS-SALDO IS NUMERIC

🔥 PASSO 5 — PROCESSAMENTO

COMPUTE WS-BONUS = WS-SALDO * 0.10

🔥 PASSO 6 — ACUMULADOR

ADD WS-BONUS TO WS-TOTAL

🔥 PASSO 7 — RELATÓRIO

DISPLAY WS-TOTAL

☕ RESULTADO FINAL ESPERADO

O programa:

  • processa clientes

  • valida dados

  • calcula bônus

  • gera total


💣 ISSO É O INÍCIO DA ENGENHARIA MAINFRAME

Você acabou de praticar:

✅ lógica imperativa
✅ lógica procedural
✅ lógica estruturada


☕ COMO PROGRAMADORES MAINFRAME PENSAM?

Eles perguntam:

O dado entrou correto?
O arquivo está íntegro?
A rotina está modularizada?
O batch aguenta milhões de registros?
O operador conseguirá diagnosticar erro?

🔥 ISSO É ALTA PLATAFORMA

Não é apenas programar.

É:

  • previsibilidade

  • confiabilidade

  • rastreabilidade

  • engenharia


☕ CURIOSIDADES DO MUNDO REAL


💣 Muitos bancos ainda usam lógica escrita nos anos 80

E continuam funcionando.


💣 Um erro de loop pode consumir milhões em CPU

Por isso revisão é levada extremamente a sério.


💣 COBOL foi desenhado para manutenção humana

Legibilidade sempre foi prioridade.


💣 Grandes batches processam bilhões de registros

Tudo baseado nessa lógica.


☕ DESAFIO FINAL PARA O ALUNO

Tente adicionar:

✅ validação de idade
✅ tratamento de saldo negativo
✅ contador de clientes inválidos
✅ relatório final formatado
✅ cálculo de média


🔥 MISSÃO CONCLUÍDA

Você deu os primeiros passos no raciocínio que move:

  • bancos

  • governos

  • cartões

  • seguradoras

  • bolsas financeiras


💣 A GRANDE VERDADE DO MAINFRAME

Antes de aprender comandos…

☕ O PROGRAMADOR IBM Z PRECISA APRENDER A PENSAR COMO ENGENHEIRO.


segunda-feira, 1 de fevereiro de 2021

IMS DB e COBOL: Entendendo os Bastidores das Chamadas DL/I, PCB Masks e o Modelo de Acesso que Sobreviveu a Todas as Revoluções da TI

 

Bellacosa Mainframe introdução ao ims db e cobol mainframe

☕💣🚀 PADAWAN, VOCÊ NÃO PROGRAMA IMS COM COBOL. VOCÊ NEGOCIA COM UMA CIVILIZAÇÃO DE 50 ANOS DE EXPERIÊNCIA!

IMS DB e COBOL: Entendendo os Bastidores das Chamadas DL/I, PCB Masks e o Modelo de Acesso que Sobreviveu a Todas as Revoluções da TI

Quando um desenvolvedor moderno abre um programa COBOL com acesso ao IMS pela primeira vez, normalmente a reação é sempre a mesma:

"Cadê o SELECT?"

"Cadê o OPEN?"

"Cadê o CURSOR?"

"Cadê o SQL?"

E então ele encontra algo aparentemente estranho:

ENTRY 'DLITCBL' USING STUDENT-PCB-MASK.

Logo depois:

CALL 'CBLTDLI' USING DLI-GN
                     STUDENT-PCB-MASK
                     SEGMENT-I-O-AREA.

E finalmente:

GOBACK.

Pronto.

Acabou.

Nenhum SELECT.

Nenhum OPEN.

Nenhum FETCH.

Nenhuma conexão.

Nenhum driver JDBC.

Nenhuma string de conexão.

Nenhuma senha.

Nenhum framework.

E mesmo assim...

o programa está acessando um banco de dados capaz de processar milhões de transações por segundo.

É nesse momento que o jovem padawan percebe que IMS não é apenas um banco de dados.

IMS é uma filosofia completamente diferente de acesso a dados.

E entender as instruções apresentadas no material IMS DB COBOL Basics é o primeiro passo para compreender por que milhares de sistemas críticos continuam rodando sobre IMS até hoje.


O Erro Mais Comum: Tentar Enxergar IMS Como Um Banco Relacional

Grande parte dos profissionais atuais nasceu tecnicamente dentro do paradigma SQL.

Eles pensam assim:

SELECT *
FROM CLIENTE
WHERE CPF='12345678900'

No mundo relacional você pergunta:

"Banco, me devolva os dados."

No IMS a lógica é diferente.

Você navega.

Você percorre.

Você se posiciona.

Você caminha pela hierarquia.

O IMS funciona muito mais próximo de um sistema de arquivos inteligente do que de um banco relacional tradicional.

Imagine uma estrutura:

CLIENTE
 |
 +-- CONTA
      |
      +-- MOVIMENTO

Não existe JOIN.

Não existe otimizador SQL.

Não existe plano de acesso dinâmico.

Você navega diretamente pela estrutura.

E é justamente isso que torna o IMS absurdamente rápido.


O Que Acontece Quando o Programa Começa?

O documento mostra a instrução:

ENTRY 'DLITCBL'

que representa a porta de entrada do programa IMS.

Mas vamos muito além da definição formal.

Na prática ocorre o seguinte:

JCL
 |
 +-- IMS Control Region
        |
        +-- DL/I
              |
              +-- Programa COBOL

O COBOL não inicia sozinho.

Quem inicia tudo é o IMS.

O programa COBOL é praticamente um "convidado" dentro do ambiente IMS.

Quando o IMS entrega o controle ao programa:

  • carrega PSB

  • carrega PCB

  • monta buffers

  • monta áreas de comunicação

  • posiciona recursos

e somente então chama:

ENTRY 'DLITCBL'

Nesse instante o COBOL recebe acesso ao universo IMS.


DLITCBL: A Ponte Entre Dois Mundos

O material explica que DLITCBL significa:

DL/I TO COBOL

Mas historicamente isso é muito mais interessante.

Na década de 1970:

  • COBOL não conhecia IMS

  • IMS não conhecia COBOL

Era necessário um mecanismo de integração.

DLITCBL tornou-se esse mecanismo.

É equivalente ao que hoje chamaríamos de:

  • Driver JDBC

  • ORM

  • API Gateway

  • Framework de Persistência

Só que criado décadas antes dessas tecnologias existirem.


PCB: O Conceito Que Confunde Todo Mundo

O documento fala repetidamente sobre PCB Masks.

Esse é um dos conceitos mais importantes do IMS.

PCB significa:

Program Communication Block

Pense nele como um contrato.

O programa não acessa diretamente o banco.

O programa acessa o banco através do PCB.

O PCB informa:

  • qual banco pode acessar

  • quais segmentos pode ler

  • quais permissões possui

  • qual status retornou

É parecido com:

Token de acesso
+
Metadata
+
Controle de navegação

Tudo junto.


PCB Mask: O Espelho Local do PCB

O material mostra:

LINKAGE SECTION.
01 STUDENT-PCB-MASK.

Por que isso existe?

Porque o PCB real não está dentro do programa.

Ele pertence ao IMS.

Logo:

IMS
 |
 +-- PCB Real

Enquanto:

Programa COBOL
 |
 +-- PCB Mask

O PCB Mask é simplesmente uma representação local.

Uma espécie de ponte entre o programa e o PCB verdadeiro.


O Campo Mais Importante do PCB

Observe no exemplo:

05 STD-STATUS-CODE PIC XX.

Este campo vale ouro.

Porque toda chamada DL/I retorna um status.

Sem exceção.

É equivalente a:

SQLException

ou

RETURN CODE

ou

Exception

Mas muito mais eficiente.

Após cada chamada:

CALL 'CBLTDLI'

o IMS atualiza:

STD-STATUS-CODE

indicando sucesso ou erro.


O Que Realmente É o CBLTDLI?

O documento explica:

CBLTDLI = COBOL TO DL/I

Esta é a interface oficial entre COBOL e IMS.

Toda operação passa por ela.

Imagine:

COBOL
  |
CBLTDLI
  |
DL/I
  |
IMS DB

Ela funciona como uma API.

Décadas antes da palavra API virar moda.


A Grande Sacada: O CALL Sempre Tem a Mesma Estrutura

O material apresenta:

CALL 'CBLTDLI' USING

seguido de parâmetros.

O mais interessante é que a estrutura básica quase nunca muda.

Você altera apenas o Function Code.

Por exemplo:

GU

Get Unique

GN

Get Next

GHU

Get Hold Unique

REPL

Replace

ISRT

Insert

DLET

Delete

Todos utilizam o mesmo mecanismo.


GU: A Consulta Direta

Imagine:

CLIENTE
CPF=123

Você quer exatamente esse cliente.

Então:

CALL 'CBLTDLI'
USING DLI-GU

O IMS procura diretamente pela chave.

Resultado:

Leitura extremamente rápida

Sem scan.

Sem cursor.

Sem otimização dinâmica.


GN: O Cursor Original dos Anos 70

O exemplo do documento utiliza:

DLI-GN

GN significa:

Get Next

Ele busca o próximo segmento.

Na prática:

Registro 1
Registro 2
Registro 3
Registro 4

Cada chamada:

GN

avança um registro.

Muito parecido com:

FETCH NEXT

Só que décadas mais antigo.


GHU: O Início de Uma Atualização

Ler é simples.

Atualizar é diferente.

O IMS precisa garantir integridade.

Por isso existe:

GHU

Get Hold Unique.

Você não apenas lê.

Você bloqueia.

É semelhante a:

SELECT FOR UPDATE

REPL: A Atualização de Verdade

Após o GHU:

REPL

substitui o segmento.

Fluxo clássico:

GHU
 |
ALTERA DADOS
 |
REPL

Essa sequência existe em praticamente todos os sistemas IMS do planeta.


ISRT: Inserindo Dados

O documento mostra:

DLI-ISRT

Essa instrução cria novos segmentos.

Exemplo:

CLIENTE
 |
 +-- NOVA CONTA

O IMS posiciona automaticamente o segmento dentro da hierarquia.


DLET: O Botão Vermelho

DLET

Remove um segmento.

Mas atenção.

Em IMS isso pode significar remover uma árvore inteira.

Exemplo:

CLIENTE
 |
 +-- CONTA
 |
 +-- MOVIMENTO

Dependendo da estrutura:

DLET CLIENTE

pode eliminar tudo abaixo.

Por isso é uma operação tratada com extremo cuidado.


Segment I/O Area: A Caixa de Transporte

O documento mostra:

01 SEGMENT-I-O-AREA PIC X(150).

Ela funciona como uma área de troca.

Na leitura:

IMS -> I/O AREA

Na gravação:

I/O AREA -> IMS

É o equivalente aos buffers modernos.


SSA: O GPS do IMS

O documento menciona Segment Search Arguments (SSA).

SSA é o mecanismo de pesquisa.

Exemplo:

CLIENTE(CPF=123)

Traduzido para SSA.

Ele informa ao IMS exatamente onde procurar.

É o ancestral dos predicados SQL.


Por Que Não Existe OPEN e CLOSE?

Essa pergunta aparece em todos os treinamentos.

O material menciona que:

No SELECT
No ASSIGN
No OPEN
No CLOSE

para IMS.

O motivo é simples.

Quem administra o banco é o próprio IMS.

Não o programa.

O programa apenas solicita serviços.

Essa arquitetura reduz erros e aumenta estabilidade.


A Importância do GOBACK

O documento alerta para algo crítico:

GOBACK

deve ser utilizado.

Não:

STOP RUN

Isso parece detalhe.

Mas não é.

Quando você executa:

GOBACK

o controle retorna ao IMS.

Então o IMS pode:

  • liberar locks

  • atualizar logs

  • sincronizar buffers

  • finalizar recursos

Com:

STOP RUN

você devolve controle ao sistema operacional.

O IMS perde a chance de executar essas tarefas.

Resultado?

Abends.

Locks presos.

Recursos inconsistentes.

Dor de cabeça para a produção.


O Que os Desenvolvedores Modernos Não Percebem

Muitos olham para IMS e enxergam uma tecnologia antiga.

Mas observem:

Década de 1970:

API de acesso
Controle transacional
Checkpoint
Recovery
Locking
Alta disponibilidade
Navegação otimizada

Tudo isso já existia.

Décadas antes de:

  • Hibernate

  • Spring

  • REST

  • Kubernetes

  • Microservices


A Verdadeira Lição do IMS

O material apresenta apenas os fundamentos:

  • ENTRY DLITCBL

  • PCB Mask

  • CALL CBLTDLI

  • Segment I/O Area

  • SSA

  • GOBACK

Mas por trás dessas poucas instruções existe uma das arquiteturas mais bem-sucedidas da história da computação.

Enquanto dezenas de tecnologias nasceram, cresceram e desapareceram, o IMS continuou processando:

  • bancos

  • seguradoras

  • governos

  • companhias aéreas

  • cartões de crédito

  • sistemas financeiros globais

O motivo não é nostalgia.

Não é resistência à mudança.

Não é conservadorismo.

É porque a arquitetura foi construída para resolver problemas reais de desempenho, disponibilidade e integridade de dados.

E aqui está a maior lição para o jovem padawan:

Um programa COBOL com IMS não faz consultas.

Ele conversa com uma infraestrutura que foi refinada ao longo de mais de meio século.

Cada CALL 'CBLTDLI' representa décadas de engenharia, otimização e experiência operacional acumuladas desde os primórdios do processamento transacional corporativo.

Entender essas chamadas não é apenas aprender IMS.

É compreender uma das fundações sobre as quais a computação empresarial moderna foi construída. ☕💣🚀

Fonte analisada: IMS DB - COBOL Basics (TutorialsPoint), abordando ENTRY DLITCBL, PCB Masks, CALL CBLTDLI, códigos de função DL/I e uso de GOBACK em programas COBOL que acessam IMS DB.

terça-feira, 5 de outubro de 2010

🔥☕ JSON: O “COBOL DOS DADOS MODERNOS”? — A Linguagem Invisível Que Dominou APIs, Nuvem e Até o Mainframe ☕🔥

 

Bellacosa Mainframe explica o JSON


🔥☕ JSON: O “COBOL DOS DADOS MODERNOS”? — A Linguagem Invisível Que Dominou APIs, Nuvem e Até o Mainframe ☕🔥

“Enquanto muita gente ainda pensava em arquivos texto… o JSON já estava preparando o planeta para microserviços, APIs e integração global.”


🚀 Introdução — O Formato Que Conquistou o Mundo

Se existe algo que une JavaScript, Python, Java, Node.js, Kubernetes, APIs REST, Open Banking, cloud e até o z/OS… esse algo é o JSON.

Sim…

Aquele bloco aparentemente simples:

{
"cliente": "BELLACOSA",
"conta": 12345,
"saldo": 9999.99
}

Hoje parece trivial.

Mas o impacto do JSON na computação foi monstruoso.

Ele virou:

  • o idioma oficial das APIs,
  • a “cola” da internet moderna,
  • o padrão universal de troca de dados,
  • e uma das maiores revoluções silenciosas da computação corporativa.

E o mais curioso?

O JSON nasceu de forma extremamente simples… quase como um “truque elegante” dentro do JavaScript.


🧠 Quem Criou o JSON?

O JSON foi criado por:

👨 Douglas Crockford

Programador, arquiteto de software e evangelista JavaScript.


📅 Data de Criação

O JSON começou a ganhar forma por volta de:

📌 2001

E foi oficialmente popularizado entre:

📌 2002–2005


🌍 O Problema Que o JSON Resolveu

Antes do JSON, integração era quase sempre baseada em:

  • XML
  • CSV
  • Arquivos posicionais
  • Protocolos binários
  • EDI
  • Mensagens proprietárias

O problema?

Tudo era:

  • pesado,
  • verboso,
  • lento,
  • difícil de ler,
  • difícil de debugar.

Exemplo de XML:

<cliente>
<nome>BELLACOSA</nome>
<saldo>9999.99</saldo>
</cliente>

Agora compare com JSON:

{
"nome": "BELLACOSA",
"saldo": 9999.99
}

Menos ruído.
Mais legibilidade.
Mais velocidade.
Mais simplicidade.

E o mercado enlouqueceu.


⚡ O Grande Segredo do JSON

O JSON nasceu inspirado diretamente nos objetos JavaScript.

Na prática:

var cliente = {
nome: "BELLACOSA",
saldo: 9999.99
}

Douglas Crockford percebeu:

“E se isso virar um formato universal de troca de dados?”

E virou.


🔥 O JSON Explodiu Com as APIs REST

Quando APIs REST começaram a dominar o mercado…

o JSON virou praticamente obrigatório.

Porque:

  • era leve,
  • rápido,
  • fácil de parsear,
  • perfeito para internet,
  • amigável para humanos.

Resultado?

O XML começou a perder espaço rapidamente.


☕ O Mainframe Não Ficou de Fora

Aqui começa a parte interessante para o mundo COBOL.

Muita gente achava:

“Mainframe nunca vai falar JSON.”

Erro histórico.

Hoje o z/OS conversa JSON o tempo inteiro:

  • APIs REST
  • z/OS Connect
  • CICS Web Services
  • MQ
  • Kafka
  • Open Banking
  • Microsserviços
  • Cloud híbrida

O JSON virou peça fundamental da modernização mainframe.


🧠 COBOL + JSON = O Casamento Corporativo Moderno

A IBM percebeu rapidamente:

Se o mainframe quisesse continuar reinando…
precisaria falar JSON nativamente.

E então vieram recursos modernos como:

📌 JSON PARSE

e

📌 JSON GENERATE

no Enterprise COBOL.


🚀 Exemplo COBOL Moderno Com JSON

Gerando JSON

IDENTIFICATION DIVISION.
PROGRAM-ID. GERJSON.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 CLIENTE.
05 NOME PIC X(20) VALUE 'BELLACOSA'.
05 SALDO PIC 9(5)V99 VALUE 99999.99.

01 JSON-SAIDA PIC X(200).

PROCEDURE DIVISION.

JSON GENERATE JSON-SAIDA
FROM CLIENTE

DISPLAY JSON-SAIDA.

STOP RUN.

Saída:

{"NOME":"BELLACOSA","SALDO":99999.99}

🔥 Parsing JSON no COBOL

Recebendo API REST

JSON PARSE JSON-ENTRADA
INTO CLIENTE

Isso foi revolucionário no z/OS.

Porque eliminou:

  • parsers manuais,
  • tratamentos absurdos,
  • lógica artesanal,
  • conversões complexas.

🧠 O Que Tornou o JSON Tão Poderoso?

📌 1. Legibilidade Humana

Até operador consegue entender.


📌 2. Estrutura Hierárquica

Permite:

  • objetos,
  • listas,
  • arrays,
  • árvores complexas.

📌 3. Independência de Linguagem

Funciona em:

  • COBOL
  • Java
  • Python
  • Go
  • Node.js
  • Rust
  • RPG
  • PL/I

📌 4. Perfeito Para APIs

JSON praticamente virou:

“o TCP/IP da integração moderna.”


⚠️ Desvantagens do JSON

Nem tudo são flores.


❌ 1. Sem Tipagem Forte

JSON puro não define:

  • decimal fixo,
  • packed decimal,
  • COMP-3,
  • datas reais.

Isso gera problemas em integrações financeiras.


❌ 2. Overhead de Texto

JSON é texto.

Protocolos binários podem ser mais rápidos.


❌ 3. Segurança

Parsing inseguro pode causar:

  • injection,
  • payload malicioso,
  • consumo excessivo de memória.

❌ 4. Precisão Numérica

Problema clássico:

  • valores financeiros,
  • arredondamentos,
  • IEEE floating point.

O mainframe sofre muito menos disso graças ao decimal packed.


🔥 Curiosidades Históricas

☕ JSON NÃO É Linguagem

Apesar do nome:

JavaScript Object Notation

JSON NÃO é uma linguagem de programação.

É apenas um formato de dados.


☕ O JSON Virou Padrão Oficial

RFC oficial:

📌 RFC 8259


☕ XML Dominava Absolutamente

Antes do JSON:

  • SOAP,
  • WSDL,
  • XML Schema,
  • namespaces,
  • tags gigantescas.

Parecia um ritual mágico corporativo.

JSON chegou como uma motosserra.


💣 Easter Egg Histórico

Douglas Crockford chegou a remover referências perigosas do JavaScript porque:

📌 JSON podia executar código involuntariamente

No começo muita gente fazia:

eval(json)

Isso virou um pesadelo de segurança.

Daí nasceram parsers seguros.


🚀 JSON no Mundo Mainframe Moderno

Hoje o JSON está em todo lugar no z/OS:

TecnologiaUso
z/OS ConnectAPIs REST
CICSWeb Services
IMSIntegração moderna
MQMensageria
KafkaStreaming
Db2 RESTAPIs corporativas
Open BankingPayloads financeiros
Cloud híbridaMicrosserviços



🔥 O JSON Mudou o Papel do Programador COBOL

Antigamente:

  • COBOL manipulava arquivos,
  • VSAM,
  • copybooks,
  • EBCDIC.

Hoje o COBOL moderno:

  • consome APIs,
  • gera REST,
  • fala HTTP,
  • troca JSON,
  • integra cloud,
  • conversa com Kubernetes.

O programador COBOL virou:

engenheiro de integração corporativa.


☕ Comparação Filosófica: JSON vs Copybook COBOL

Curiosamente…

JSON lembra MUITO a ideia dos copybooks.

Veja:

Copybook

01 CLIENTE.
05 NOME PIC X(20).
05 SALDO PIC 9(5)V99.

JSON

{
"NOME": "BELLACOSA",
"SALDO": 99999.99
}

Ambos descrevem estrutura de dados.

A diferença?

O JSON atravessa internet, nuvem e APIs.


🧠 O Verdadeiro Motivo do Sucesso do JSON

Não foi tecnologia.

Foi simplicidade.

O JSON venceu porque:

  • humanos entendem,
  • programadores gostam,
  • APIs adoram,
  • clouds dependem,
  • empresas inteiras padronizaram nele.

💣 Conclusão — O JSON Virou a “Nova Linguagem Universal”

O JSON não matou o COBOL.

Na verdade…

Ele ajudou o COBOL a sobreviver à era cloud.

Hoje o mainframe continua relevante porque aprendeu:

  • REST,
  • APIs,
  • microsserviços,
  • containers,
  • integração moderna,
  • e principalmente…
  • JSON.

E talvez essa seja a maior ironia da computação:

O formato que nasceu no JavaScript acabou ajudando o z/OS a continuar dominando o coração financeiro do planeta.


☕ Frase Final no Estilo Bellacosa Mainframe

“O COBOL continua processando bilhões… mas agora conversa com o mundo em JSON.” 🔥🚀