☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta Kafka. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Kafka. Mostrar todas as mensagens

sábado, 19 de setembro de 2026

🧭 MARCO POLO E A ROTA DA SEDA DIGITAL — QUANDO O COBOL DESCOBRIU O IBM CONFLUENT

 

Bellacosa Mainframe e o IBM Confluent

☕ Um Café no Bellacosa Mainframe

🧭 MARCO POLO E A ROTA DA SEDA DIGITAL — QUANDO O COBOL DESCOBRIU O IBM CONFLUENT

COBOL, CICS, Db2, IBM MQ, Apache Kafka, IBM Confluent, CDC, IBM Data Gate, Kafka Connect, Topics, Partitions, Offsets, Schema Registry, Flink, APIs, Cloud, IA — e o dia em que Marco Polo descobriu que o mainframe não precisava viajar para que seus dados atravessassem o mundo.

Sob a tutela de Marco Polo, mercador, explorador e contador de histórias de mundos que pareciam impossivelmente distantes — até alguém construir uma rota entre eles.



🎬 PRÓLOGO — NÃO PRECISAMOS MOVER O IMPÉRIO

Imagine um jovem programador COBOL diante de um terminal.

Na tela:

EXEC SQL
   UPDATE CONTA
      SET SALDO = SALDO - :WS-VALOR
    WHERE NUM_CONTA = :WS-CONTA
END-EXEC.

EXEC SQL
   COMMIT
END-EXEC.

Ele olha para aquilo e pensa:

— Pronto. Transferência concluída.

Marco Polo, sentado ao lado do terminal com um mapa enorme aberto sobre a mesa, pergunta:

— E quem ficou sabendo?

O programador responde:

— O Db2.

Marco continua:

— E o sistema antifraude?

Silêncio.

— O aplicativo mobile?

Mais silêncio.

— O Data Lake?

Silêncio novamente.

— O sistema de analytics?

O programador começa a desconfiar daquela conversa.

— E a inteligência artificial?

Finalmente ele responde:

— Marco... o que você quer exatamente?

Marco Polo aponta para o COMMIT.

— Quero construir uma rota daqui até lá.

E assim começa nossa viagem.

Porque IBM Confluent não é simplesmente "mais uma ferramenta de integração".

Para compreender sua importância dentro do universo mainframe precisamos entender uma mudança conceitual muito maior:

transformar dados armazenados em dados em movimento.



🗺️ CAPÍTULO 1 — O MAINFRAME NÃO É UMA ILHA

Durante décadas, empresas construíram seus sistemas centrais sobre tecnologias como:

COBOL
CICS
IMS
Db2
VSAM
JCL
IBM MQ

E esses sistemas continuam processando quantidades gigantescas de transações.

Banco.

Cartão.

Seguro.

Companhia aérea.

Varejo.

Governo.

Logística.

Imagine nosso IBM Z como uma grande cidade comercial.

Dentro dela existem mercados:

CICS

Armazéns:

Db2
VSAM
IMS DB

Mensageiros:

IBM MQ

Funcionários:

COBOL
PL/I
Java

Guardas:

RACF

E registros das atividades da cidade:

SMF

Tudo funciona.

O problema aparece quando outras cidades precisam saber rapidamente o que aconteceu.

Cloud.

Aplicações mobile.

Analytics.

Data Lakes.

Sistemas antifraude.

Machine Learning.

IA generativa.

Agentes de IA.

Marco Polo olha para o mapa e percebe:

O problema não é necessariamente reconstruir a cidade. Precisamos construir rotas comerciais.

Essa distinção é fundamental.

Modernização não significa obrigatoriamente:

MAINFRAME
    |
    v
MIGRAR TUDO
    |
    v
CLOUD

Pode significar:

             IBM Z
               |
        SYSTEM OF RECORD
               |
               v
          EVENT STREAM
               |
      +--------+--------+
      |        |        |
    Cloud      IA    Analytics

O COBOL continua processando a transação.

O dado viaja.



🐫 CAPÍTULO 2 — A ROTA DA SEDA DOS DADOS

A antiga Rota da Seda não transportava apenas seda.

Transportava:

  • mercadorias;

  • informações;

  • tecnologias;

  • culturas;

  • ideias;

  • conhecimento.

Confluent faz algo conceitualmente parecido com dados.

Imagine que uma transação ocorreu:

TRANSFERÊNCIA
Conta: 123456
Valor: R$ 850

No mundo tradicional podemos pensar:

COBOL
   |
   v
CICS
   |
   v
Db2
   |
   v
COMMIT

O banco de dados agora sabe que o saldo mudou.

Mas o restante da empresa talvez também precise saber.

Podemos representar esse acontecimento como um evento:

{
  "eventType": "TRANSFER_COMPLETED",
  "account": "123456",
  "amount": 850.00,
  "currency": "BRL"
}

Agora começa a viagem:

IBM Z
  |
  v
EVENTO
  |
  v
CONFLUENT / KAFKA
  |
  +------> Antifraude
  |
  +------> Mobile
  |
  +------> Analytics
  |
  +------> Data Lake
  |
  +------> IA

Uma transação ocorreu uma vez.

Mas vários sistemas podem ter interesse nela.

Essa é uma das ideias centrais do event streaming.



📜 CAPÍTULO 3 — ESTADO E ACONTECIMENTO NÃO SÃO A MESMA COISA

Considere:

CONTA: 123456
SALDO: R$ 4.150

Isso representa estado.

Agora observe:

09:00 PIX recebido       +1000
10:14 Compra             -200
12:07 Saque              -300
14:32 Depósito           +500
18:44 Transferência      -850

Isso representa uma sequência de acontecimentos.

Essa diferença parece pequena.

Mas arquiteturalmente é enorme.

O banco de dados responde muito bem:

Qual é o estado atual?

Um stream de eventos ajuda a responder:

O que aconteceu?

E principalmente:

O que está acontecendo?



📻 CAPÍTULO 4 — APACHE KAFKA: A ESTAÇÃO COMERCIAL DA ROTA

No coração do ecossistema Confluent encontramos o Apache Kafka.

Kafka é uma plataforma distribuída de event streaming.

Para começar, nosso jovem COBOLero precisa conhecer quatro palavras:

Producer
Topic
Consumer
Event

Imagine:

PRODUCER
   |
   | publica evento
   v
TOPIC
   |
   +------> CONSUMER A
   |
   +------> CONSUMER B
   |
   +------> CONSUMER C

Um producer produz eventos.

Um topic organiza eventos.

Consumers consomem eventos.

Parece simples.

E conceitualmente é.

O poder aparece quando colocamos milhões ou bilhões de acontecimentos nessa estrada.


🏷️ CAPÍTULO 5 — TOPIC: A PLACA DA ESTRADA

Imagine uma cidade com diferentes rotas:

payments
customers
accounts
card-transactions
fraud-alerts

No Kafka podemos ter topics semelhantes:

bank.payments
bank.accounts
bank.transactions
bank.fraud

Cada topic representa determinado fluxo de eventos.

Por exemplo:

bank.transactions

poderia receber:

Compra
Compra
PIX
Saque
Transferência
Compra
Depósito

Pense no topic como uma estrada especializada.

Marco Polo não coloca:

seda
cavalos
pimenta
ouro
documentos secretos

sem nenhuma organização na mesma carroça.

Boa arquitetura exige organização.


🧩 CAPÍTULO 6 — PARTITIONS: QUANDO UMA ESTRADA NÃO É SUFICIENTE

Agora imagine:

100 eventos por segundo

Tudo bem.

Mas o banco cresce.

Temos:

100.000 eventos por segundo

Uma única rota pode tornar-se insuficiente.

Kafka permite dividir um topic em partitions:

                 PAYMENTS
                    |
       +------------+------------+
       |            |            |
       v            v            v
 Partition 0    Partition 1    Partition 2

Isso possibilita paralelismo.

Diferentes consumers podem processar diferentes partitions simultaneamente.

O mainframeiro já conhece a ideia geral:

Dividir trabalho mantendo controle.

Nada de particularmente alienígena.

Só trocaram as placas da estrada.


🔑 CAPÍTULO 7 — KEY: NÃO MANDE A CARROÇA ERRADA

Existe um problema.

Imagine eventos da conta:

123456

Chegam:

DEPÓSITO
SAQUE
TRANSFERÊNCIA
COMPRA

A ordem pode ser importante.

Muito importante.

Em Kafka podemos utilizar uma key.

Por exemplo:

KEY = ACCOUNT_NUMBER

Eventos com determinada chave podem ser encaminhados consistentemente para a mesma partition.

Assim conseguimos preservar ordenação dentro daquela partition.

Para sistemas financeiros isso é crucial.

Porque:

CREDITAR 100
DEBITAR 100

pode representar uma história diferente de:

DEBITAR 100
CREDITAR 100

Ordem não é detalhe.

Ordem pode ser negócio.


🔢 CAPÍTULO 8 — OFFSET: O MARCO QUILOMÉTRICO DA ROTA

Cada evento dentro de uma partition possui uma posição.

Chamamos essa posição de:

OFFSET

Imagine:

Partition 0

offset 1001
offset 1002
offset 1003
offset 1004
offset 1005

Um consumidor pode registrar até onde chegou.

Algo como:

— Marco, já percorremos a rota até o marco 1004.

Então continuamos:

1005
1006
1007

Essa característica abre uma possibilidade extremamente poderosa:

REPLAY

Podemos voltar.

Dependendo da retenção disponível, um consumidor pode reler acontecimentos anteriores.

Imagine que criamos hoje um novo sistema analítico.

Ele não necessariamente precisa começar apenas nos eventos novos.

Podemos querer:

REPROCESSAR

eventos históricos disponíveis.

Para um mainframeiro acostumado com restart, checkpoint, logs e reprocessamento, isso começa a soar estranhamente familiar.


📬 CAPÍTULO 9 — "ENTÃO KAFKA É IBM MQ?"

Não.

Essa pergunta precisa aparecer cedo porque a confusão é natural.

IBM MQ

Uma boa simplificação mental:

Entregue esta mensagem.

PRODUTOR
   |
   v
QUEUE
   |
   v
CONSUMIDOR

Exemplo:

PROCESSAR PAGAMENTO 12345

Parece uma ordem.

Faça isso.


Kafka

Uma aproximação melhor:

Isto aconteceu.

PAGAMENTO 12345 FOI PROCESSADO

Então:

                    EVENTO
                       |
       +---------------+---------------+
       |               |               |
       v               v               v
     Fraud           Mobile         Analytics

Não significa que MQ não possa trabalhar com eventos nem que Kafka não possa participar de workflows.

A distinção é um modelo mental inicial, não uma fronteira absoluta.


🧙 CAPÍTULO 10 — CONFLUENT NÃO É APENAS KAFKA COM GRAVATA

Se Apache Kafka é o motor fundamental, Confluent constrói uma plataforma empresarial ao redor desse universo.

Podemos pensar pedagogicamente:

Apache Kafka
     |
     v
motor de event streaming

Enquanto:

Confluent
     |
     +--> Kafka
     +--> Connectors
     +--> Schema Registry
     +--> Governança
     +--> Segurança
     +--> Stream Processing
     +--> Flink
     +--> Operação

Isso importa em grandes empresas.

Porque instalar Kafka é uma coisa.

Operar streaming empresarial envolvendo milhares de aplicações, segurança, schemas, governança e consumidores é outra aventura completamente diferente.

Marco Polo poderia comprar um cavalo.

Mas organizar uma rota comercial entre continentes exigia muito mais que possuir cavalos.


🗄️ CAPÍTULO 11 — Db2 ENCONTRA A ROTA DA SEDA

Agora chegamos ao ponto especialmente interessante para IBM Z.

Imagine:

COBOL
  |
  v
CICS
  |
  v
Db2

O programa executa:

UPDATE ACCOUNT
SET BALANCE = BALANCE - 500
WHERE ACCOUNT_ID = 123;

Depois:

COMMIT

Db2 precisa registrar alterações para garantir propriedades transacionais e recuperação.

Existem logs.

E aqui surge uma ideia poderosa:

Em vez de consultar constantemente as tabelas procurando alterações, podemos capturar mudanças a partir dos logs.

Isso nos leva a:

CDC — CHANGE DATA CAPTURE


🔍 CAPÍTULO 12 — O VIGIA QUE NÃO FICA PERGUNTANDO

Imagine um sistema fazendo:

Mudou?

Mudou?

Mudou?

Mudou?

Mudou?

Mudou?

Ou pior:

SELECT *
FROM TRANSACTIONS
WHERE LAST_UPDATE > ...

continuamente.

Isso é polling.

Agora imagine outra estratégia:

INSERT aconteceu
UPDATE aconteceu
DELETE aconteceu

Capturamos essas mudanças.

Isso é a essência do Change Data Capture.


🚪 CAPÍTULO 13 — IBM DATA GATE FOR CONFLUENT

Aqui nossa rota chega diretamente ao IBM Z.

O IBM Data Gate for Confluent permite transformar alterações provenientes do Db2 for z/OS em streams consumíveis pelo ecossistema Confluent.

Conceitualmente:

COBOL
   |
   v
CICS
   |
   v
Db2 for z/OS
   |
 INSERT
 UPDATE
 DELETE
   |
 COMMIT
   |
   v
Db2 LOG
   |
   v
IBM Data Gate for Confluent
   |
   v
Kafka Connect
   |
   v
Confluent
   |
   v
Topics

Isso é interessantíssimo.

Porque talvez não seja necessário alterar centenas de programas COBOL apenas para fazer:

PUBLICAR NO KAFKA

A mudança do banco pode ser capturada.

O velho programa continua trabalhando.

A rota moderna aparece ao redor dele.


⚠️ CAPÍTULO 14 — CDC NÃO É EVENTO DE NEGÓCIO

Agora Marco Polo levanta o dedo.

— Cuidado.

Essa talvez seja uma das lições mais importantes de todo este artigo.

Considere:

CUSTOMER.STATUS

A -> B

CDC pode dizer:

Uma coluna mudou.

Mas o negócio talvez queira dizer:

CUSTOMER_ACCOUNT_SUSPENDED

com:

reason = FRAUD_INVESTIGATION

Isso é muito mais rico.

Portanto:

mudança de dado não é automaticamente evento de negócio.

Temos dois conceitos:

CDC
"algo mudou no dado"

e:

BUSINESS EVENT
"algo significativo aconteceu no negócio"

Confundir os dois pode transformar sua arquitetura Kafka num gigantesco banco de dados desmontado em JSON.


📖 CAPÍTULO 15 — SCHEMA REGISTRY: O COPYBOOK DO VIAJANTE

Agora chegamos a algo que fará qualquer COBOLero sorrir.

Temos:

01 PAYMENT-RECORD.
   05 ACCOUNT-NUMBER PIC X(10).
   05 AMOUNT         PIC S9(9)V99 COMP-3.
   05 CURRENCY       PIC X(03).

COPYBOOK define estrutura.

Agora imagine eventos.

Versão 1:

{
  "account": "123",
  "amount": 500
}

Um desenvolvedor decide melhorar:

{
  "accountNumber": "123",
  "amount": 500,
  "currency": "BRL"
}

Pronto.

Talvez quinze consumidores tenham quebrado.

Bem-vindo ao problema de evolução de schemas.

Confluent possui Schema Registry, permitindo administrar schemas e compatibilidade.

Pedagogicamente:

COPYBOOK
   |
estrutura compartilhada
   |
COBOL

versus:

Schema Registry
   |
estrutura dos eventos
   |
Producers / Consumers

Não são tecnologicamente equivalentes.

Mas o velho programador COBOL entende imediatamente por que aquilo existe.


🌊 CAPÍTULO 16 — FLINK: PROCESSANDO A ÁGUA ENQUANTO O RIO PASSA

Transportar eventos é apenas parte da aventura.

Talvez precisemos analisá-los enquanto passam.

Entre em cena:

Apache Flink.

Imagine:

CARD TRANSACTIONS
        |
        v
      FLINK
        |
        v
FRAUD ALERTS

Uma regra conceitual:

SE

5 compras
+
3 países
+
30 segundos

ENTÃO

GERAR ALERTA

Antigamente poderíamos imaginar:

23:00

//FRAUD JOB

O batch analisa o dia.

Streaming permite:

evento
evento
evento
evento
       |
       v
 análise imediata

Batch continua tendo seu lugar.

Mas agora temos outra ferramenta.


🔌 CAPÍTULO 17 — E O z/OS CONNECT?

Outra confusão comum.

API e streaming não são necessariamente concorrentes.

Imagine um cliente solicitando:

POST /transfer

Temos:

Mobile
   |
   v
API
   |
   v
z/OS Connect
   |
   v
CICS
   |
   v
COBOL

A pergunta é:

Faça uma transferência.

Depois a transação ocorre.

Agora:

COBOL
   |
   v
Db2
   |
   v
COMMIT
   |
   v
EVENTO
   |
   v
Confluent

A API entra.

O evento sai.

Nossa arquitetura fica:

                MOBILE
                   |
                   | POST /transfer
                   v
             z/OS Connect
                   |
                   v
                CICS
                   |
                   v
                COBOL
                   |
                   v
                  Db2
                   |
                 COMMIT
                   |
                   v
                EVENTO
                   |
                   v
              CONFLUENT
                   |
       +-----------+-----------+
       |           |           |
       v           v           v
     Fraud        CRM          IA

Agora temos uma arquitetura realmente interessante.


🏰 CAPÍTULO 18 — RACF NÃO PROTEGE O MUNDO INTEIRO

O jovem COBOLero pergunta:

— Mas temos RACF.

Marco Polo responde:

— Dentro das muralhas.

Quando o dado sai:

IBM Z
   |
   v
Confluent
   |
   v
Cloud

a superfície de segurança muda.

Precisamos considerar:

TLS
certificados
autenticação
autorização
ACLs
criptografia
segredos
PII
governança
retenção
auditoria
mascaramento

Uma regra importante:

A política de proteção precisa acompanhar o dado.

Não adianta possuir uma fortaleza maravilhosa se você coloca documentos secretos numa carroça sem escolta assim que eles atravessam o portão.


🤖 CAPÍTULO 19 — IA DESCOBRE O MAINFRAME EM TEMPO REAL

Aqui a história ganha outro nível.

Imagine IA alimentada assim:

23:00 extrair Db2
00:00 ETL
01:00 Data Lake
02:00 processamento

Ela conhece o passado.

Agora:

19:31:01 transação
19:31:02 evento
19:31:02 stream
19:31:03 processamento

Mudamos a pergunta.

Antes:

O que aconteceu ontem?

Agora:

O que está acontecendo agora?

Para antifraude, logística, recomendação, observabilidade e automação, essa diferença pode ser gigantesca.


📜 CAPÍTULO 20 — KAFKA É QUASE UM SMF DO NEGÓCIO?

Aqui temos nosso Easter Egg mainframeiro.

Quem trabalha com z/OS já convive com event streaming conceitualmente há muito tempo.

Pense no SMF:

JOB iniciou
JOB terminou
usuário acessou
CPU consumida
dataset aberto
transação executada

Depois:

SMF
 |
 +--> Segurança
 +--> Auditoria
 +--> Capacity
 +--> Performance
 +--> Billing

Agora observe:

Kafka
 |
 +--> Fraud
 +--> Analytics
 +--> Mobile
 +--> AI
 +--> Data Lake

Marco Polo olha para o velho programador mainframe.

O velho programador olha para Kafka.

Os dois ficam em silêncio.

Finalmente alguém diz:

— Então vocês reinventaram algumas coisas que nós já fazíamos?

😂

Não exatamente.

Mas existem ideias surpreendentemente familiares.

Easter Egg 03:17: se algum incidente acontecer exatamente nesse horário, procure primeiro o consumer lag antes de culpar o COBOL.


🧨 CAPÍTULO 21 — NÃO JOGUE 4.000 TABELAS NO KAFKA

Um arquiteto empolgado entra na sala:

— Temos quatro mil tabelas Db2!

Marco Polo sorri.

— Excelente.

— Vamos colocar todas no Kafka!

Marco fecha o mapa.

Não.

Essa decisão pode produzir:

4.000 tabelas
      |
      v
milhares de topics
      |
      v
schemas
PII
dados inúteis
custos
consumidores desconhecidos
dependências
governança impossível

Antes pergunte:

Qual dado?

Qual evento?

Quem consome?

Por quê?

Qual retenção?

Qual latência?

Qual chave?

Qual schema?

Qual SLA?

Contém PII?

Quem é o owner?

Replay é permitido?

Qual é a classificação de segurança?

Kafka não substitui arquitetura.

Confluent não substitui arquitetura.

Cloud não substitui arquitetura.

IA definitivamente não substitui arquitetura.


🛠️ CAPÍTULO 22 — PASSO A PASSO PARA O PROGRAMADOR COBOL

Se você está começando, estude nessa ordem.

Passo 1 — Entenda a transação

Comece pelo que conhece:

COBOL
CICS
Db2
COMMIT
ROLLBACK

Entenda Unit of Work.

Passo 2 — Entenda evento

Transforme:

UPDATE ACCOUNT

mentalmente em:

ACCOUNT_BALANCE_CHANGED

Depois pergunte se existe um evento de negócio ainda melhor:

PAYMENT_COMPLETED

Passo 3 — Aprenda Kafka básico

Domine:

Producer
Consumer
Topic
Partition
Key
Offset
Consumer Group
Retention
Replay

Passo 4 — Compare MQ

Pergunte:

Estou enviando uma ordem?

ou

Estou anunciando um acontecimento?

Isso já elimina muita confusão.

Passo 5 — Estude CDC

Aprenda:

INSERT
UPDATE
DELETE
LOG
CDC

Passo 6 — Estude Schema Registry

Pense como alguém que já conhece copybook.

Quem é dono do contrato?

Como evolui?

Quem quebra se mudar?

Passo 7 — Estude streaming

Depois avance para:

Flink
windowing
aggregation
filtering
stream processing

Passo 8 — Só então coloque IA

Não comece:

"QUERO IA!"

Comece:

Qual evento?
Qual dado?
Qual qualidade?
Qual latência?
Qual governança?

Depois coloque IA.


☕ CAPÍTULO 23 — A CAFETERIA DE MARCO POLO

Vamos fechar com uma analogia.

Imagine nossa cafeteria.

Db2

É o livro-caixa.

Pergunta:

Qual é o saldo?


API

Cliente pergunta ao balcão:

Quanto custa um espresso?


IBM MQ

Garçom leva uma ordem:

Prepare dois cafés.


Kafka

O sino toca:

DOIS CAFÉS FORAM VENDIDOS.

Então:

estoque escuta
financeiro escuta
fidelidade escuta
analytics escuta
IA escuta

Confluent

É toda a infraestrutura comercial que administra essas rotas.


Data Gate

Observa mudanças relevantes vindas do Db2 e ajuda a colocá-las na rota.


Schema Registry

É o formulário comercial dizendo exatamente como deve ser descrita uma carga.


Flink

É o mercador que analisa as mercadorias enquanto as caravanas ainda estão passando.


🧭 EPÍLOGO — O COBOL NÃO PRECISA FAZER A VIAGEM

Depois de meses viajando pela Rota da Seda Digital, nosso jovem programador retorna ao mesmo terminal.

Na tela ainda existe:

EXEC SQL
   UPDATE CONTA
      SET SALDO = SALDO - :WS-VALOR
    WHERE NUM_CONTA = :WS-CONTA
END-EXEC.

EXEC SQL
   COMMIT
END-EXEC.

Ele olha para Marco Polo.

— Então não precisamos necessariamente reescrever isso?

Marco sorri.

— Finalmente você entendeu a viagem.

O programa COBOL pode continuar fazendo aquilo para o qual foi criado.

Processar uma transação crítica.

Com segurança.

Consistência.

Performance.

Décadas de regras de negócio.

Ao redor dele construímos rotas:

                         IBM Z
                           |
                     CICS / IMS
                           |
                         COBOL
                           |
                          Db2
                           |
                        COMMIT
                           |
                           v
                     Db2 LOG / CDC
                           |
                           v
                     DATA GATE
                           |
                           v
                       CONFLUENT
                           |
                         KAFKA
                           |
          +----------------+----------------+
          |                |                |
          v                v                v
        CLOUD             AI            ANALYTICS
          |                |                |
          +----------------+----------------+
                           |
                           v
                    NOVOS SERVIÇOS

E talvez essa seja uma das ideias mais importantes para um programador COBOL iniciante compreender sobre modernização.

Modernizar não significa necessariamente substituir.

Às vezes significa conectar.

Às vezes significa expor.

Às vezes significa desacoplar.

Às vezes significa transformar uma alteração em evento.

O IBM Z continua sendo o System of Record.

O Db2 continua preservando o estado confiável.

CICS continua processando transações.

COBOL continua executando regras de negócio.

MQ continua transportando mensagens onde mensageria confiável é necessária.

z/OS Connect abre a porta das APIs.

Kafka cria rios de eventos.

Confluent organiza essas novas rotas.

Data Gate ajuda dados do Db2 for z/OS a entrar nelas.

Flink processa acontecimentos enquanto eles passam.

Cloud, analytics e IA tornam-se consumidores dessa informação.

E assim descobrimos algo que Marco Polo provavelmente entenderia melhor que muitos arquitetos modernos:

Você não precisa mover uma cidade inteira para estabelecer comércio com o outro lado do mundo.

Você precisa construir uma boa rota.

No século XIII ela atravessava desertos, montanhas, impérios e oceanos.

No século XXI ela pode começar humildemente assim:

EXEC SQL
   COMMIT
END-EXEC

e terminar milhares de quilômetros — ou alguns milissegundos — depois:

COBOL
  ↓
CICS
  ↓
Db2
  ↓
COMMIT
  ↓
CDC
  ↓
IBM Data Gate
  ↓
Kafka Connect
  ↓
IBM Confluent
  ↓
Topic
  ↓
Partition
  ↓
Consumer
  ↓
Flink
  ↓
Cloud
  ↓
IA

Marco Polo fecha o mapa.

O programador COBOL olha novamente para o terminal.

E percebe que aquele programa de quarenta anos não estava necessariamente preso ao passado.

Talvez apenas estivesse esperando alguém construir uma estrada.

☕ Bellacosa Mainframe

Porque algumas das tecnologias mais interessantes do futuro começam com alguém perguntando o que realmente aconteceu depois do COMMIT.

sábado, 14 de dezembro de 2024

JSON em COBOL no IBM Z: O Holocron das APIs Modernas

 

Bellacosa Mainframe COBOL com JSON

JSON em COBOL no IBM Z: O Holocron das APIs Modernas

Como um Linguagem Criada em 1959 Aprendeu a Conversar com APIs, Mobile, Open Banking e a Nuvem

Por muitos anos, o universo COBOL parecia limitado a arquivos VSAM, DB2, IMS, CICS, JCLs e relatórios batch executados silenciosamente nos datacenters. Entretanto, a transformação digital trouxe novos desafios e uma nova linguagem passou a dominar a comunicação entre aplicações modernas: JSON (JavaScript Object Notation).

Hoje, smartphones, microsserviços, OpenShift, Open Banking, PIX, aplicações em nuvem e plataformas de inteligência artificial utilizam JSON como principal formato de intercâmbio de informações. E o mais interessante é que o Enterprise COBOL para IBM Z evoluiu para participar naturalmente desse ecossistema.

Com a introdução das instruções JSON PARSE e JSON GENERATE no Enterprise COBOL 6.x, programas COBOL passaram a compreender, produzir e consumir documentos JSON de forma nativa, eficiente e segura, permitindo a integração com APIs REST, IBM MQ, Kafka, z/OS Connect e arquiteturas modernas baseadas em eventos.

Esta série especial Bellacosa Mainframe apresenta uma jornada completa para o jovem Padawan COBOL compreender desde os conceitos básicos até técnicas avançadas utilizadas por especialistas IBM Z.


📖 Capítulo 1 – O Despertar do JSON

Quando o Padawan Descobre que COBOL Pode Falar a Linguagem das APIs

Neste primeiro holocron, exploramos os fundamentos do JSON, sua história, a chegada do suporte nativo ao Enterprise COBOL, diferenças entre JSON e XML, conceitos de UTF-8 e EBCDIC, além dos primeiros exemplos utilizando JSON GENERATE.

➡️ https://eljefemidnightlunch.blogspot.com/2024/07/json-em-cobol-no-ibm-z-o-holocron-das.html


📖 Capítulo 2 – JSON PARSE

Quando o Padawan Aprende a Transformar Texto em Estruturas COBOL

Aqui mergulhamos na instrução JSON PARSE, aprendendo a converter documentos JSON em estruturas COBOL, trabalhar com objetos aninhados, vetores utilizando OCCURS, tratar exceções, validar payloads recebidos e compreender os desafios relacionados à segurança e ao processamento de grandes volumes de dados.

➡️ https://eljefemidnightlunch.blogspot.com/2024/09/json-em-cobol-no-ibm-z-o-holocron-das.html


📖 Capítulo 3 – JSON GENERATE

Quando o Padawan Aprende a Construir APIs REST com COBOL

No terceiro capítulo, estudamos JSON GENERATE, recursos como SUPPRESS, NAME OF, tratamento de campos opcionais, construção de respostas para APIs REST, geração de payloads PIX e Open Banking, além de recomendações de desempenho e proteção contra exposição acidental de informações sensíveis.

➡️ https://eljefemidnightlunch.blogspot.com/2024/10/json-em-cobol-no-ibm-z-o-holocron-das.html


📖 Capítulo 4 – JSON Jedi Master

z/OS Connect, MQ, Kafka, OpenShift, OWASP e as Técnicas Jedi do IBM Z

No capítulo final, elevamos o nível de conhecimento para arquiteturas corporativas modernas. Exploramos o papel do z/OS Connect, integração com IBM MQ, Kafka, OpenShift, APIs de alto desempenho, conceitos da OWASP API Top 10, estratégias de observabilidade, segurança, escalabilidade e as melhores práticas adotadas por equipes especializadas em IBM Z.

➡️ https://eljefemidnightlunch.blogspot.com/2024/11/json-em-cobol-no-ibm-z-o-holocron-das.html


O Conselho Final do Mestre Bellacosa

Durante décadas, disseram aos desenvolvedores COBOL que sua missão terminava em arquivos sequenciais e terminais verdes. O JSON mostrou exatamente o contrário. Ele permitiu que programas escritos há décadas passassem a conversar com smartphones, microsserviços, aplicações em nuvem e plataformas digitais espalhadas por toda a galáxia tecnológica.

COBOL não precisou abandonar sua robustez, estabilidade ou capacidade de processar milhões de transações por segundo. Ele apenas aprendeu um novo idioma.

E talvez esta seja a maior lição deste Holocron:

COBOL não é uma tecnologia do passado.

COBOL é um veterano experiente que aprendeu a falar a língua do futuro.

Que o JSON PARSE esteja com você. E que o JSON GENERATE jamais exponha uma senha em produção. 🚀💙🖥️


Para ir mais longe

🔥☕ Como se Usa JSON em COBOL?

Nos últimos anos, o JSON (JavaScript Object Notation) tornou-se o formato mais utilizado para integração entre aplicações modernas, APIs REST, Mobile, Cloud e Mainframe.

https://eljefemidnightlunch.blogspot.com/2007/02/como-se-usa-json-em-cobol.html

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

https://eljefemidnightlunch.blogspot.com/2010/10/json-o-cobol-dos-dados-modernos.html


terça-feira, 26 de novembro de 2024

Do Celular ao Mainframe: A Jornada Secreta de uma Transação Bancária

 

Bellacosa Mainframe do celular ao mainframe como funciona o mainframe após o login no app do mobile

☕ Um Café no Bellacosa Mainframe

Do Celular ao Mainframe: A Jornada Secreta de uma Transação Bancária

O guia do Programador COBOL Padawan para compreender APIs, segurança, mensageria, CICS, Db2 e a ponte invisível entre o aplicativo moderno e o coração do IBM Z

Imagine a seguinte cena.

Você está sentado em uma cafeteria, talvez esperando o início de uma aula sobre COBOL, quando o garçom coloca sobre a mesa uma xícara de café fumegante e a conta. Você abre o aplicativo do banco, aponta a câmera para um QR Code, confirma o valor, informa a senha e toca no botão:

Pagar

Alguns segundos depois, aparece a mensagem:

Transação realizada com sucesso.

Missão cumprida.

O café foi pago, o comerciante recebeu o dinheiro e você provavelmente não pensará mais no assunto.

Mas, para nós, tripulantes curiosos da Frota Estelar do Mainframe, essa pequena operação levanta uma pergunta fascinante:

O que realmente aconteceu entre o toque na tela e a mensagem de sucesso?

A resposta é muito mais interessante do que parece.

O seu pedido atravessou a internet, passou por muralhas digitais, apresentou credenciais, foi analisado por mecanismos de segurança, atravessou gateways, talvez entrou em uma fila de mensagens, foi traduzido de JSON para uma estrutura COBOL, chegou ao z/OS, encontrou uma transação CICS, executou regras de negócio, consultou o Db2, atualizou registros, gerou logs, acionou sistemas antifraude e retornou pelo mesmo caminho.

Tudo isso em poucos segundos — frequentemente em frações de segundo.

O que parece um simples toque na tela é, na verdade, uma missão espacial completa.

Prepare o café, ajuste o comunicador e ocupe sua estação na ponte. Hoje vamos viajar do celular ao mainframe.


1. O aplicativo é apenas a janela da nave

Para o usuário, o aplicativo parece ser o banco inteiro.

Ele mostra saldo, extrato, investimentos, cartões, empréstimos e pagamentos. Entretanto, o aplicativo normalmente não mantém o saldo verdadeiro da conta nem executa sozinho as regras financeiras mais importantes.

Ele é, antes de tudo, uma camada de apresentação.

Sua função é permitir que o usuário:

  • veja informações;

  • informe dados;

  • confirme operações;

  • receba mensagens;

  • interaja com os serviços do banco.

Podemos comparar o aplicativo ao painel da ponte da USS Enterprise.

Quando o capitão toca em um comando, o painel não produz energia, não move os motores de dobra e não calcula sozinho a rota. Ele apenas envia instruções para sistemas muito mais profundos da nave.

Da mesma maneira, quando você toca em “Consultar saldo”, o aplicativo envia uma solicitação para os sistemas centrais.

Um pedido poderia ser representado assim:

{
  "agencia": "1234",
  "conta": "567890",
  "operacao": "CONSULTAR_SALDO"
}

Esse formato é chamado de JSON, abreviação de JavaScript Object Notation.

Ele se tornou muito popular porque é:

  • legível;

  • leve;

  • fácil de transmitir;

  • compatível com praticamente qualquer linguagem;

  • adequado para APIs modernas.

Para um desenvolvedor mobile, JSON é algo natural.

Para um programa COBOL criado há décadas, porém, a realidade pode ser bastante diferente.


2. Antes de viajar, a mensagem entra em um túnel criptografado

A solicitação não deveria viajar pela internet como texto aberto.

Seria desastroso transmitir algo assim:

CONTA=567890
SENHA=123456
VALOR=5000

Qualquer pessoa capaz de interceptar o tráfego poderia ler os dados.

Por isso, aplicativos bancários utilizam conexões protegidas por HTTPS, geralmente com TLS — Transport Layer Security.

O TLS cria um canal criptografado entre o dispositivo e o servidor.

Antes de transmitir os dados principais, cliente e servidor realizam um processo de negociação. Simplificando bastante, eles verificam certificados, escolhem algoritmos criptográficos e estabelecem chaves para proteger a sessão.

Depois disso, quem interceptar os pacotes não verá diretamente os dados da transação. Verá conteúdo criptografado, sem significado imediato.

É como se a mensagem fosse colocada em uma cápsula de transporte protegida por um campo de força.

O TLS oferece três garantias fundamentais:

Confidencialidade: terceiros não devem conseguir ler a mensagem.

Integridade: alterações durante o caminho devem ser detectadas.

Autenticidade: o aplicativo precisa ter confiança de que está falando com o servidor legítimo.

Aqui temos uma primeira lição para o COBOL Padawan:

Segurança não começa quando a solicitação chega ao mainframe. Ela começa antes mesmo de o primeiro pacote deixar o celular.


3. A internet não é uma linha reta

Quando o usuário toca em “Confirmar”, os dados não saltam diretamente para o mainframe.

Eles podem atravessar:

  • a rede Wi-Fi ou móvel;

  • a operadora de telecomunicações;

  • roteadores;

  • provedores;

  • redes de distribuição;

  • balanceadores;

  • zonas de segurança;

  • Data Centers;

  • ambientes de nuvem;

  • redes internas corporativas.

Cada salto acrescenta possibilidades de atraso, falha ou ataque.

É por isso que arquiteturas financeiras são construídas com redundância.

Se um caminho falhar, outro poderá ser utilizado. Se um servidor parar, outro assumirá. Se uma região inteira ficar indisponível, mecanismos de recuperação podem direcionar o tráfego para outro ambiente.

Para o usuário, tudo isso é invisível.

Ele vê apenas uma animação girando na tela.


4. WAF: a muralha da fortaleza

Ao se aproximar da infraestrutura do banco, a requisição pode encontrar um WAF — Web Application Firewall.

O WAF funciona como uma muralha especializada na proteção de aplicações web e APIs.

Um firewall tradicional costuma observar endereços, portas e protocolos. O WAF procura compreender também o conteúdo da requisição.

Ele pode identificar padrões relacionados a:

  • SQL Injection;

  • Cross-Site Scripting;

  • automações maliciosas;

  • exploração de vulnerabilidades;

  • requisições deformadas;

  • bots;

  • tentativas de manipulação de parâmetros;

  • tráfego anormal.

Considere uma entrada esperada:

conta=12345

Agora imagine que um invasor tente enviar:

conta=' OR 1=1 --

Esse tipo de sequência pode estar associado a uma tentativa de SQL Injection.

Em uma aplicação mal construída, o conteúdo poderia ser incorporado indevidamente a um comando SQL. Um WAF pode reconhecer esse padrão e bloquear a requisição antes que ela chegue às camadas internas.

Mas atenção: o WAF não elimina a necessidade de programação segura.

Ele é uma defesa adicional, não uma desculpa para escrever código vulnerável.

No universo da Frota Estelar, poderíamos dizer:

O campo de força protege a nave, mas isso não significa que a tripulação possa deixar todas as portas internas abertas.


5. API Gateway: a central de controle de tráfego

Depois da fronteira de segurança, a solicitação pode chegar a um API Gateway.

O API Gateway funciona como uma recepção altamente inteligente para as APIs.

Ele pode executar tarefas como:

  • validar tokens;

  • autenticar clientes;

  • aplicar limites de requisições;

  • registrar chamadas;

  • escolher o serviço de destino;

  • controlar versões de APIs;

  • transformar cabeçalhos;

  • aplicar políticas;

  • distribuir carga;

  • rejeitar tráfego inválido.

Imagine que o banco possua APIs diferentes:

/api/saldo
/api/pix
/api/cartoes
/api/investimentos
/api/emprestimos

O Gateway examina a requisição e a envia ao serviço correto.

Ele também pode evitar abuso por meio de rate limiting.

Por exemplo, se um dispositivo tentar realizar dez mil consultas em poucos segundos, o Gateway poderá limitar ou bloquear o tráfego.

Outra função importante é a validação de credenciais.

Muitos sistemas usam padrões como:

  • OAuth 2.0;

  • OpenID Connect;

  • tokens JWT;

  • certificados digitais;

  • chaves de API.

O Gateway não substitui todos os controles posteriores, mas atua como um dos primeiros pontos de decisão.

Podemos compará-lo à estação de transporte da Enterprise.

Nem todo mundo pode informar:

“Energize!”

Antes, é necessário confirmar identidade, destino e autorização.


6. O celular fala JSON; o COBOL fala estruturas

Aqui começamos a chegar a uma das partes mais fascinantes da viagem.

O aplicativo moderno costuma enviar dados em JSON:

{
  "cliente": 98765,
  "valor": 250.75,
  "moeda": "BRL"
}

Um programa COBOL pode esperar uma estrutura definida assim:

       01  WS-REQUISICAO.
           05 WS-CLIENTE       PIC 9(05).
           05 WS-VALOR         PIC S9(07)V99 COMP-3.
           05 WS-MOEDA         PIC X(03).

Perceba a diferença.

No JSON, os campos têm nomes, separadores e valores textuais.

No COBOL, a estrutura possui posições, tamanhos e formatos definidos.

O campo WS-CLIENTE ocupa cinco dígitos.

O campo WS-VALOR pode estar armazenado em formato decimal compactado, indicado por COMP-3.

O campo WS-MOEDA possui três caracteres.

Essas definições frequentemente ficam em um Copybook.

Um Copybook é um arquivo reutilizável que contém descrições de dados ou trechos de código.

Exemplo:

       COPY REQPIX.

O compilador inclui o conteúdo do Copybook no programa.

Em ambientes corporativos, Copybooks podem representar:

  • solicitações;

  • respostas;

  • registros de clientes;

  • layouts de arquivos;

  • áreas de comunicação;

  • mensagens;

  • estruturas de banco.

Essa precisão é uma das grandes forças do COBOL.

Cada campo possui tamanho e significado claramente definidos.

Por outro lado, ela cria um desafio de integração: alguém precisa traduzir os dados flexíveis do mundo JSON para o layout rigoroso do mundo COBOL.


7. z/OS Connect: o tradutor da Federação

Uma das tecnologias capazes de construir essa ponte é o z/OS Connect.

Ele permite expor ativos do IBM Z por meio de APIs e integrar APIs com aplicações existentes.

De maneira simplificada, o fluxo pode ser:

Aplicativo
   ↓
API REST
   ↓
JSON
   ↓
z/OS Connect
   ↓
Estrutura COBOL
   ↓
CICS
   ↓
Programa de negócio

Na volta:

Programa COBOL
   ↓
Estrutura de resposta
   ↓
z/OS Connect
   ↓
JSON
   ↓
Aplicativo

O desenvolvedor do aplicativo não precisa saber como um campo COMP-3 é representado internamente.

O programador COBOL não precisa transformar manualmente toda requisição HTTP.

Cada lado trabalha com abstrações adequadas ao seu universo.

Esse é um ponto fundamental da modernização:

Modernizar não significa necessariamente reescrever tudo. Muitas vezes significa tornar um ativo existente acessível por novas interfaces.

Um programa COBOL que processa contas há décadas pode continuar executando sua lógica, enquanto uma API moderna fornece acesso controlado a essa capacidade.

Não é preciso desmontar o núcleo de dobra para instalar uma tela nova na ponte.


8. EBCDIC, UTF-8 e a Torre de Babel digital

Outro detalhe importante é a codificação de caracteres.

Aplicações modernas normalmente utilizam UTF-8.

Muitos ambientes mainframe utilizam EBCDIC em diversas áreas.

Uma letra não é armazenada simplesmente como “uma letra”. Ela é representada por um valor numérico.

Em codificações diferentes, o mesmo valor pode representar caracteres diferentes.

Portanto, a integração precisa tratar corretamente:

  • letras;

  • números;

  • caracteres especiais;

  • acentos;

  • símbolos;

  • espaços;

  • sinais;

  • quebras de linha.

Imagine enviar o nome:

João Gonçalves

Uma conversão incorreta poderia produzir caracteres ilegíveis.

Parece um detalhe pequeno, mas erros de codificação podem causar:

  • campos corrompidos;

  • falhas de validação;

  • rejeição de mensagens;

  • problemas em arquivos;

  • divergência entre sistemas;

  • erros difíceis de reproduzir.

Dica Bellacosa:

Quando uma integração produz “hieróglifos alienígenas”, investigue encoding antes de acusar os Klingons.


9. Comunicação síncrona: esperar pela resposta

Nem toda operação segue o mesmo estilo de comunicação.

Na comunicação síncrona, o cliente envia uma solicitação e espera a resposta.

Exemplo:

Aplicativo → Consultar saldo → Sistema
Aplicativo ← Saldo atual ← Sistema

O usuário está aguardando.

Por isso, o tempo de resposta é importante.

Uma consulta de saldo que demora trinta segundos causa péssima experiência, mesmo que tecnicamente seja concluída.

No fluxo síncrono, uma falha em qualquer ponto pode ser percebida imediatamente pelo usuário:

  • timeout;

  • serviço indisponível;

  • erro de autenticação;

  • falha interna;

  • resposta inválida.

Arquiteturas síncronas são simples de compreender, mas podem criar dependência direta entre os participantes.

Se o sistema de destino não responder, o chamador também ficará esperando.

É aqui que a mensageria oferece outra abordagem.


10. IBM MQ: o correio confiável da galáxia

O IBM MQ permite que aplicações troquem mensagens por meio de filas.

Em vez de exigir que origem e destino estejam disponíveis exatamente no mesmo instante, a aplicação coloca uma mensagem em uma fila.

Exemplo:

Aplicação A
    ↓ PUT
Fila MQ
    ↓ GET
Aplicação B

Se a Aplicação B estiver temporariamente indisponível, a mensagem poderá permanecer na fila até que o processamento seja retomado.

Isso é chamado de desacoplamento.

A origem não precisa conhecer todos os detalhes internos do consumidor.

Ela precisa saber em qual fila colocar a mensagem e qual contrato respeitar.

Em ambientes financeiros, essa confiabilidade é extremamente valiosa.

Imagine uma ordem de pagamento.

Perder a mensagem seria inaceitável.

Processá-la duas vezes também seria perigoso.

O MQ fornece recursos como:

  • persistência;

  • confirmação;

  • unidades de trabalho;

  • filas;

  • canais;

  • recuperação;

  • segurança;

  • entrega controlada.

Entretanto, aqui cabe uma correção importante a uma simplificação muito comum.

Dizer que qualquer sistema de mensageria “garante automaticamente exatamente uma vez” pode ser enganoso.

Na prática, a semântica de entrega depende da configuração, da transação, do desenho da aplicação e do tratamento de erros.

Uma aplicação robusta deve estar preparada para lidar com reprocessamentos.

Por isso existe um conceito essencial chamado idempotência.

Uma operação idempotente pode ser repetida sem produzir efeitos indevidos.

Por exemplo, uma transação pode ter um identificador único:

ID-TRANSACAO = PIX-20240718-0000123456

Antes de processar, o sistema verifica se aquele identificador já foi concluído.

Se já foi, não debita novamente.

Isso ajuda a prevenir duplicidades.

O MQ transporta mensagens com grande confiabilidade, mas a regra de negócio também precisa participar da proteção.


11. Kafka: o diário de bordo dos eventos

Kafka e MQ podem coexistir, mas não são exatamente a mesma coisa.

O Kafka é muito utilizado como plataforma de eventos e streaming.

Uma transação aprovada pode gerar um evento:

{
  "evento": "PIX_REALIZADO",
  "contaOrigem": "12345",
  "valor": 250.75,
  "timestamp": "2024-07-18T18:30:00"
}

Diversos consumidores podem ler esse evento:

  • motor antifraude;

  • sistema de notificações;

  • plataforma analítica;

  • Data Lake;

  • auditoria;

  • monitoramento;

  • campanhas;

  • modelos de inteligência artificial.

Em vez de um sistema ligar diretamente para todos os outros, ele publica o evento.

Cada consumidor reage conforme sua responsabilidade.

É como o diário de bordo da nave.

Um acontecimento é registrado, e diferentes departamentos usam a informação:

  • segurança analisa riscos;

  • engenharia mede impacto;

  • comando acompanha a missão;

  • ciência estuda padrões.

O Kafka é especialmente útil quando muitos consumidores precisam observar o mesmo fluxo de eventos.


12. Finalmente, o IBM Z

Depois de atravessar camadas externas, a solicitação pode chegar ao ambiente IBM Z.

Aqui é importante desfazer um mito:

Mainframe não significa um computador antigo isolado em uma sala escura.

O IBM Z moderno participa de arquiteturas híbridas, APIs, nuvem, inteligência artificial, containers, DevOps e automação.

Sua grande especialidade continua sendo processar cargas críticas com:

  • alta disponibilidade;

  • segurança;

  • escalabilidade;

  • consistência;

  • grande volume de transações;

  • capacidade de recuperação;

  • isolamento de workloads.

O mainframe não está escondido no passado.

Ele está silenciosamente sustentando o presente.


13. z/OS: o comandante da nave

O z/OS é o sistema operacional que coordena o ambiente.

Ele gerencia recursos como:

  • memória;

  • processadores;

  • dispositivos;

  • arquivos;

  • usuários;

  • segurança;

  • tarefas;

  • subsistemas;

  • workloads;

  • comunicação.

Dentro do z/OS podem coexistir diversos componentes:

  • CICS;

  • Db2;

  • IMS;

  • MQ;

  • JES2;

  • RACF;

  • Unix System Services;

  • ferramentas de monitoramento;

  • produtos de terceiros.

Para o iniciante, isso pode parecer intimidador.

Mas pense na Enterprise.

A nave possui engenharia, comando, segurança, comunicações, ciência e medicina. Cada departamento executa uma função específica, mas todos fazem parte da mesma missão.

O z/OS coordena essa tripulação tecnológica.


14. RACF: quem é você e o que pode fazer?

O RACF é um dos sistemas de segurança associados ao ambiente z/OS.

Ele pode participar de decisões como:

  • identificação do usuário;

  • autenticação;

  • acesso a recursos;

  • associação a grupos;

  • proteção de datasets;

  • proteção de transações;

  • controle de comandos;

  • auditoria.

É importante separar dois conceitos:

Autenticação: confirmar quem você é.

Autorização: determinar o que você pode fazer.

Um usuário pode estar corretamente autenticado e ainda assim não possuir autorização para consultar determinado recurso.

No cenário bancário, a autorização não se limita ao usuário humano.

Também pode envolver:

  • identidade da aplicação;

  • certificado;

  • região CICS;

  • conexão;

  • transação;

  • serviço;

  • perfil de segurança.

Esse modelo de camadas reduz a chance de um único erro liberar acesso irrestrito.

Na Frota Estelar, não basta possuir um uniforme. Para acessar o núcleo de dobra, é necessária autorização específica.


15. WLM: nem todas as missões têm a mesma prioridade

O Workload Manager, ou WLM, ajuda o z/OS a administrar recursos conforme objetivos de serviço.

Em momentos de grande carga, diferentes tipos de trabalho competem por CPU, memória, canais e outros recursos.

O sistema precisa decidir quais atividades devem receber prioridade.

Uma possível classificação seria:

  • pagamentos em tempo real;

  • consultas de clientes;

  • processamento de cartões;

  • relatórios internos;

  • tarefas batch;

  • testes;

  • rotinas de menor urgência.

O WLM trabalha com políticas e metas.

O objetivo não é simplesmente “dar tudo para o programa mais importante”, mas equilibrar o ambiente para atender níveis de serviço.

Essa inteligência é uma das razões pelas quais ambientes mainframe conseguem manter cargas críticas mesmo sob pressão intensa.

Imagine um alerta vermelho na Enterprise.

O sistema de suporte à vida terá prioridade sobre a impressora do bar do Ten Forward.

Da mesma forma, uma transação financeira urgente pode receber mais atenção que um relatório administrativo não crítico.


16. CICS: a torre de controle das transações

O CICS é um monitor de processamento de transações.

Ele foi projetado para executar grande quantidade de transações curtas, concorrentes e controladas.

Uma transação CICS pode:

  • receber dados;

  • identificar o programa;

  • executar lógica;

  • acessar Db2;

  • ler ou atualizar VSAM;

  • enviar mensagens MQ;

  • conversar com outros serviços;

  • confirmar ou desfazer alterações;

  • retornar uma resposta.

O CICS administra aspectos que, em uma aplicação isolada, seriam difíceis de implementar com a mesma robustez.

Podemos imaginá-lo como uma torre de controle.

Milhares de “naves” chegam e partem.

A torre precisa:

  • saber quem está chegando;

  • escolher a pista;

  • evitar colisões;

  • controlar recursos;

  • reagir a falhas;

  • manter o tráfego fluindo.

Uma transação CICS pode ter um identificador de quatro caracteres, por exemplo:

CSLD

Esse identificador pode estar associado a um programa:

PGMSALDO

Ao receber a transação, o CICS chama o programa correspondente.


17. COMMAREA, Channels e Containers

O programa precisa receber os dados da solicitação.

Historicamente, muitas aplicações CICS utilizam a COMMAREA.

Exemplo:

       LINKAGE SECTION.

       01  DFHCOMMAREA.
           05 CA-CONTA       PIC X(10).
           05 CA-OPERACAO    PIC X(02).
           05 CA-VALOR       PIC S9(09)V99 COMP-3.
           05 CA-STATUS      PIC X(02).

O programa acessa os dados recebidos por essa área.

A COMMAREA possui limitações de tamanho e exige atenção rigorosa ao layout.

Outra abordagem é utilizar Channels e Containers.

Um Channel pode conter múltiplos Containers. Isso permite organizar dados de maneira mais flexível.

Por exemplo:

CHANNEL: CH-PAGAMENTO

CONTAINER: CT-CABECALHO
CONTAINER: CT-CLIENTE
CONTAINER: CT-TRANSACAO
CONTAINER: CT-RESPOSTA

Para integrações modernas e estruturas maiores, Channels e Containers podem oferecer vantagens importantes.

Mas a COMMAREA continua sendo parte essencial da história e da realidade de muitas aplicações.


18. O programa COBOL entra em cena

Agora chegamos ao coração da regra de negócio.

O programa COBOL poderá:

  1. validar os dados recebidos;

  2. confirmar o tipo de operação;

  3. consultar informações;

  4. verificar limites;

  5. calcular valores;

  6. atualizar bancos ou arquivos;

  7. gerar respostas;

  8. tratar erros.

Um fluxo simplificado poderia ser:

       PROCEDURE DIVISION USING DFHCOMMAREA.

           PERFORM VALIDAR-REQUISICAO

           IF CA-STATUS = '00'
               PERFORM CONSULTAR-CONTA
           END-IF

           IF CA-STATUS = '00'
               PERFORM PROCESSAR-OPERACAO
           END-IF

           PERFORM MONTAR-RESPOSTA

           EXEC CICS RETURN END-EXEC.

O código real será mais complexo, mas essa estrutura revela uma característica poderosa do COBOL: a lógica pode ser organizada para se aproximar da linguagem do negócio.

       VALIDAR-CLIENTE.
       VERIFICAR-SALDO.
       CALCULAR-LIMITE.
       REGISTRAR-PAGAMENTO.
       MONTAR-RESPOSTA.

Para um iniciante, isso é valioso.

COBOL foi criado para permitir que programas de negócio fossem compreendidos com maior clareza.


19. Db2: onde os dados ganham consistência

O programa pode acessar o Db2 for z/OS.

Uma consulta simplificada seria:

           EXEC SQL
               SELECT SALDO_ATUAL
                 INTO :WS-SALDO
                 FROM CONTAS
                WHERE AGENCIA = :WS-AGENCIA
                  AND CONTA   = :WS-CONTA
           END-EXEC.

Depois do comando SQL, o programa deve verificar o resultado.

           EVALUATE SQLCODE
               WHEN 0
                   MOVE '00' TO WS-STATUS
               WHEN 100
                   MOVE '01' TO WS-STATUS
               WHEN OTHER
                   MOVE '99' TO WS-STATUS
           END-EVALUATE.

O SQLCODE informa o resultado da operação.

Alguns exemplos gerais:

0      Sucesso
+100   Nenhuma linha encontrada
Negativo Erro

Ignorar o SQLCODE é uma das maneiras mais rápidas de transformar uma missão simples em um episódio de desastre espacial.

Dica Bellacosa:

Depois de cada comando SQL, verifique o retorno. O silêncio do programa não significa sucesso; às vezes significa que o problema ainda não encontrou você.


20. ACID: as leis da física transacional

Uma operação financeira precisa manter consistência.

Considere uma transferência:

  1. debitar a conta A;

  2. creditar a conta B;

  3. registrar o histórico;

  4. gerar auditoria.

O sistema não pode debitar A e falhar antes de creditar B.

Essas operações devem fazer parte de uma unidade lógica.

As propriedades ACID ajudam a explicar o comportamento esperado.

Atomicidade

Ou tudo acontece, ou nada acontece.

Consistência

A transação leva o banco de um estado válido para outro estado válido.

Isolamento

Transações concorrentes não devem interferir de maneira incorreta umas nas outras.

Durabilidade

Após a confirmação, o resultado precisa sobreviver a falhas.

No CICS e no Db2, os conceitos de commit e rollback são fundamentais.

Quando tudo ocorre corretamente:

COMMIT

Quando algo falha:

ROLLBACK

O rollback desfaz alterações ainda não confirmadas dentro da unidade de trabalho.

É como uma viagem temporal controlada.

A missão deu errado? O sistema retorna ao último ponto consistente.

Infelizmente, sem a participação de Q.


21. O caminho de volta

Depois que o programa COBOL conclui a operação, ele monta uma resposta.

Exemplo:

       01  WS-RESPOSTA.
           05 WS-CODIGO       PIC X(02).
           05 WS-MENSAGEM     PIC X(60).
           05 WS-SALDO        PIC S9(09)V99 COMP-3.

Essa estrutura retorna ao CICS.

Depois poderá passar por uma camada de integração, que a converte para JSON:

{
  "codigo": "00",
  "mensagem": "Transacao realizada com sucesso",
  "saldo": 1750.25
}

A resposta percorre novamente:

COBOL
  ↓
CICS
  ↓
z/OS Connect ou serviço de integração
  ↓
API Gateway
  ↓
Internet protegida por TLS
  ↓
Aplicativo

Então aparece a mensagem na tela.

O usuário vê apenas:

Sucesso.

Nós vemos toda uma arquitetura trabalhando em conjunto.


22. O que acontece nos bastidores e quase ninguém vê

A imagem principal normalmente mostra os componentes mais conhecidos, mas uma arquitetura real pode envolver muito mais.

Balanceamento de carga

Distribui as requisições entre diversas instâncias.

Cache

Evita consultas repetitivas quando os dados permitem armazenamento temporário.

HSM

Protege chaves criptográficas em hardware especializado.

Antifraude

Analisa comportamento, dispositivo, localização, valor, horário e histórico.

Observabilidade

Registra métricas, logs e traces para acompanhar a jornada da solicitação.

SIEM

Correlaciona eventos de segurança e procura comportamentos suspeitos.

Auditoria

Mantém evidências sobre quem fez o quê, quando e a partir de onde.

Alta disponibilidade

Permite continuidade mesmo quando componentes falham.

Recuperação de desastre

Prepara o ambiente para eventos graves, incluindo perda de um Data Center.

A verdadeira arquitetura bancária é muito maior que uma linha entre celular e COBOL.

Ela se parece mais com uma frota completa.


23. Um exemplo completo: consulta de saldo

Vamos organizar o fluxo passo a passo.

Passo 1 — O usuário toca em “Saldo”

O aplicativo cria uma solicitação.

{
  "conta": "567890",
  "operacao": "SALDO"
}

Passo 2 — TLS protege a comunicação

Os dados seguem criptografados.

Passo 3 — O WAF analisa o tráfego

Requisições suspeitas podem ser bloqueadas.

Passo 4 — O API Gateway valida o acesso

O token é verificado, políticas são aplicadas e a API correta é selecionada.

Passo 5 — A integração traduz os dados

JSON é transformado na estrutura esperada pelo sistema central.

Passo 6 — A solicitação chega ao CICS

O CICS identifica a transação e chama o programa COBOL.

Passo 7 — O programa valida a conta

Campos obrigatórios, formato e regras básicas são analisados.

Passo 8 — O COBOL consulta o Db2

O saldo é recuperado.

Passo 9 — O retorno é tratado

O programa verifica SQLCODE, monta o status e prepara a resposta.

Passo 10 — A integração converte para JSON

A estrutura COBOL é traduzida.

Passo 11 — O aplicativo recebe o resultado

A tela exibe o saldo.

A consulta aparentemente simples mobilizou múltiplos componentes.


24. Outro exemplo: uma transferência PIX

Uma transferência é mais sensível que uma consulta.

O fluxo pode incluir:

  • autenticação reforçada;

  • validação de dispositivo;

  • checagem de limite;

  • análise antifraude;

  • validação do destinatário;

  • verificação de saldo;

  • débito;

  • crédito;

  • registro contábil;

  • geração de comprovante;

  • notificação;

  • auditoria;

  • publicação de eventos.

Em alguns casos, partes são síncronas e outras assíncronas.

O usuário precisa saber imediatamente se a operação foi aceita.

Entretanto, tarefas secundárias podem ocorrer depois, como:

  • alimentar o Data Lake;

  • atualizar relatórios;

  • enviar campanhas;

  • executar análises históricas.

Essa combinação reduz o tempo percebido pelo usuário sem sacrificar controles importantes.


25. Onde cada tecnologia realmente se encaixa

Um iniciante pode cair na armadilha de tentar escolher “a melhor tecnologia”.

Mas a pergunta correta é:

Qual problema cada tecnologia resolve?

O WAF protege aplicações expostas.

O API Gateway administra APIs.

O z/OS Connect ajuda a integrar APIs e ativos do IBM Z.

O MQ transporta mensagens com confiabilidade e desacoplamento.

O Kafka distribui eventos para múltiplos consumidores.

O RACF controla identidades e acessos no z/OS.

O WLM gerencia prioridades e objetivos de serviço.

O CICS executa transações.

O COBOL implementa regras de negócio.

O Db2 armazena e protege dados relacionais.

Eles não são necessariamente concorrentes.

São membros de uma tripulação.

O erro arquitetural acontece quando uma ferramenta é usada fora de sua missão.

Não peça ao tricorder para operar os motores de dobra.


26. Dicas para o Programador COBOL Padawan

Aprenda primeiro o fluxo, depois os produtos

Antes de decorar comandos, compreenda:

Entrada → Validação → Processamento → Persistência → Resposta

Domine estruturas de dados

Entenda profundamente:

  • PIC X;

  • PIC 9;

  • sinal;

  • casas decimais;

  • COMP;

  • COMP-3;

  • redefinições;

  • níveis;

  • Copybooks.

A integração depende do contrato de dados.

Trate códigos de retorno

Verifique:

  • SQLCODE;

  • EIBRESP;

  • EIBRESP2;

  • códigos MQ;

  • status HTTP;

  • códigos de aplicação.

Não confunda erro técnico com erro de negócio

Erro técnico:

Db2 indisponível

Erro de negócio:

Saldo insuficiente

O tratamento deve ser diferente.

Pense em reprocessamento

Pergunte:

O que acontece se a mesma mensagem chegar novamente?

Evite mensagens vagas

Em vez de:

ERRO

Prefira códigos e mensagens que permitam diagnóstico.

TRX104 - LIMITE DIARIO EXCEDIDO

Nunca registre dados sensíveis sem necessidade

Logs não devem expor:

  • senhas;

  • tokens;

  • números completos de cartões;

  • chaves;

  • informações pessoais desnecessárias.

Conheça o caminho completo

Mesmo sendo programador COBOL, compreenda API, JSON, HTTP, mensageria e segurança.

Você não precisa dominar tudo imediatamente.

Mas precisa saber conversar com as outras equipes.


27. Curiosidades para levar ao Ten Forward

O COBOL nasceu antes do primeiro episódio de Star Trek

COBOL começou a ser desenvolvido em 1959.

Star Trek estreou em 1966.

Ou seja, quando a Enterprise iniciou sua missão televisiva, o COBOL já estava em operação.

JSON é muito mais jovem

JSON ganhou popularidade décadas depois do COBOL.

Mesmo assim, hoje os dois formatos trabalham juntos diariamente.

O código antigo pode sustentar a experiência mais moderna

Um aplicativo com biometria, animações e inteligência artificial pode depender de uma regra escrita originalmente muitos anos antes.

A interface muda.

A regra central continua valiosa.

Nem toda lentidão está no mainframe

Quando uma transação está lenta, o problema pode estar:

  • no celular;

  • na operadora;

  • no DNS;

  • no WAF;

  • no Gateway;

  • na rede;

  • no serviço de integração;

  • no banco;

  • em uma fila;

  • em um consumidor externo.

Diagnosticar exige observabilidade de ponta a ponta.


28. Easter eggs da ponte de comando

Em muitos ambientes de desenvolvimento, nomes de projetos, filas, servidores e transações escondem referências culturais.

Você poderá encontrar nomes como:

KIRK
SPOCK
SCOTTY
ENTERPRISE
VULCAN
NCC1701

Mas há uma regra informal importante:

O nome divertido pode existir no ambiente de testes. Em produção, a clareza operacional deve vencer a criatividade descontrolada.

Uma fila chamada:

Q.PIX.PROCESSAMENTO

é mais fácil de compreender durante um incidente do que:

Q.SPOCK.MIND.MELD

Embora, admitamos, a segunda seja muito mais divertida.

Outro easter egg conceitual aparece na própria arquitetura.

O z/OS Connect funciona como o comunicador universal.

O CICS atua como a torre de controle.

O RACF é a segurança da Frota.

O WLM é o oficial que define prioridades.

O Db2 é a memória histórica.

O MQ é o serviço de transporte.

O COBOL é o veterano que conhece todas as regras da missão.

E o programador?

O programador é o tripulante que precisa garantir que todos consigam trabalhar juntos.


29. Por que aprender isso em 2024?

Porque o mercado não precisa apenas de pessoas que saibam escrever uma tela ou um programa isolado.

Ele precisa de profissionais que compreendam sistemas.

Um desenvolvedor mobile pode criar uma excelente interface, mas precisa entender limites, autenticação, falhas e contratos.

Um desenvolvedor de APIs precisa compreender transações, idempotência, segurança e disponibilidade.

Um programador COBOL precisa entender JSON, REST, eventos e integração.

Um especialista de banco precisa conhecer concorrência, commit, rollback e performance.

Quanto mais você compreende a jornada completa, maior é sua capacidade de:

  • diagnosticar incidentes;

  • projetar integrações;

  • conversar com outras equipes;

  • evitar erros;

  • modernizar com segurança;

  • tomar decisões arquiteturais.

O profissional raro não é aquele que sabe tudo.

É aquele que entende como as partes se conectam.


30. Plano de estudo para atravessar essa ponte

Etapa 1 — Fundamentos web

Estude:

  • HTTP;

  • HTTPS;

  • métodos GET, POST, PUT e DELETE;

  • códigos de status;

  • headers;

  • JSON.

Etapa 2 — APIs

Aprenda:

  • REST;

  • contratos;

  • autenticação;

  • versionamento;

  • tratamento de erros;

  • OpenAPI.

Etapa 3 — COBOL estruturado

Domine:

  • divisão de dados;

  • PIC;

  • Copybooks;

  • PERFORM;

  • EVALUATE;

  • tratamento de retorno;

  • subprogramas.

Etapa 4 — CICS

Explore:

  • transações;

  • programas;

  • COMMAREA;

  • Channels e Containers;

  • LINK;

  • XCTL;

  • RETURN;

  • EIBRESP.

Etapa 5 — Db2

Pratique:

  • SQL embutido;

  • cursores;

  • SQLCODE;

  • commit;

  • rollback;

  • locks;

  • índices.

Etapa 6 — Mensageria

Conheça:

  • filas;

  • produtores;

  • consumidores;

  • mensagens persistentes;

  • unidades de trabalho;

  • dead-letter queues;

  • idempotência.

Etapa 7 — Integração IBM Z

Estude:

  • z/OS Connect;

  • APIs para CICS;

  • transformação JSON;

  • contratos de dados;

  • segurança.

Etapa 8 — Observabilidade

Aprenda a seguir uma transação do início ao fim usando:

  • logs;

  • métricas;

  • traces;

  • identificadores de correlação.


Conclusão — O mainframe nunca esteve longe do seu celular

Quando você consulta o saldo, paga uma conta ou realiza uma transferência, não está usando apenas um aplicativo.

Está acionando uma cadeia sofisticada de tecnologias.

O celular oferece a experiência.

O TLS protege a viagem.

O WAF vigia a fronteira.

O API Gateway organiza o tráfego.

O z/OS Connect traduz os idiomas.

O MQ transporta mensagens confiáveis.

O Kafka espalha eventos.

O RACF protege os recursos.

O WLM administra prioridades.

O CICS coordena as transações.

O COBOL executa as regras.

O Db2 preserva os dados.

Cada componente cumpre uma missão.

E essa é talvez a maior lição para o Programador COBOL Padawan:

o mainframe não é uma ilha.

Ele é parte de um universo conectado.

Aprender COBOL continua sendo importante, mas o profissional moderno precisa enxergar além da Procedure Division. Precisa entender de onde os dados chegam, como são protegidos, como são traduzidos, como são processados e como retornam ao usuário.

A próxima vez que você tocar em “Confirmar” no aplicativo do banco, observe aqueles poucos segundos de espera.

Por trás da tela, uma frota inteira estará trabalhando.

Mensagens atravessarão redes.

Sistemas confirmarão identidades.

Filas protegerão transações.

Programas COBOL executarão regras consolidadas por décadas.

Bancos de dados preservarão a consistência.

E, em algum lugar de um Data Center, um mainframe continuará cumprindo silenciosamente sua missão:

processar com segurança aquilo que o mundo moderno não pode se permitir perder.

Vida longa ao COBOL.

Vida longa ao mainframe.

E que suas transações retornem sempre com SQLCODE = 0.


sábado, 9 de novembro de 2024

JSON em COBOL no IBM Z: O Holocron das APIs Modernas – JSON Jedi Master - Parte IV

 

Bellacosa Mainframe e o json no cobol parte iv

JSON em COBOL no IBM Z: O Holocron das APIs Modernas

Parte 4 – JSON Jedi Master

z/OS Connect, MQ, Kafka, OpenShift, APIs de Alto Desempenho, Segurança OWASP e as Técnicas Jedi do IBM Z

Por Bellacosa Mainframe


"O Padawan aprende JSON PARSE. O Cavaleiro domina JSON GENERATE. O Mestre compreende que JSON é apenas a linguagem utilizada para conectar mundos inteiros."

Mestre Bellacosa Sysprog Jedi


Introdução

Chegamos ao último holocron.

Na Parte 1 aprendemos:

  • JSON

  • JSON GENERATE

  • UTF8

  • APIs

Na Parte 2:

  • JSON PARSE

  • Arrays

  • OCCURS

  • Segurança

Na Parte 3:

  • JSON GENERATE avançado

  • SUPPRESS

  • NAME OF

  • APIs REST

Agora chegamos ao nível do Mestre.

O momento em que COBOL deixa de apenas processar JSON.

E passa a ser um participante ativo de arquiteturas modernas.


O grande segredo

Muitos ainda imaginam.

COBOL

↓

Batch

↓

Relatório

↓

Fim.

Mas o IBM Z moderno é muito diferente.

Hoje podemos encontrar:

COBOL

↓

JSON

↓

API

↓

Mobile

↓

Cloud

↓

Kafka

↓

OpenShift

↓

IA

↓

Aplicações Web


O papel do JSON

JSON tornou-se.

O idioma universal.


Imagine.

Banco.

Aplicativo.

PIX.

Open Finance.

Cartão.

Seguro.

Marketplace.

IoT.


Praticamente todos utilizam.

JSON.


z/OS Connect

Talvez seja a tecnologia mais importante.

Para o COBOL moderno.


O que é?

Uma ponte.

Entre.

IBM Z.

E.

REST APIs.


Visualmente.

Smartphone

↓

REST

↓

z/OS Connect

↓

COBOL

↓

DB2

Exemplo

Usuário.

Consulta saldo.

Aplicativo.

↓

HTTPS

↓

z/OS Connect

↓

JSON

↓

COBOL

↓

DB2

↓

JSON

↓

Aplicativo


Tudo transparente.


COBOL não vê HTTP

Na maioria dos casos.

Não.


Ele apenas recebe.

Estrutura.

COBOL.

Já preenchida.


Exemplo.

01 WS-CONTA.


05 AGENCIA.


05 CONTA.



JSON PARSE.

Feito.

Automaticamente.


MQ

Outro caso.

Muito comum.


Mensagem.

Chega.

MQ.


Payload.

JSON.


COBOL.

Processa.


Exemplo.

{

"tipo":"pix",

"valor":100

}

COBOL.

Recebe.


Executa.

Negócio.


Responde.


JSON GENERATE.


MQPUT.


Fim.


Kafka

Sim.

Também.


Arquitetura.

COBOL

↓

MQ

↓

Kafka Bridge

↓

Kafka

↓

Analytics

Muito utilizado.


Open Finance.


Fraudes.


IA.


Big Data.


OpenShift

Outro mundo.

Interessante.


Microsserviços.

Containers.

Kubernetes.


COBOL.

Participa.


Arquitetura.

OpenShift

↓

REST

↓

zOS Connect

↓

COBOL

↓

IMS

DB2

Muito elegante.


APIs síncronas

Cliente.

Espera.

Resposta.


Exemplo.

Saldo.


API.

Responde.

200 ms.


APIs assíncronas

MQ.

Kafka.

Evento.


Mais modernas.


GraphQL

Também possível.


Embora.

Menos comum.


Segurança

Aqui começa.

O lado sombrio.


OWASP.

Existe.

Também.

Para APIs.


OWASP API Top 10

Excelente leitura.


Problemas.

Mais comuns.


Excesso.

Dados.


Exposição.

Sensível.


Autorização.

Fraca.


Payload.

Gigante.


DoS.


Exemplo ruim

COBOL.

01 CLIENTE.


05 CPF.


05 SENHA.


05 TOKEN.

JSON GENERATE.


API.


Exposta.


Desastre.


Melhor

Criar DTO.


Exemplo.

01 API-CLIENTE.


05 NOME.


05 LIMITE.

Muito melhor.


JWT

Muito utilizado.


JSON Web Token.


Aplicação.

Recebe.


Valida.


Autoriza.


COBOL.

Pode.

Consumir.


Ou.

Delegar.


TLS

Obrigatório.

Hoje.


HTTPS.

Sempre.


Nunca.

HTTP.


Rate Limit

Muito importante.


Evita.

DoS.


Exemplo.

Chamadas.

Por minuto.


Logs

Essenciais.


Exemplo.

2026-06-25


PIX


100 reais


OK

Muito útil.


Auditoria.


Performance

JSON.

Tem custo.


Parser.

CPU.


Serializer.

CPU.


Mas.

IBM Z.

É extremamente eficiente.


Benchmarks.

Mostram.

Milhares.

TPS.


Sem dificuldades.


JSON gigantesco

Cuidado.


Exemplo.

50 MB.


Parser.

Vai sofrer.


CPU.

Memória.


Melhor.

Paginar.


Streaming

Excelente opção.


Processar.

Em partes.


Mais eficiente.


Cache

Pode ajudar.


JSON.

Já montado.


Evita.

JSON GENERATE.

Toda vez.


Curiosidade

Muitos bancos.

Geram.

Milhões.

JSON.

Por hora.


E.

Grande parte.

Nasce.

Em COBOL.


Curiosidade 2

Usuário.

Abre.

App.


Consulta.

Saldo.


Recebe.

JSON.


Origem.

Programa COBOL.

Escrito.


Executando.

Num.

IBM z17.


Curiosidade 3

Muitos.

Open Banking.

Brasileiros.

Passam.

Por.

COBOL.

Sem.

Que.

Usuário.

Perceba.


Bellacosa Best Practices

Regra 1

Nunca.

Gerar.

JSON.

Com STRING.


Regra 2

JSON GENERATE.

Sempre.


Regra 3

JSON PARSE.

Sempre.


Regra 4

Versione.

APIs.


Exemplo.

v1

v2

v3


Regra 5

OpenAPI.

Swagger.

Documente.


Regra 6

Nunca.

Expor.

Campos internos.


Regra 7

Teste.

UTF8.


Regra 8

Monitore.

SMF.

RMF.

Logs.


Regra 9

Valide.

Payloads.


Regra 10

Use.

OWASP.

API Top 10.


Quando usar JSON?

Excelente.

REST.

Open Banking.

PIX.

Cloud.

Kafka.

MQ.

OpenShift.

Mobile.

Marketplace.

IoT.

Microsserviços.


Quando evitar?

Batch.

VSAM.

Arquivos internos.

Processamento.

Fechado.


O Conselho Final do Mestre Bellacosa

Durante muito tempo, disseram ao desenvolvedor COBOL que seu universo terminava em arquivos sequenciais, JCLs, relatórios impressos e terminais verdes.

JSON mostrou que isso nunca foi verdade.

JSON permitiu que programas escritos décadas atrás passassem a conversar com smartphones, aplicativos financeiros, plataformas Open Banking, clusters OpenShift, sistemas Kafka e serviços espalhados por diversas nuvens.

Talvez essa seja a maior beleza do IBM Z moderno.

Ele não obriga ninguém a abandonar o COBOL.

Ele apenas entrega novas ferramentas.

E diz:

Continue usando seus níveis 01, 05, 10 e OCCURS.

Continue confiando na robustez do Enterprise COBOL.

Continue processando milhões de transações por segundo.

Eu apenas ensinarei seu programa a falar o idioma utilizado pela galáxia digital.

E talvez essa seja a verdadeira lição do Holocron JSON.

JSON não substituiu COBOL.

JSON apenas permitiu que COBOL expandisse sua voz para além dos corredores do datacenter, alcançando praticamente qualquer sistema capaz de compreender uma simples mensagem cercada por chaves e aspas.


Fim do Holocron Bellacosa Mainframe

JSON em COBOL no IBM Z – Parte 1 a Parte 4 concluídas

"Que o JSON PARSE esteja com você. E que o JSON GENERATE nunca produza um campo SENHA por engano." 🚀💙🖥️


sábado, 21 de setembro de 2024

A História da Integração Corporativa sem Mistérios

Bellacosa Mainframe e a historia da integracao corporativa sem misterios

 

☕ Um Café no Bellacosa Mainframe

A História da Integração Corporativa sem Mistérios

Do arquivo sequencial ao IBM App Connect Enterprise: o guia definitivo para o programador COBOL Padawan entender como os sistemas aprenderam a conversar

“A tecnologia muda, os protocolos ganham novos nomes, mas a missão permanece: conectar, transformar e entregar valor.”

Imagine a seguinte cena.

Você está sentado diante de uma tela verde, analisando um programa COBOL que lê um arquivo sequencial, consulta uma tabela Db2 e grava registros em um dataset de saída. Até aí, tudo parece familiar.

Então alguém da arquitetura chega e diz:

— Precisamos publicar esses dados em uma API, enviar eventos para o Kafka, integrar com o Salesforce, consumir um serviço REST e encaminhar mensagens para uma aplicação que está rodando no OpenShift.

O programador COBOL Padawan olha para o terminal, respira fundo e pensa:

— Em que momento meu arquivo FB de 80 posições virou parte de uma arquitetura intergaláctica?

Calma, jovem aprendiz.

Apesar dos nomes modernos, dos diagramas coloridos e das apresentações carregadas de expressões como cloud-native, event-driven, API-led e composable integration, o problema central continua sendo o mesmo enfrentado pelos profissionais de tecnologia há décadas:

como fazer sistemas diferentes trocarem informações com segurança, confiabilidade e significado?

Esta é a história da integração corporativa.

Uma história que começou com arquivos, passou por conexões ponto a ponto, middleware, barramentos de serviço, SOA, APIs, nuvem, eventos e inteligência artificial.

E, ao contrário do que alguns imaginam, o mainframe não ficou assistindo a essa evolução de longe. Ele participou de praticamente todas as fases.

Prepare sua caneca, ajuste o brilho do terminal 3270 e venha conhecer a longa jornada que transformou arquivos em APIs, transações em eventos e sistemas isolados em ecossistemas digitais.


1. O que é integração corporativa?

Integração corporativa é o conjunto de técnicas, padrões, programas e plataformas utilizados para permitir que diferentes sistemas compartilhem dados e coordenem processos.

Esses sistemas podem estar:

  • no mesmo computador;

  • em servidores diferentes;

  • em sistemas operacionais diferentes;

  • em empresas diferentes;

  • em nuvens diferentes;

  • em tecnologias criadas com décadas de distância.

Imagine um banco.

O banco pode possuir:

  • um sistema de contas correntes em COBOL e CICS;

  • um sistema de cartões em Java;

  • um aplicativo móvel;

  • um sistema antifraude;

  • um CRM;

  • uma plataforma de investimentos;

  • um ambiente de análise de dados;

  • serviços de Pix;

  • aplicações em nuvem;

  • parceiros externos.

Nenhum desses sistemas vive completamente sozinho.

Quando um cliente altera seu endereço, essa mudança pode precisar chegar ao sistema de contas, cartões, seguros, investimentos, correspondência, prevenção a fraudes e atendimento.

Integração é justamente o mecanismo que permite que essa informação viaje entre os sistemas.

Podemos resumir a missão em quatro verbos:

conectar, transformar, transportar e controlar.

Conectar significa permitir a comunicação.

Transformar significa converter dados entre formatos.

Transportar significa entregar a informação ao destino.

Controlar significa garantir segurança, monitoramento, rastreabilidade e tratamento de erros.


2. A integração existia antes das APIs

Hoje é comum alguém associar integração diretamente a APIs REST.

Mas a integração corporativa nasceu muito antes da Web.

Ela já existia quando os dados eram transportados em:

  • cartões perfurados;

  • fitas magnéticas;

  • discos;

  • arquivos sequenciais;

  • relatórios impressos;

  • terminais;

  • redes proprietárias.

Um programa COBOL que gera um arquivo para outro programa consumir já está realizando integração.

Um job que extrai registros do Db2 e os envia por FTP também é integração.

Uma transação CICS que coloca uma mensagem em uma fila IBM MQ é integração.

Uma aplicação que publica um evento em Kafka é integração.

Uma API que recebe JSON e chama uma transação IMS é integração.

A tecnologia muda, mas o princípio permanece.


3. Primeira era: batch e arquivos

A integração por arquivos

Durante as décadas de 1970 e 1980, grande parte da troca de dados corporativos era realizada por arquivos.

O fluxo era simples:

Sistema de origem
       |
       v
Gera arquivo
       |
       v
Transporte ou disponibilização
       |
       v
Sistema de destino lê o arquivo

No mainframe, isso poderia ser implementado com:

  • COBOL;

  • JCL;

  • QSAM;

  • VSAM;

  • GDG;

  • SORT;

  • IDCAMS;

  • FTP;

  • fitas magnéticas.

Um sistema de folha de pagamento, por exemplo, poderia gerar um arquivo contendo os créditos dos funcionários.

O sistema bancário receberia esse arquivo, validaria os registros e efetuaria os depósitos.

Um layout hipotético poderia ser:

01 REGISTRO-PAGAMENTO.
   05 NUMERO-CONTA       PIC 9(10).
   05 VALOR-PAGAMENTO    PIC 9(11)V99.
   05 DATA-PAGAMENTO     PIC 9(08).
   05 CODIGO-EMPRESA     PIC X(10).

Cada linha do arquivo representaria uma instrução de pagamento.

Esse modelo ainda é amplamente utilizado, especialmente em processos de grande volume.


Por que o batch funcionava tão bem?

O batch possui vantagens importantes.

Ele permite processar milhões de registros de forma previsível.

Ele é eficiente para operações que não precisam acontecer imediatamente.

Também oferece boa capacidade de reinício, auditoria e controle.

Imagine o fechamento diário de um banco.

Não é necessário atualizar todos os relatórios financeiros a cada milissegundo. Muitas tarefas podem ser agrupadas e processadas em uma janela noturna.

O batch é perfeito para isso.


O problema da latência

A principal limitação da integração por arquivos é o tempo.

Considere esta sequência:

22:00 - Sistema A gera arquivo
23:00 - Arquivo é transferido
00:00 - Sistema B inicia processamento
01:30 - Sistema C recebe o resultado

A informação pode levar horas para percorrer toda a cadeia.

Se o arquivo estiver incorreto, atrasado ou incompleto, dezenas de jobs posteriores podem falhar.

No mainframe, isso cria uma verdadeira constelação de dependências no JES2.

Um job espera o outro.

O segundo espera o terceiro.

O terceiro depende de um GDG.

O quarto aguarda o arquivo chegar.

Quando algo falha, o operador vê a fila crescer como uma frota inimiga aproximando-se da estação espacial.


Curiosidade do mainframe

Muitas empresas modernas ainda dependem fortemente de integração por arquivos.

O formato pode ter mudado de fita para SFTP, de arquivo fixo para CSV ou de dataset para objeto em nuvem, mas a ideia continua igual:

um sistema produz um pacote de dados e outro sistema o consome posteriormente.

Não devemos tratar batch como tecnologia ultrapassada.

Ele é apenas um modelo diferente de integração.

O erro acontece quando tentamos utilizar batch em situações que exigem resposta imediata.


4. Segunda era: integração ponto a ponto

Com a expansão dos computadores distribuídos nas décadas de 1980 e 1990, as empresas começaram a adotar diferentes plataformas.

Agora havia:

  • mainframes;

  • servidores Unix;

  • AS/400;

  • computadores Windows;

  • bancos Oracle;

  • aplicações SAP;

  • sistemas departamentais;

  • clientes e servidores.

Cada sistema precisava se conectar diretamente a outros sistemas.

Nascia a integração ponto a ponto.

Sistema A ------ Sistema B
    |                |
    |                |
Sistema C ------ Sistema D

No início, parecia uma solução simples.

Se o sistema de vendas precisava enviar informações ao estoque, criava-se uma interface.

Se o estoque precisava falar com o financeiro, criava-se outra.

Se o financeiro precisava comunicar-se com o mainframe, surgia mais uma conexão.

O problema aparecia com o crescimento.


O espaguete de interfaces

Considere quatro sistemas:

  • A;

  • B;

  • C;

  • D.

Se todos precisarem se conectar entre si, teremos diversas interfaces.

Com dez sistemas, o número potencial de conexões cresce dramaticamente.

A quantidade máxima de conexões diretas entre n sistemas pode ser calculada por:

n × (n - 1)
------------
     2

Para 10 sistemas:

10 × 9 / 2 = 45 conexões

Para 20 sistemas:

20 × 19 / 2 = 190 conexões

Para 100 sistemas:

100 × 99 / 2 = 4.950 conexões

Agora imagine manter 4.950 interfaces.

Cada uma possui:

  • formato próprio;

  • protocolo próprio;

  • lógica própria;

  • segurança própria;

  • tratamento de erros próprio;

  • documentação própria — quando existe documentação.

Esse cenário ficou conhecido como spaghetti integration.

Era uma arquitetura que parecia um prato de macarrão: fios cruzando em todas as direções.


O impacto no programador COBOL

O programador COBOL poderia receber pedidos como:

  • gerar um arquivo para o sistema Unix;

  • criar uma chamada CICS para uma aplicação externa;

  • acessar uma fila MQ;

  • receber dados via socket;

  • adaptar um copybook para um novo consumidor;

  • criar uma rotina específica para cada parceiro.

Com o tempo, o mesmo programa acumulava diversas condições:

EVALUATE CODIGO-CANAL
   WHEN 'WEB'
      PERFORM TRATA-WEB
   WHEN 'ATM'
      PERFORM TRATA-ATM
   WHEN 'MOBILE'
      PERFORM TRATA-MOBILE
   WHEN 'PARCEIRO-A'
      PERFORM TRATA-PARCEIRO-A
   WHEN 'PARCEIRO-B'
      PERFORM TRATA-PARCEIRO-B
END-EVALUATE

A aplicação de negócio começava a conhecer detalhes de todos os consumidores.

Isso criava forte acoplamento.

Uma mudança em um canal poderia exigir alteração no sistema central.


5. Terceira era: o surgimento do middleware

Para resolver o caos ponto a ponto, surgiu o middleware.

Middleware pode ser entendido como uma camada intermediária entre sistemas.

Em vez de cada aplicação conhecer todas as demais, elas passam a utilizar uma infraestrutura comum.

Aplicação A
     |
     v
Middleware
     |
     v
Aplicação B

O middleware pode executar várias funções:

  • transporte de mensagens;

  • transformação de formatos;

  • roteamento;

  • segurança;

  • controle transacional;

  • registro de eventos;

  • monitoramento;

  • tratamento de falhas.

Uma analogia simples é o sistema postal.

O remetente não precisa conhecer todo o caminho da entrega.

Ele coloca o endereço no envelope e entrega a correspondência ao serviço postal.

O middleware cuida do transporte.


6. Mensageria e IBM MQ

Uma das formas mais importantes de middleware é a mensageria.

No modelo de mensageria, a aplicação de origem não precisa conversar diretamente com o destino.

Ela coloca uma mensagem em uma fila.

Programa COBOL
      |
      v
   Fila MQ
      |
      v
Aplicação consumidora

A fila funciona como um intermediário confiável.

O produtor envia a mensagem.

O consumidor lê quando estiver disponível.

Essa separação gera desacoplamento.


Exemplo prático

Uma transação CICS recebe uma solicitação de pagamento.

Em vez de chamar diretamente o sistema antifraude, ela publica uma mensagem:

PAGAMENTO
CONTA=123456
VALOR=850.00
CANAL=MOBILE

O sistema antifraude consome a mensagem e realiza sua análise.

Se o antifraude estiver temporariamente indisponível, a mensagem pode permanecer na fila.

Isso é muito mais resiliente do que uma conexão direta que falha imediatamente.


Uma lição importante

IBM MQ não é apenas um “correio eletrônico para programas”.

Ele oferece recursos corporativos como:

  • entrega garantida;

  • persistência;

  • unidades de trabalho;

  • controle de filas;

  • segurança;

  • recuperação;

  • integração entre diferentes plataformas.

Para um programador COBOL, compreender MQ abre uma enorme porta para a integração moderna.

O programa pode:

  1. conectar-se a um queue manager;

  2. abrir uma fila;

  3. colocar ou obter uma mensagem;

  4. confirmar ou desfazer a transação;

  5. fechar os recursos.

Em termos conceituais:

MQCONN
MQOPEN
MQPUT ou MQGET
MQCMIT
MQCLOSE
MQDISC

Cada chamada deve ter seu código de retorno verificado.

Ignorar COMPCODE e REASON em MQ é equivalente a pilotar uma nave sem consultar os sensores.

Pode funcionar durante algum tempo, mas o asteroide chegará.


7. O Enterprise Service Bus

Com o amadurecimento do middleware surgiu o conceito de Enterprise Service Bus, ou ESB.

O ESB atua como um barramento central de integração.

           CRM
            |
SAP -----> ESB <----- Mainframe
            |
         Aplicativo
            |
          Parceiro

Todos os sistemas integram-se por meio do barramento.

O ESB pode receber uma mensagem, transformá-la e encaminhá-la ao destino correto.


O que o ESB faz?

Suponha que um sistema envie XML:

<cliente>
    <codigo>123</codigo>
    <nome>Leonard McCoy</nome>
</cliente>

Mas o destino espera JSON:

{
  "customerId": 123,
  "customerName": "Leonard McCoy"
}

O ESB pode realizar essa transformação.

Ele também pode decidir a rota:

Se país = BRASIL
    enviar ao sistema nacional
Se país = ARGENTINA
    enviar ao sistema regional
Caso contrário
    enviar ao processamento internacional

Além disso, pode enriquecer a mensagem.

Por exemplo:

  1. recebe o número do cliente;

  2. consulta o Db2;

  3. obtém a categoria;

  4. acrescenta a categoria à mensagem;

  5. encaminha o conteúdo ao destino.


8. A evolução dos produtos IBM de integração

A história dos produtos IBM de integração possui várias mudanças de nome e evolução tecnológica.

Entre os nomes que marcaram essa trajetória estão:

  • MQSeries Integrator;

  • WebSphere Message Broker;

  • IBM Integration Bus;

  • IBM App Connect Enterprise.

Esses nomes não representam simplesmente mudanças cosméticas.

Eles refletem a ampliação das capacidades da plataforma.

O produto deixou de ser apenas uma ferramenta de integração baseada em mensagens e evoluiu para uma plataforma capaz de trabalhar com:

  • IBM MQ;

  • arquivos;

  • bancos de dados;

  • XML;

  • JSON;

  • SOAP;

  • REST;

  • aplicações empresariais;

  • eventos;

  • ambientes em nuvem;

  • containers.

O IBM App Connect Enterprise, conhecido como ACE, é herdeiro direto dessa longa evolução.


9. Como funciona um fluxo de integração no ACE?

Um fluxo de integração pode ser visualizado como uma sequência de etapas.

Entrada
  |
Validação
  |
Transformação
  |
Roteamento
  |
Acesso a sistemas
  |
Saída

Imagine uma API que recebe um pedido.

O fluxo pode realizar:

  1. receber o JSON;

  2. validar os campos obrigatórios;

  3. converter o formato;

  4. consultar o cadastro do cliente;

  5. enviar uma mensagem para MQ;

  6. registrar a transação;

  7. responder ao solicitante.

Exemplo de entrada:

{
  "customerId": 1001,
  "productId": 502,
  "quantity": 3
}

O ACE pode transformar isso em uma estrutura utilizada por um programa COBOL:

000000100100000050200003

Naturalmente, uma aplicação real usaria um layout formal, provavelmente definido por copybook.

O ponto importante é que o sistema COBOL não precisa entender JSON.

O ACE pode realizar a tradução entre o mundo web e o formato tradicional do mainframe.

Esse é um dos maiores valores da integração: preservar o sistema central sem obrigá-lo a conhecer todas as tecnologias externas.


10. Quarta era: SOA e serviços

Na década de 2000, ganhou força a Arquitetura Orientada a Serviços, conhecida como SOA.

A ideia principal era organizar capacidades de negócio como serviços reutilizáveis.

Em vez de cada sistema acessar diretamente tabelas ou arquivos de outro sistema, ele chamaria um serviço.

Exemplos:

ConsultarCliente
CalcularLimite
RegistrarPagamento
EmitirApólice
CriarPedido

Um serviço não deveria representar apenas uma função técnica.

Ele deveria representar uma capacidade significativa do negócio.


Por que isso foi importante?

Imagine três aplicações que precisam consultar dados de clientes.

Sem um serviço, cada uma pode desenvolver sua própria lógica de acesso.

Uma consulta diretamente o Db2.

Outra lê um arquivo.

A terceira replica uma tabela.

Com o serviço ConsultarCliente, todas utilizam a mesma capacidade.

Isso reduz duplicação e aumenta a consistência.


11. SOAP, XML e WSDL

SOA foi fortemente associada a Web Services SOAP.

SOAP utiliza mensagens estruturadas, geralmente em XML.

Uma solicitação simplificada poderia ser:

<soapenv:Envelope>
   <soapenv:Body>
      <ConsultarCliente>
         <Codigo>123</Codigo>
      </ConsultarCliente>
   </soapenv:Body>
</soapenv:Envelope>

O serviço era descrito por um WSDL.

O WSDL funcionava como um contrato formal, informando:

  • operações disponíveis;

  • estruturas de entrada;

  • estruturas de saída;

  • tipos de dados;

  • endereços;

  • protocolos.

Para grandes empresas, isso era valioso porque contratos rígidos ajudam a controlar integrações complexas.


SOAP era ruim?

Não.

SOAP tornou-se alvo de críticas por sua verbosidade e complexidade, mas resolveu problemas importantes.

Ele oferece padrões robustos para:

  • contratos;

  • segurança;

  • confiabilidade;

  • transações;

  • interoperabilidade.

Muitos serviços corporativos ainda utilizam SOAP porque foram construídos para processos críticos e continuam atendendo bem às necessidades do negócio.

O erro é confundir “mais antigo” com “inútil”.

No mainframe aprendemos cedo que idade e irrelevância não são sinônimos.


12. Quinta era: APIs REST

Com o crescimento da Web, dos aplicativos móveis e das arquiteturas distribuídas, as APIs REST tornaram-se populares.

REST geralmente utiliza:

  • HTTP;

  • URLs;

  • métodos como GET, POST, PUT e DELETE;

  • JSON.

Exemplo:

GET /clientes/123

Resposta:

{
  "id": 123,
  "nome": "Hikaru Sulu",
  "categoria": "GOLD"
}

Comparado ao SOAP, REST costuma ser mais simples para aplicações web e móveis.


Métodos HTTP

Os métodos mais conhecidos são:

GET     Consultar
POST    Criar ou executar uma ação
PUT     Atualizar ou substituir
PATCH   Atualizar parcialmente
DELETE  Excluir

Porém, esses significados dependem do desenho da API.

Uma boa API não é apenas um conjunto de URLs.

Ela precisa possuir:

  • contrato claro;

  • autenticação;

  • autorização;

  • validação;

  • versionamento;

  • limites de consumo;

  • observabilidade;

  • tratamento de erros.


13. O programador COBOL e as APIs

Um programa COBOL não precisa ser substituído apenas porque a empresa deseja oferecer uma API.

A integração pode funcionar assim:

Aplicativo móvel
       |
       v
API Gateway
       |
       v
ACE ou z/OS Connect
       |
       v
CICS / IMS / Db2 / COBOL

A API recebe JSON.

A camada de integração converte a solicitação.

O programa COBOL executa a regra de negócio.

A resposta é transformada novamente em JSON.

Essa arquitetura permite preservar décadas de regras validadas enquanto se oferece uma interface moderna.


Dica importante

Não coloque regras de negócio importantes em todos os lugares.

Se a regra de cálculo de limite pertence ao sistema central, evite replicá-la no aplicativo, no ESB, na API e em um microsserviço.

A duplicação de regras produz divergência.

Depois de alguns meses, cada sistema calcula um resultado diferente.

A integração deve orquestrar e transformar, mas não deve tornar-se um depósito descontrolado de lógica.


14. API-led connectivity

Com o crescimento das APIs, surgiu o conceito de integração orientada por APIs.

Uma organização pode estruturar suas APIs em camadas.

APIs de sistema

Expõem sistemas internos.

Exemplo:

API do Db2
API do CICS
API do SAP

APIs de processo

Combinam várias fontes para executar uma função de negócio.

Exemplo:

API de análise de crédito

Essa API pode consultar cadastro, histórico, renda e risco.

APIs de experiência

São adaptadas a um canal.

Exemplo:

API para aplicativo móvel
API para portal
API para parceiros

Essa separação evita que cada canal acesse diretamente os sistemas centrais.


15. Sexta era: nuvem e integração híbrida

A maioria das grandes empresas não migrou tudo para uma única nuvem.

O cenário real costuma ser híbrido.

Há sistemas:

  • no mainframe;

  • em datacenters;

  • em nuvens públicas;

  • em SaaS;

  • em ambientes de parceiros;

  • em containers.

A integração híbrida conecta esses mundos.

IBM Z
  |
ACE
  |
OpenShift
  |
Cloud
  |
SaaS

O desafio não é apenas transportar dados.

Também é necessário lidar com:

  • redes;

  • identidade;

  • criptografia;

  • latência;

  • governança;

  • custos;

  • residência de dados;

  • disponibilidade.


16. Containers e OpenShift

As plataformas de integração passaram a ser executadas em containers.

Um container empacota a aplicação e suas dependências.

Kubernetes e OpenShift administram esses containers.

Isso permite:

  • implantação automatizada;

  • escalabilidade;

  • recuperação;

  • isolamento;

  • atualização controlada;

  • integração com pipelines de CI/CD.

O ACE pode participar desse modelo moderno.

Em vez de uma única instalação central contendo todos os fluxos da empresa, diferentes integrações podem ser empacotadas e implantadas conforme sua necessidade.

Porém, não confunda distribuição com ausência de controle.

Mil integrações em containers sem governança podem criar um novo espaguete — agora servido em pequenas tigelas de Kubernetes.

Esse é um dos easter eggs arquitetônicos da história: toda solução criada para eliminar complexidade pode produzir uma complexidade nova quando utilizada sem disciplina.


17. Sétima era: arquitetura orientada a eventos

Em sistemas tradicionais, uma aplicação pergunta repetidamente:

Existe pedido novo?
Existe pedido novo?
Existe pedido novo?

Isso é chamado de polling.

Na arquitetura orientada a eventos, o sistema publica um aviso quando algo acontece.

PedidoCriado
PagamentoAprovado
ClienteAtualizado
EstoqueReduzido

Os consumidores escutam os eventos relevantes.

                +--> Estoque
PedidoCriado ---+--> Financeiro
                +--> Logística
                +--> Analytics

O produtor não precisa conhecer todos os consumidores.

Esse desacoplamento é poderoso.


18. Eventos, mensagens e comandos

Esses conceitos parecem semelhantes, mas não são idênticos.

Comando

Solicita que algo seja feito.

EfetuePagamento

Evento

Informa que algo aconteceu.

PagamentoEfetuado

Mensagem

É o envelope transportado pelo sistema de mensageria. Pode conter um comando, um evento ou outro tipo de informação.

Essa distinção ajuda no desenho de integrações.

Um evento geralmente é descrito no passado porque representa um fato ocorrido.


19. Kafka e IBM Event Streams

Kafka popularizou plataformas distribuídas de eventos.

Os eventos são organizados em tópicos.

Exemplo:

TOPIC: pagamentos-aprovados

Vários consumidores podem ler o mesmo fluxo.

Um consumidor atualiza o sistema contábil.

Outro alimenta uma plataforma analítica.

Outro detecta fraude.

Outro dispara uma notificação.

No ecossistema IBM, o Event Streams oferece capacidades baseadas em Kafka.

O ACE pode produzir e consumir eventos, atuando como uma ponte entre aplicações tradicionais e arquiteturas orientadas a eventos.


20. MQ versus Kafka

Essa comparação aparece frequentemente.

Mas não é correto pensar apenas em “qual é melhor?”.

A pergunta adequada é:

qual modelo atende melhor ao problema?

IBM MQ é excelente para mensageria corporativa confiável, filas de trabalho e processamento transacional.

Kafka é muito forte em fluxos de eventos, retenção de registros e consumo por múltiplas aplicações.

Em várias arquiteturas, ambos convivem.

Exemplo:

CICS
 |
MQ
 |
ACE
 |
Kafka
 |
Analytics e aplicações digitais

O MQ garante a integração transacional com o sistema central.

O Kafka distribui o evento para vários consumidores.

Não é uma guerra entre tecnologias.

É uma composição de capacidades.

Como diria o Sr. Spock:

“Insistir que uma única ferramenta resolve todos os problemas é uma conclusão pouco lógica.”


21. A era da integração componível

Integração componível significa construir soluções a partir de blocos reutilizáveis.

Em vez de criar uma integração monolítica gigantesca, a empresa combina:

  • APIs;

  • eventos;

  • conectores;

  • serviços;

  • fluxos;

  • funções;

  • regras;

  • componentes de segurança.

É semelhante à montagem de uma nave modular.

Cada componente possui uma responsabilidade clara.

Um conector acessa o Salesforce.

Outro interage com o SAP.

Um fluxo transforma dados.

Uma API expõe o serviço.

Um evento comunica uma mudança.

A composição desses elementos forma um processo maior.


22. Inteligência artificial na integração

A inteligência artificial começa a assumir funções de apoio ao ciclo de integração.

Ela pode ajudar a:

  • sugerir mapeamentos;

  • gerar documentação;

  • analisar logs;

  • detectar anomalias;

  • explicar erros;

  • identificar gargalos;

  • recomendar rotas;

  • criar testes;

  • auxiliar no desenvolvimento de fluxos.

Imagine dois formatos de dados.

Origem:

{
  "cust_id": 123,
  "full_name": "Nyota Uhura"
}

Destino:

{
  "customerNumber": 123,
  "customerName": "Nyota Uhura"
}

Uma ferramenta com IA pode sugerir que:

cust_id   -> customerNumber
full_name -> customerName

Isso acelera o trabalho.

Mas a IA não conhece automaticamente todas as regras do negócio.

Ela pode não perceber que:

  • o código precisa ter zeros à esquerda;

  • nomes devem ser convertidos para EBCDIC;

  • determinados clientes exigem tratamento especial;

  • o valor monetário utiliza casas decimais implícitas;

  • campos precisam obedecer a regras regulatórias.

Por isso, a validação humana continua essencial.


23. O risco da integração “mágica”

Ferramentas low-code e no-code facilitam a criação de integrações.

Isso é positivo.

Mas existe um risco: criar fluxos sem arquitetura, governança ou documentação.

Uma integração criada rapidamente pode tornar-se crítica.

Depois de dois anos, ninguém sabe:

  • quem a criou;

  • qual sistema depende dela;

  • como reiniciá-la;

  • quais credenciais utiliza;

  • onde está documentada;

  • o que acontece quando falha.

A facilidade de construção não elimina a necessidade de engenharia.

Pelo contrário: quanto mais fácil criar, maior deve ser a disciplina de governança.


24. Passo a passo para analisar uma integração

Quando receber uma demanda de integração, não comece imediatamente escolhendo tecnologia.

Siga uma sequência lógica.

Passo 1: compreenda o processo de negócio

Pergunte:

  • qual evento inicia o processo?

  • quem envia os dados?

  • quem consome?

  • qual resultado o negócio espera?

  • qual é o impacto de uma falha?

A integração não existe por causa do JSON.

Ela existe por causa do negócio.

Passo 2: identifique a origem e o destino

Exemplo:

Origem: transação CICS
Destino: aplicação em nuvem

Descubra:

  • plataformas;

  • protocolos;

  • formatos;

  • volumes;

  • restrições.

Passo 3: determine a necessidade de tempo

A integração deve ser:

  • em tempo real?

  • quase em tempo real?

  • assíncrona?

  • batch?

  • orientada a eventos?

Não transforme tudo em API síncrona.

Um processamento com milhões de registros pode ser melhor em batch.

Passo 4: defina o contrato

Documente:

  • campos;

  • tipos;

  • obrigatoriedade;

  • tamanhos;

  • valores válidos;

  • regras;

  • versões.

Para COBOL, o copybook frequentemente representa parte do contrato.

Para APIs, pode existir OpenAPI.

Para eventos, pode haver JSON Schema ou Avro.

Passo 5: escolha o padrão

Algumas possibilidades:

Arquivo
Fila
API
Evento
Serviço SOAP
Acesso a banco

A escolha deve considerar a necessidade, não o modismo.

Passo 6: planeje falhas

Pergunte:

  • o que acontece se o destino estiver indisponível?

  • haverá retry?

  • haverá fila de erros?

  • a mensagem pode ser duplicada?

  • existe mecanismo de reconciliação?

  • como reiniciar o processo?

Passo 7: implemente observabilidade

Registre:

  • identificador da transação;

  • horário;

  • origem;

  • destino;

  • resultado;

  • código de erro;

  • tempo de processamento.

Passo 8: proteja os dados

Considere:

  • autenticação;

  • autorização;

  • criptografia;

  • mascaramento;

  • auditoria;

  • LGPD;

  • gestão de segredos.

Passo 9: teste cenários ruins

Não teste apenas o caminho feliz.

Teste:

  • campo ausente;

  • mensagem inválida;

  • destino indisponível;

  • timeout;

  • duplicidade;

  • volume alto;

  • resposta inesperada;

  • falha de rede.

Passo 10: documente a operação

A equipe de produção precisa saber:

  • como monitorar;

  • como reiniciar;

  • como identificar mensagens presas;

  • como tratar erros;

  • quem deve ser acionado.


25. Idempotência: a palavra estranha que evita duplicidade

Idempotência significa que repetir uma operação não produz efeitos indesejados adicionais.

Imagine uma solicitação de débito.

A aplicação envia a requisição, mas não recebe resposta por causa de um timeout.

Ela tenta novamente.

Sem proteção, o cliente pode ser debitado duas vezes.

Uma solução é utilizar um identificador único:

ID-TRANSACAO = ABC123456

Antes de efetuar o débito, o sistema verifica se aquele identificador já foi processado.

Esse conceito é fundamental em integrações distribuídas.

No batch, muitas equipes já aplicavam ideias semelhantes usando arquivos de controle, chaves de processamento e mecanismos de restart.

Mais uma vez, o mundo moderno reencontra princípios que os veteranos do mainframe conhecem há décadas.


26. Correlação de mensagens

Uma transação pode atravessar vários sistemas.

Aplicativo
  |
API Gateway
  |
ACE
  |
MQ
  |
CICS
  |
Db2

Como rastrear toda a jornada?

Utilizando um identificador de correlação.

Exemplo:

CORRELATION-ID: 7F9A-2026-000123

Esse valor deve acompanhar a solicitação em todos os componentes.

Assim, ao investigar um problema, a equipe procura o mesmo identificador nos logs.

Sem correlação, cada sistema possui uma parte da história, mas ninguém consegue montar o episódio completo.

É como investigar o desaparecimento de uma nave sem possuir o registro de sua rota.


27. Transformação de dados: o detalhe perigoso

Transformar XML em JSON parece simples.

Mas a verdadeira dificuldade está na semântica.

Considere:

DATA = 01022026

Isso significa:

  • 1º de fevereiro de 2026?

  • 2 de janeiro de 2026?

  • um código sem significado de data?

Agora pense em valores monetários.

COBOL:

05 WS-VALOR PIC S9(9)V99 COMP-3.

Em JSON:

{
  "valor": 1500.75
}

A camada de integração precisa compreender:

  • sinal;

  • escala decimal;

  • formato packed decimal;

  • codificação;

  • tamanho;

  • arredondamento.

Um mapeamento incorreto pode não gerar erro técnico.

Ele pode gerar um valor de negócio errado.

Esse é o tipo mais perigoso de falha: o sistema funciona, mas produz informação incorreta.


28. EBCDIC, ASCII e a ponte entre mundos

O mainframe utiliza frequentemente EBCDIC.

Sistemas distribuídos geralmente utilizam ASCII ou Unicode.

Ao trocar dados, pode ser necessário converter codificações.

Caracteres acentuados, símbolos e campos binários merecem atenção especial.

Um arquivo que parece perfeitamente legível em um ambiente pode tornar-se uma coleção de caracteres estranhos em outro.

Dica do café:

Nunca assuma que um campo PIC X contém apenas texto simples.

Ele pode conter:

  • caracteres;

  • números formatados;

  • flags;

  • bytes especiais;

  • dados binários tratados como área alfanumérica.

Analise o copybook e o processo que grava o campo.


29. O papel do IBM App Connect Enterprise

O ACE ocupa uma posição estratégica porque consegue ligar diferentes gerações de tecnologia.

Ele pode atuar entre:

  • aplicações COBOL;

  • CICS;

  • IMS;

  • Db2;

  • IBM MQ;

  • arquivos;

  • APIs;

  • sistemas SAP;

  • bancos distribuídos;

  • serviços em nuvem;

  • eventos Kafka;

  • aplicações SaaS.

O ACE não “substitui o mainframe”.

Ele permite que o mainframe converse com o restante do ecossistema.

Também não deve concentrar toda a inteligência da empresa.

Seu papel principal é conectar, transformar, rotear e orquestrar.


30. Um exemplo completo

Imagine um cliente solicitando um empréstimo pelo aplicativo.

Etapa 1: aplicativo

O aplicativo envia:

{
  "customerId": 10001,
  "amount": 20000,
  "installments": 24
}

Etapa 2: API Gateway

O gateway:

  • autentica o cliente;

  • valida o token;

  • controla o limite de chamadas;

  • encaminha a requisição.

Etapa 3: ACE

O ACE:

  • valida o JSON;

  • transforma os dados;

  • gera um identificador de correlação;

  • consulta dados complementares;

  • envia a solicitação ao mainframe.

Etapa 4: CICS e COBOL

O programa COBOL:

  • consulta o cliente;

  • verifica renda;

  • analisa restrições;

  • calcula juros;

  • define a aprovação.

Etapa 5: resposta

O resultado retorna:

{
  "status": "APPROVED",
  "approvedAmount": 20000,
  "interestRate": 1.45,
  "installmentValue": 987.31
}

Etapa 6: evento

Após a aprovação, um evento é publicado:

LoanApproved

Consumidores podem:

  • enviar notificação;

  • atualizar CRM;

  • gerar contrato;

  • alimentar analytics;

  • iniciar o processo contábil.

Observe como várias eras convivem:

  • COBOL;

  • CICS;

  • API REST;

  • ACE;

  • mensageria;

  • eventos;

  • aplicações móveis;

  • cloud.

Integração moderna não elimina o passado.

Ela organiza a convivência entre gerações.


31. Problemas comuns e soluções

Problema: tudo depende do ESB

Quando todas as regras e integrações são concentradas em um único barramento, ele pode tornar-se um gargalo.

Solução

Distribuir responsabilidades, modularizar fluxos e utilizar padrões adequados.


Problema: contrato muda sem aviso

Uma aplicação altera um campo e quebra consumidores.

Solução

Usar versionamento, testes de contrato e governança.


Problema: mensagens duplicadas

Uma aplicação repete o envio após um timeout.

Solução

Implementar idempotência e chaves únicas.


Problema: integração sem monitoramento

A mensagem desaparece e ninguém sabe onde.

Solução

Utilizar correlação, logs, métricas, tracing e alertas.


Problema: regra de negócio duplicada

Cada canal implementa sua própria versão.

Solução

Centralizar a regra no domínio correto e expô-la como serviço.


Problema: API para tudo

Processamentos massivos são transformados em milhares de chamadas síncronas.

Solução

Avaliar batch, mensageria ou eventos.


32. Curiosidades da longa jornada

Curiosidade 1: o arquivo nunca morreu

Mesmo em arquiteturas modernas, arquivos continuam sendo utilizados para grandes volumes, intercâmbio com parceiros e processamento analítico.

Curiosidade 2: o ESB não desapareceu

Muitos anunciaram a “morte do ESB”, mas suas funções continuam existindo, distribuídas entre plataformas de integração, gateways, brokers e serviços.

Curiosidade 3: APIs não eliminam mensageria

APIs e mensagens resolvem problemas diferentes.

Uma aplicação pode usar API para consulta e eventos para notificação.

Curiosidade 4: microserviços também precisam integrar

Dividir uma aplicação em dezenas de serviços não elimina a integração. Na verdade, pode aumentar sua necessidade.

Curiosidade 5: o mainframe sempre foi uma plataforma integrada

CICS, IMS, Db2, VSAM, MQ, JES2 e RACF formam há décadas um ecossistema de processamento, segurança e comunicação extremamente sofisticado.


33. Easter egg do Bellacosa Mainframe

Existe uma antiga lenda nos corredores do datacenter.

Dizem que, durante uma madrugada de processamento, um programador encontrou a seguinte mensagem gravada em um arquivo temporário:

INTEGRATION IS NOT ABOUT MOVING DATA.
IT IS ABOUT PRESERVING MEANING.

Ele procurou a origem da mensagem no programa COBOL, no JCL, na PROC, no SORT e no módulo de integração.

Nunca encontrou.

Alguns afirmam que era apenas um registro esquecido por um desenvolvedor.

Outros dizem que foi o fantasma de um arquiteto de sistemas tentando alertar as novas gerações.

A mensagem, porém, contém uma verdade.

Transportar bytes é fácil.

Garantir que o destino compreenda corretamente o significado desses bytes é o verdadeiro desafio.


34. O que o programador COBOL iniciante deve estudar?

Para entrar no mundo da integração, siga uma trilha progressiva.

Primeiro nível: fundamentos

Aprenda:

  • arquivos sequenciais;

  • copybooks;

  • JCL;

  • Db2;

  • CICS;

  • códigos de retorno;

  • tratamento de erros.

Segundo nível: comunicação

Estude:

  • IBM MQ;

  • filas;

  • mensagens;

  • sincronismo;

  • assincronismo;

  • commit;

  • rollback.

Terceiro nível: dados modernos

Conheça:

  • XML;

  • JSON;

  • UTF-8;

  • REST;

  • HTTP;

  • métodos e códigos de resposta.

Quarto nível: plataformas

Explore:

  • IBM App Connect Enterprise;

  • z/OS Connect;

  • API gateways;

  • Kafka;

  • IBM Event Streams.

Quinto nível: arquitetura

Compreenda:

  • SOA;

  • ESB;

  • APIs;

  • event-driven;

  • idempotência;

  • observabilidade;

  • segurança;

  • governança.

Não tente aprender tudo de uma vez.

Comece entendendo o fluxo completo de uma única transação.

Siga o dado desde a origem até o destino.

Depois repita o exercício com outro padrão.


Conclusão: a tecnologia muda, a missão permanece

A integração corporativa começou muito antes das APIs e da nuvem.

Ela começou quando um sistema precisou entregar dados a outro.

Primeiro utilizamos arquivos.

Depois criamos conexões diretas.

Quando as conexões viraram um espaguete, introduzimos middleware.

O middleware evoluiu para barramentos de serviço.

SOA organizou capacidades como serviços.

SOAP trouxe contratos formais.

REST simplificou o consumo por aplicações digitais.

A nuvem tornou o ambiente híbrido.

Kafka e plataformas de eventos popularizaram arquiteturas orientadas a acontecimentos.

Containers trouxeram novas formas de implantação.

A inteligência artificial agora começa a auxiliar na criação, operação e análise das integrações.

Porém, nenhum desses avanços alterou a missão fundamental:

Conectar sistemas
Transformar dados
Preservar significado
Controlar processos
Entregar valor

Para o programador COBOL Padawan, a maior lição é perceber que o mainframe não pertence a um universo separado.

Ele é uma peça central da arquitetura corporativa.

O arquivo gerado por um job pode chegar a uma plataforma analítica.

A mensagem publicada por uma transação CICS pode acionar um serviço em nuvem.

Uma regra COBOL pode ser exposta por uma API móvel.

Uma atualização no Db2 pode originar um evento consumido por dezenas de aplicações.

O código pode ter nascido em uma tela verde, mas seu impacto atravessa APIs, filas, eventos, containers, celulares e nuvens.

No fim, integração não é apenas fazer computadores conversarem.

É garantir que diferentes gerações de tecnologia cooperem sem perder a segurança, a consistência e o conhecimento acumulado pelo negócio.

E essa, jovem Padawan, é uma missão digna não apenas de um arquiteto de integração, mas de todo profissional que deseja compreender como uma empresa realmente funciona por trás das telas coloridas.

A próxima vez que alguém disser que “tudo agora é API”, tome um gole de café, olhe calmamente para o terminal e responda:

— Toda API possui uma história. E há uma boa chance de que, em algum ponto dessa história, exista um programa COBOL mantendo o universo em funcionamento.


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
GitHub LinkedIn
Inicializando conteúdo...