☕ 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

terça-feira, 12 de dezembro de 2023

Como o Anime Japonês se Adaptou ao Mercado Ocidental

 

Bellacosa Mainframe o anime recebe uma maquiagem para passar no ocidente mas o fãs pirateam a versão original

Como o Anime Japonês se Adaptou ao Mercado Ocidental

Quando o anime japonês começou a atravessar os oceanos nos anos 80 e 90, ele encontrou um público curioso e voraz, mas… muito diferente do público japonês. O que era normal no Japão, podia gerar controvérsia no Ocidente. E os produtores tiveram que se reinventar.

O Tamanho do Mercado Ocidental

Hoje, estima-se que o mercado global de anime mova bilhões de dólares. Nos EUA, por exemplo, o streaming e a venda de DVDs/merchandising transformaram séries como Dragon Ball Z, Pokémon e Sailor Moon em fenômenos de massa. Para conquistar esse público, algumas mudanças foram necessárias.


Principais Mudanças

  1. Censura de Conteúdos Sexuais e Violentos

    • Em séries como Ranma ½ ou Elfen Lied, cenas de nudez, sexualidade ou violência explícita foram cortadas ou editadas para exibição em canais infantis ou familiares.

    • Curiosidade: Em Dragon Ball Z, ataques mortais muitas vezes tiveram “efeitos de energia” adicionados para diminuir a percepção de sangue.

  2. Mudança de Contexto Cultural

    • Referências a álcool, tabaco ou hábitos tipicamente japoneses eram muitas vezes alteradas. Por exemplo, sake virava “suco” ou comidas japonesas viravam algo mais “ocidentalizado” em legendas e dublagens.

    • Comentário: Isso às vezes gerava confusão entre fãs mais atentos, mas facilitava a aceitação das crianças ocidentais.

  3. Dublagem e Adaptação de Nomes

    • Nomes de personagens foram ocidentalizados (Kenshin virou “Samurai X” em alguns mercados).

    • Piada interna: Quem nunca se confundiu tentando ligar Takeshi ao Brock em Pokémon?

  4. Episódios Cortados ou Reordenados

    • Algumas séries tiveram episódios cortados ou mesmo não transmitidos, caso contivessem violência extrema, temas psicológicos pesados ou fan service exagerado.

  5. Marketing e Merchandising

    • No Ocidente, o foco muitas vezes se deslocava para brinquedos e jogos. Sailor Moon ganhou cortes estratégicos para se tornar mais “aceitável” às crianças, aumentando o merchandising.

    • Dica: Estude os produtos derivados; eles revelam muito sobre as adaptações de conteúdo!

História e Curiosidade

  • Nos anos 80, a lei de proteção ao público infantil nos EUA exigia que desenhos exibidos em horário nobre fossem “seguros” para crianças. Isso criou um choque cultural, porque no Japão, muitos animes não eram feitos exclusivamente para crianças.

  • Curiosidade: O fenômeno Robotech nasceu de uma fusão de três séries japonesas, editadas e reescritas para criar um arco contínuo, atendendo ao padrão ocidental de narrativa.

Comentário Bellacosa

O que vemos hoje é um equilíbrio: plataformas de streaming permitem exibir a versão original sem cortes para fãs adultos, enquanto canais infantis seguem regras de censura. O mercado ocidental forçou mudanças, mas também ajudou o anime a crescer globalmente. E vamos combinar: sem essas adaptações estratégicas, muitos clássicos talvez nunca tivessem estourado lá fora.

domingo, 10 de dezembro de 2023

ReLIFE — Uma Segunda Chance Que Todo Otaku Gostaria de Ter

 

Bellacosa Mainframe inspirado em reLife

ReLIFE — Uma Segunda Chance Que Todo Otaku Gostaria de Ter

Alguma vez você olhou para sua vida adulta e pensou: “Se eu pudesse voltar no tempo e refazer tudo…” Pois bem, o anime ReLIFE pega exatamente esse sentimento e transforma em uma história emocionante, engraçada e surpreendentemente filosófica.

Lançado em 2016, produzido pelo estúdio TMS Entertainment, ReLIFE adapta o web mangá de Yayoiso e entrega um daqueles animes que começam levinhos e acabam dando lição de vida sem você perceber.


ReLIFE é uma das obras mais humanas e inspiradoras dos animes modernos. A história acompanha Arata Kaizaki, um jovem de 27 anos que enfrenta dificuldades profissionais e pessoais após uma série de fracassos. Sua vida muda quando ele recebe a oportunidade de participar de um experimento chamado ReLIFE, que lhe permite voltar temporariamente à aparência de um estudante do ensino médio.

O que inicialmente parece apenas uma chance de corrigir erros do passado logo se transforma em uma profunda jornada de autoconhecimento. Ao conviver novamente com adolescentes, Arata passa a enxergar seus próprios medos, inseguranças e arrependimentos sob uma nova perspectiva.

Diferentemente de muitos animes escolares, ReLIFE não trata apenas de romance. A obra aborda temas como ansiedade, pressão social, mercado de trabalho, amizades verdadeiras, maturidade emocional e a dificuldade que muitos adultos enfrentam ao encontrar seu lugar no mundo.

Um dos grandes méritos da série é mostrar que crescer não significa deixar de cometer erros, mas aprender com eles. Cada personagem carrega suas próprias dificuldades, tornando a narrativa extremamente identificável.

Mais do que uma história sobre voltar ao passado, ReLIFE fala sobre algo que todos desejamos em algum momento: a oportunidade de recomeçar. E sua mensagem central é poderosa: nunca é tarde para mudar, aprender e construir uma versão melhor de si mesmo. 🌸📚✨

Sinopse em Estilo Humano (sem enrolação)

Arata Kaizaki, 27 anos, desempregado, sem rumo e vivendo às custas dos pais. Zero autoestima, 100% pressão social. Até que aparece Ryō Yoake, um cara misterioso oferecendo uma pílula que pode rejuvenescer Arata para a aparência de um garoto de 17 anos.

A proposta? Participar do Projeto ReLIFE, voltar para o ensino médio por um ano e tentar reconstruir sua vida — emocionalmente e socialmente.

Parece divertido, né? Só que reviver a adolescência com a mente de um adulto é bem mais difícil do que ele imaginava…


Personagens em Destaque (porque todo anime vive de boas figuras)

PersonagemFunção no animeResumo Bellacosa-style
Arata KaizakiProtagonista quebrado emocionalmenteAdulto preso em corpo de adolescente — literalmente
Chizuru HishiroHeroína socialmente esquisitaRainha do “cara de quem não sabe como conversar”
Ryō YoakeSupervisor do projetoMetade psicólogo, metade troll profissional
An OnoyaObservadora extra (sem spoilers)Fofa, mas suspeita demais pra ser só fofa
Kazuomi Oga & Rena KariuCasal em potencial que enrola mais que shonen de lutaO ship que você vai querer bater com um taco de beisebol pra andar logo

Estilo e Temática — Não se engane, é Slice of Life com profundidade

  • Comédia leve, com várias situações dignas de vergonha alheia

  • Romance tímido, do jeitinho slice of life de ser

  • Drama emocional real, sobre fracasso, pressão social e recomeços

  • Zero poderes, zero Isekai — só a vida como ela é (com uma pílula mágica, mas tudo bem)


Curiosidades Que Todo Otaku Precisa Saber

  • 📱 O mangá foi publicado originalmente como webcomic, em rolagem vertical — formato muito comum em manhwas.

  • 🎧 A trilha sonora é surpreendentemente nostálgica, com opening "Button" da banda PENGUIN RESEARCH.

  • 🎬 A história foi tão popular que ganhou um especial com 4 episódios finais exclusivos chamados ReLIFE: Kanketsu-hen, lançados em 2018 — não esqueça de assistir, ou ficará órfão no meio da história!


Dicas Bellacosa para Aproveitar Melhor ReLIFE

  • Assista em momentos de crise existencial — funciona quase como terapia emocional.

  • Prepare lanchinhos, porque você vai maratonar sem perceber.

  • Evite comparar sua vida com a do protagonista… ou vai acabar chorando no banho.

Guia Otaku da Rebeldia Censurada

 


Guia Otaku da Rebeldia Censurada

Como 10 Animes Modernos Driblam o Controle Cultural e Continuam Livres


1. Attack on Titan (Shingeki no Kyojin)

Tema censurável: militarismo, genocídio, manipulação política.
Estratégia: metáfora e ambiguidade moral.
O autor Isayama criou uma história em que todos são vítimas e vilões ao mesmo tempo — impossível censurar sem parecer que está tomando partido.
💡 Dica: perceba como a série discute o ciclo de ódio e nacionalismo sem jamais citar nomes reais.


2. Chainsaw Man

Tema censurável: gore, erotismo, desesperança.
Estratégia: estilização extrema e niilismo emocional.
Fujimoto converte o horror em poesia visual. A violência é tão surreal que deixa de ser literal — vira linguagem artística.
Comentário: é uma crítica à própria indústria de conteúdo que explora o sofrimento como espetáculo.


3. Cyberpunk: Edgerunners

Tema censurável: drogas, desigualdade, corpos modificados.
Estratégia: estética neon e narrativa trágica.
A série mascara sua crítica social sob a beleza psicodélica de Night City. O exagero visual impede o moralismo de enquadrar a obra como “degenerada”.


4. Demon Slayer (Kimetsu no Yaiba)

Tema censurável: morte infantil, trauma e sofrimento.
Estratégia: coreografia simbólica e narrativa moral.
O sangue é belo, os golpes são danças e a tragédia é redenção. Transformar dor em arte é a essência da resistência japonesa.
💡 Curiosidade: é um dos animes mais sangrentos já exibidos em TV aberta, mas quase ninguém o chama de “violento”.


5. Jujutsu Kaisen

Tema censurável: maldição, niilismo e sacrifício.
Estratégia: humor e empatia emocional.
O anime fala de depressão e autodestruição, mas o faz com ritmo shonen e personagens carismáticos. A mensagem passa despercebida pelos censores — mas atinge quem precisa ouvir.


6. Made in Abyss

Tema censurável: sofrimento infantil, existencialismo.
Estratégia: contraste estético.
Visual fofo, história brutal. O choque entre inocência e horror impede enquadrar a obra como “infantil”.
Comentário Bellacosa: é um dos animes mais maduros disfarçados de aventura inocente.


7. Paranoia Agent (Mousou Dairinin)

Tema censurável: alienação social, mídia e suicídio.
Estratégia: surrealismo psicológico.
Satoshi Kon transformou crítica social em sonho lúcido. A censura não consegue cortar o que não entende.
💡 Dica: repare como o anime questiona a própria noção de “verdade midiática”.


8. Devilman Crybaby

Tema censurável: sexo, violência e religião.
Estratégia: simbolismo e estética expressionista.
O diretor Masaaki Yuasa adaptou o clássico Devilman com foco no caos emocional. O apocalipse bíblico virou metáfora da intolerância humana.
Curiosidade: foi banido em alguns países — o que só reforçou sua mensagem.


9. Death Parade

Tema censurável: suicídio e julgamento moral.
Estratégia: estética etérea e tom filosófico.
O bar onde as almas são julgadas vira espaço de reflexão, não de horror. A censura não corta o que parece “metafísico”.


10. Oshi no Ko

Tema censurável: fama, manipulação midiática, suicídio.
Estratégia: idol drama com crítica oculta.
Usando o brilho do mundo pop, o anime destrincha o lado sombrio da indústria de entretenimento — uma crítica afiada escondida sob purpurina e música alegre.


🎭 A Filosofia da Rebeldia Otaku

Todos esses animes compartilham um mesmo truque:

Transformam o “proibido” em beleza simbólica.

Eles não enfrentam a censura de frente — a contornam com inteligência estética.
E ao fazer isso, tornam-se ainda mais profundos.


☕ Conclusão Bellacosa

A arte japonesa aprendeu algo que o Ocidente ainda teme:

“Não é preciso gritar para ser subversivo. Basta sugerir.”

A censura vê apenas o que é literal.
Mas o anime fala na linguagem dos símbolos — e é por isso que ele sobreviveu a governos, guerras, códigos morais e até algoritmos.

Enquanto houver metáfora, haverá liberdade.
E enquanto houver otakus curiosos, haverá quem entenda o que está sendo dito nas entrelinhas.

sábado, 9 de dezembro de 2023

SQL sem Mistérios no Db2 for z/OS

 

Bellacosa Mainframe e o sql sem misterios no db2 for z/os

☕ Um Café no Bellacosa Mainframe

SQL sem Mistérios no Db2 for z/OS

A Jornada Completa de uma Query no IBM Z — O Guia Definitivo do Programador COBOL Padawan Inspirado em Jornada nas Estrelas

"A lógica é o começo da sabedoria, não o fim."

— Sr. Spock


Introdução — Bem-vindo à USS Enterprise... digo... ao IBM Z

Imagine que você acabou de embarcar na USS Enterprise.

Você é um jovem cadete da Academia da Frota Estelar.

Seu trabalho não é pilotar a nave.

Também não é disparar phasers.

Sua missão é muito mais importante.

Você precisa descobrir como um simples pedido chega ao computador da nave, é analisado, processado e retorna em poucos milissegundos.

No universo Star Trek, esse computador responde perguntas como:

"Computador, localizar todos os oficiais Vulcanos da nave."

No mundo corporativo existe outro computador igualmente impressionante.

Ele atende pelo nome de IBM Z.

E seu cérebro de dados chama-se Db2 for z/OS.

Quando um programa COBOL executa um simples:

SELECT *
FROM CLIENTE
WHERE CPF='12345678900'

A maioria dos iniciantes imagina algo parecido com isto:

"O Db2 abriu a tabela, procurou o CPF e devolveu o registro."

Se fosse tão simples, este artigo terminaria aqui.

Mas...

Na realidade, entre o momento em que o programa envia o SQL e o momento em que os dados retornam, acontece uma verdadeira operação digna da Frota Estelar.

São dezenas de decisões inteligentes.

Milhares de estatísticas.

Análises matemáticas.

Escolha de estratégias.

Gerenciamento de memória.

Uso de caches.

Escolha de índices.

Controle de concorrência.

Tudo isso acontece quase instantaneamente.

Hoje vamos fazer uma viagem completa por essa jornada.

Prepare seu café.

Dr. Spock será nosso guia.


Capítulo 1 — O Computador Nunca Faz Apenas o Que Você Escreveu

Existe um dos maiores mitos entre iniciantes.

"Eu escrevi primeiro o SELECT."

Então ele executa primeiro.

Errado.

Na verdade, o Db2 praticamente ignora a ordem em que você escreveu.

Ele interpreta a intenção da consulta.

Depois decide sozinho como obter o resultado da forma mais eficiente possível.

É exatamente como Spock faria.

Se Kirk diz:

"Chegue até Vulcano."

Spock não pergunta:

"Qual estrada devo pegar?"

Ele calcula:

  • combustível

  • gravidade

  • buracos negros

  • campos de dobra

  • rotas inimigas

  • economia de energia

O destino é o mesmo.

O caminho muda.

O Db2 pensa exatamente assim.


Capítulo 2 — A Ponte de Comando do Db2

Imagine a ponte da Enterprise.

Cada oficial possui uma função.

No Db2 também.

OficialComponente Db2
Capitão KirkAplicação COBOL
Sr. SpockOptimizer
ScottyBuffer Manager
UhuraSQL Parser
SuluAccess Path
ChekovIndex Manager
ComputadorBuffer Pools
EngenhariaDisk Storage

O COBOL faz a pergunta.

Spock decide a melhor estratégia.

Scotty garante que tudo funcione.

O computador responde.


Capítulo 3 — A Missão Começa: EXEC SQL

Tudo começa aqui.

EXEC SQL

SELECT NOME

INTO :WS-NOME

FROM CLIENTES

WHERE CPF=:WS-CPF

END-EXEC.

Parece simples.

Mas isso ainda nem é SQL.

O COBOL sequer entende SQL.

Quem entende é o Pré-compilador.


Capítulo 4 — O Tradutor Universal

Antes da compilação acontece algo exclusivo do mundo Mainframe.

O famoso:

Pré-Compiler.

Ele encontra cada bloco EXEC SQL.

Substitui por chamadas internas.

Gera o famoso:

DBRM

(Database Request Module)

Este DBRM será utilizado posteriormente no BIND.

Curiosidade:

Oracle não trabalha assim.

SQL Server também não.

Este é um dos diferenciais históricos do Db2 z/OS.


Capítulo 5 — O Conselho Vulcano: BIND

Aqui mora uma das maiores diferenças entre o Db2 e praticamente todos os bancos relacionais.

O comando:

BIND PACKAGE

é como uma reunião do Alto Conselho Vulcano.

O Db2 olha para a consulta e pensa:

"Se esta SQL for executada milhões de vezes, qual será o melhor caminho?"

Ele cria um PACKAGE, contendo o plano de acesso ideal para aquele momento.

É aqui que nasce o famoso Access Path.


Capítulo 6 — O Dr. Spock Analisa as Probabilidades

Imagine duas tabelas.

CLIENTES

50 milhões de linhas.

ESTADOS

27 linhas.

Você faria o JOIN começando por qual?

Até um cadete responderia:

ESTADOS.

Mas...

Como o Db2 sabe disso?

A resposta chama-se:

RUNSTATS.


Capítulo 7 — RUNSTATS: Os Sensores de Longo Alcance

Os sensores da Enterprise informam:

  • quantas naves existem;

  • velocidade;

  • distância;

  • massa.

O RUNSTATS faz exatamente isso.

Ele informa ao Optimizer:

  • quantidade de linhas;

  • cardinalidade;

  • distribuição;

  • frequência;

  • seletividade;

  • clustering;

  • número de páginas;

  • estatísticas dos índices.

Sem RUNSTATS...

O Optimizer fica praticamente cego.

E um Spock sem sensores toma decisões muito piores.


Capítulo 8 — Álgebra Relacional: O Idioma Secreto do Computador

Depois que o SQL é validado, ele deixa de existir como texto.

Internamente transforma-se em Álgebra Relacional.

Por exemplo:

SELECT NOME
FROM CLIENTES
WHERE CIDADE='SP'

vira algo semelhante a:

σ Cidade='SP'

↓

π Nome

↓

CLIENTES

Ou seja:

primeiro seleciona.

Depois projeta.

O SQL desaparece.

Nasce um plano matemático.


Capítulo 9 — O Optimizer: O Verdadeiro Sr. Spock do IBM Z

Se existe um personagem que representa perfeitamente o Optimizer...

é o próprio Spock.

Ele nunca trabalha por emoção.

Somente lógica.

Ele calcula:

  • custo de CPU;

  • custo de I/O;

  • uso de Buffer Pools;

  • seletividade dos índices;

  • paralelismo;

  • volume esperado;

  • quantidade de páginas;

  • custo de SORT;

  • bloqueios.

Depois escolhe o menor custo possível.

Nem sempre será o caminho mais curto.

Será o mais eficiente.


Capítulo 10 — A Ordem Lógica da Consulta

Agora chegamos ao famoso diagrama.

Embora escrevamos:

SELECT

FROM

JOIN

ON

WHERE

GROUP BY

HAVING

ORDER BY

FETCH FIRST

O Db2 raciocina assim:

FROM

↓

JOIN

↓

ON

↓

WHERE

↓

GROUP BY

↓

HAVING

↓

SELECT

↓

ORDER BY

↓

FETCH FIRST

Mas cuidado.

Isto ainda não representa a ordem física.

Ela continua sendo decidida pelo Optimizer.


Capítulo 11 — O Access Path: A Rota Estelar

Aqui está o segredo.

O Db2 pode resolver exatamente a mesma SQL de dezenas de maneiras diferentes.

Ele escolhe entre:

  • Table Space Scan;

  • Index Scan;

  • Index Only Access;

  • List Prefetch;

  • Dynamic Prefetch;

  • Sequential Detection;

  • Nested Loop Join;

  • Merge Scan Join;

  • Hybrid Join;

  • Star Join;

  • Parallelism;

  • Materialized Query Table;

  • Sparse Index.

É como escolher diferentes rotas pelo Quadrante Alfa.

O destino é igual.

O caminho muda.


Capítulo 12 — O Buffer Pool: O Scotty da Memória

Scotty sempre dizia:

"Captain, I'm giving her all she's got!"

O Buffer Pool faz exatamente isso.

Antes de acessar o disco...

Ele pergunta:

"Essa página já está na memória?"

Se estiver...

Não existe I/O.

A resposta vem em microssegundos.

Grande parte do desempenho do Db2 depende da eficiência dos Buffer Pools.


Capítulo 13 — Os Predicados Stage 1 e Stage 2

Aqui existe uma armadilha clássica.

Observe:

WHERE YEAR(DATA)=2026

Parece bonito.

Mas destrói o uso do índice.

Muito melhor:

WHERE DATA BETWEEN
'2026-01-01'
AND
'2026-12-31'

No primeiro caso:

Stage 2.

No segundo:

Stage 1.

O primeiro costuma obrigar o Db2 a avaliar linha por linha.

O segundo permite filtrar diretamente pelo índice.

Dica Bellacosa: sempre que possível, escreva predicados que possam ser avaliados durante o acesso aos dados. Essa é uma das otimizações mais valiosas para quem desenvolve em COBOL com Db2.


Capítulo 14 — EXPLAIN: A Caixa-Preta da Enterprise

Nenhum engenheiro sério tenta descobrir um problema apenas olhando para a nave.

Ele consulta os sensores.

No Db2 fazemos exatamente isso.

Utilizamos:

EXPLAIN

Ele revela:

  • qual índice foi escolhido;

  • ordem dos JOINs;

  • tipo de acesso;

  • custo estimado;

  • necessidade de SORT;

  • paralelismo;

  • número estimado de linhas.

Nunca adivinhe.

Sempre consulte o plano.


Capítulo 15 — Locks: O Controle de Segurança da Federação

Enquanto tudo acontece...

O Db2 protege os dados.

Existem diversos tipos de bloqueio:

  • IS (Intent Share)

  • IX (Intent Exclusive)

  • S (Share)

  • U (Update)

  • X (Exclusive)

  • SIX (Share with Intent Exclusive)

Além disso, os níveis de isolamento (UR, CS, RS e RR) determinam o equilíbrio entre concorrência e consistência. Em sistemas bancários e de cartões de crédito, essa gestão é essencial para evitar leituras incorretas, perdas de atualização e conflitos entre milhares de transações simultâneas.


Capítulo 16 — Paralelismo: Quando a Enterprise Usa Toda a Tripulação

Em grandes consultas analíticas, o Db2 pode dividir o trabalho.

Imagine:

CPU 1 lê uma partição.

CPU 2 lê outra.

CPU 3 realiza o JOIN.

CPU 4 faz a agregação.

No IBM Z isso acontece utilizando múltiplos processadores e, em muitos cenários, explorando zIIPs para determinadas cargas elegíveis, reduzindo o impacto sobre os CPs tradicionais.


Capítulo 17 — Quando Fazer REBIND?

Imagine que a Enterprise recebeu um novo motor de dobra.

Você continuaria usando os cálculos antigos?

Claro que não.

No Db2 acontece o mesmo.

Após mudanças significativas, como:

  • criação de índices;

  • remoção de índices;

  • crescimento expressivo das tabelas;

  • execução de RUNSTATS;

  • alterações na distribuição dos dados;

vale analisar um REBIND PACKAGE ou REBIND PLAN, permitindo que o Optimizer recalcule um novo Access Path mais eficiente.


Capítulo 18 — O Programador COBOL Jedi... ou Vulcano?

Existe um momento em que o programador deixa de escrever SQL "que funciona".

E começa a escrever SQL "que escala".

Ele passa a pensar:

  • Meu predicado usa índice?

  • Meu JOIN é seletivo?

  • O EXPLAIN confirma minha hipótese?

  • As estatísticas estão atualizadas?

  • O SORT pode ser eliminado?

  • Estou lendo mais linhas do que preciso?

  • O FETCH FIRST pode reduzir trabalho?

  • Existe uma forma mais eficiente de escrever esta consulta?

Esse é o verdadeiro salto de maturidade.


Easter Egg Bellacosa ☕

No episódio "The Ultimate Computer", a Enterprise recebe o computador M-5, projetado para tomar decisões automaticamente.

No começo, tudo parece perfeito.

Depois surgem consequências inesperadas.

O Db2 Optimizer lembra um pouco essa história.

Ele toma decisões sozinho, mas depende da qualidade das informações que recebe.

Se as estatísticas estiverem desatualizadas, um índice importante não existir ou o modelo físico estiver inadequado, até um excelente otimizador poderá escolher um plano ruim.

A diferença é que, felizmente, o Optimizer não tenta assumir o comando da Enterprise nem entra em combate por conta própria.


Curiosidades

  • O Db2 for z/OS está entre os bancos de dados com os otimizadores mais sofisticados do mercado, evoluindo continuamente desde a década de 1980.

  • Um único SELECT pode gerar dezenas de operações internas invisíveis ao desenvolvedor.

  • Em ambientes de missão crítica, o mesmo SQL pode ser executado milhões de vezes por dia, tornando pequenas otimizações responsáveis por economias enormes de CPU e tempo.

  • Muitos problemas de desempenho atribuídos ao COBOL, na verdade, são consequência de SQL mal escrito ou de um plano de acesso inadequado.


Conclusão — A Lógica é a Maior Aliada do Programador

Ao final desta jornada, descobrimos que uma instrução SQL percorre um caminho muito maior do que imaginávamos. Ela nasce no programa COBOL, passa pelo pré-compilador, gera um DBRM, é ligada a PACKAGEs e PLANs durante o BIND, tem seu plano analisado pelo Optimizer, consulta estatísticas produzidas pelo RUNSTATS, escolhe um Access Path, utiliza Buffer Pools, controla bloqueios, decide estratégias de JOIN e somente então retorna os dados solicitados.

Para um programador COBOL Padawan, compreender essa sequência é um divisor de águas. Você deixa de enxergar o Db2 como uma simples "caixa-preta" e passa a entendê-lo como um verdadeiro computador da Frota Estelar: um sistema que utiliza lógica, estatística e otimização para tomar a melhor decisão possível a cada consulta.

Como diria o Sr. Spock, "A lógica é o começo da sabedoria, não o fim." No universo do IBM Z, essa lógica está presente em cada SELECT, em cada índice e em cada plano de acesso. Quanto melhor você compreender esse funcionamento, mais preparado estará para construir aplicações COBOL rápidas, escaláveis e confiáveis — dignas de uma missão de cinco anos explorando as fronteiras da computação corporativa.

sexta-feira, 8 de dezembro de 2023

24 Horas no Bellacosa Mainframe: Jack Bauer, COBOL e a API que precisava entrar no CICS antes que o relógio chegasse a zero graças ao Zos Connect

 

Bellacosa Mainframe e o zos connect

☕ Um Café no Bellacosa Mainframe

24 Horas no Bellacosa Mainframe: Jack Bauer, COBOL e a API que precisava entrar no CICS antes que o relógio chegasse a zero

⏱️ z/OS Connect, REST, JSON, OpenAPI, CICS, IMS, Db2, RACF, SAF, zIIP, OpenTelemetry e o estranho caso em que Jack Bauer descobriu que reescrever 35 anos de COBOL levaria um pouco mais de 24 horas

03:17:42

O telefone toca.

Isso nunca é bom.

Especialmente quando você trabalha com mainframe.

Do outro lado da linha alguém pronuncia aquelas palavras capazes de provocar mais medo em um programador COBOL do que S0C7, SOC4, deadlock no Db2 e café descafeinado juntos:

— Precisamos modernizar o legado.

Silêncio.

O relógio aparece na tela.

03:17:43
03:17:44
03:17:45

Você olha para o terminal 3270.

O CICS está funcionando.

O Db2 está funcionando.

O programa COBOL que consulta clientes está funcionando há décadas.

Milhões de transações passaram por ele.

Então surge a pergunta que deveria ser feita antes de qualquer projeto de modernização:

Se funciona, por que exatamente queremos reescrevê-lo?

Do outro lado alguém responde:

— Porque precisamos acessar isso pelo aplicativo mobile.

Jack Bauer entra na sala.

Olha para o COBOL.

Olha para o arquiteto.

Olha para o relógio.

E diz:

— Então vocês não precisam reescrever o COBOL. Precisam de uma API.

TIC. TIC. TIC. TIC.

Bem-vindo ao mundo do IBM z/OS Connect.

Pegue o café.

Temos 24 horas para colocar REST, JSON e OpenAPI diante de um programa COBOL que nasceu quando ninguém imaginava que um telefone serviria para fazer transferências bancárias.


⏱️ 04:00 — O problema nunca foi necessariamente o COBOL

Imagine que nosso banco fictício possui um programa chamado:

CLIENTE

Ele recebe:

01 CLIENTE-REQUEST.
   05 CLIENTE-ID       PIC 9(09).

E devolve:

01 CLIENTE-RESPONSE.
   05 CLIENTE-NOME     PIC X(40).
   05 CLIENTE-LIMITE   PIC 9(09)V99.
   05 CLIENTE-STATUS   PIC X(01).

Nada particularmente revolucionário.

Talvez esse programa execute dentro do CICS e consulte Db2.

Durante décadas alguma aplicação tradicional soube perfeitamente como conversar com ele.

Então chega uma equipe responsável pelo novo aplicativo mobile.

Ela não sabe o que é:

COMMAREA
EBCDIC
PIC X
PIC 9
COMP
COMP-3
EXEC CICS LINK
TSO
ISPF
3270

E existe uma boa notícia:

ela provavelmente não precisa saber.

A aplicação mobile quer algo como:

GET /clientes/123456789

e espera receber:

{
  "id": 123456789,
  "nome": "JOAO DA SILVA",
  "limite": 15000.00,
  "status": "ATIVO"
}

Aqui aparece o problema arquitetural.

Não temos necessariamente um sistema antigo incapaz de executar a regra de negócio.

Temos dois mundos falando idiomas diferentes.

De um lado:

HTTP
REST
JSON
OpenAPI
OAuth
JWT
Cloud
Mobile
Microservices

Do outro:

COBOL
CICS
IMS
Db2
copybooks
SAF
RACF

Jack Bauer olha para os dois lados.

— Precisamos de um tradutor.

É aqui que entra o IBM z/OS Connect.


⏱️ 05:00 — Afinal, o que diabos é z/OS Connect?

Para um COBOLzeiro começando agora, eu gosto desta definição:

IBM z/OS Connect é uma camada de integração que permite disponibilizar recursos e aplicações do z/OS através de APIs REST e também permite que aplicações z/OS consumam APIs externas.

Leia novamente a última parte.

Porque ela é frequentemente esquecida.

Não existe apenas:

MUNDO MODERNO
      │
      ▼
     API
      │
      ▼
 MAINFRAME

Também pode existir:

 MAINFRAME
      │
      ▼
     API
      │
      ▼
MUNDO EXTERNO

Esses dois caminhos nos levam a dois conceitos fundamentais:

API PROVIDER
API REQUESTER

Guarde esses nomes.

Jack Bauer certamente guardaria.

Ele só não teria tempo de anotá-los.


⏱️ 06:00 — API Provider: quando o mundo bate à porta do CICS

O API Provider resolve aproximadamente este cenário:

Mobile
   │
Web
   │
Cloud
   │
   ▼
REST / JSON
   │
   ▼
z/OS Connect
   │
   ▼
CICS / IMS / Db2
   │
   ▼
COBOL

Imagine novamente nosso programa de consulta de clientes.

O aplicativo envia:

GET /clientes/123456789

z/OS Connect recebe essa requisição.

Ele possui informações suficientes para entender que aquela operação está relacionada a determinado serviço no mainframe.

O JSON pode ser transformado para a estrutura esperada pelo programa.

O programa COBOL executa.

Depois acontece o caminho inverso:

COBOL
   │
estrutura tradicional
   │
   ▼
z/OS Connect
   │
JSON
   ▼
aplicação

Perceba a beleza arquitetural.

O COBOL não precisa acordar numa segunda-feira e dizer:

“A partir de hoje sou desenvolvedor REST.”

Ele continua fazendo aquilo para o qual foi criado.


⏱️ 07:00 — Não estamos transformando COBOL em REST

Essa diferença parece pequena, mas é gigantesca.

Uma simplificação perigosa seria dizer:

COBOL → REST

Não.

O programa COBOL continua sendo COBOL.

Estamos criando uma interface moderna para uma capacidade existente.

Pense assim:

             CONTRATO
              OpenAPI
                 │
                 ▼
            REST / JSON
                 │
                 ▼
          z/OS Connect
                 │
        mapping / routing
                 │
                 ▼
        estrutura COBOL
                 │
                 ▼
              CICS
                 │
                 ▼
              COBOL

Isso nos leva a uma das ideias mais importantes deste café:

Modernização não significa necessariamente reescrita.

Às vezes modernizar significa tornar acessível aquilo que já funciona.


⏱️ 08:00 — A reunião em que alguém quer reescrever tudo

Você conhece a cena.

Sala de reunião.

PowerPoint.

Café ruim.

Alguém aponta para um desenho cheio de caixas coloridas e diz:

— Temos que eliminar o legado.

Pergunte:

— Por quê?

Talvez a resposta seja:

— Porque precisamos disponibilizar consulta de saldo no celular.

Mas o programa de consulta de saldo funciona?

— Sim.

Está performando?

— Sim.

É confiável?

— Sim.

Possui décadas de regras de negócio?

— Sim.

Então talvez o problema não seja:

CONSULTAR-SALDO

Talvez o problema seja somente:

COMO ACESSAR CONSULTAR-SALDO

São problemas completamente diferentes.

Reescrever pode ser necessário em alguns casos.

Mas não deveria ser automaticamente sinônimo de modernização.


⏱️ 09:00 — O tesouro escondido dentro daquele COBOL feio

Aqui mora uma coisa que os novatos precisam aprender cedo.

Você abre um programa de 15 mil linhas.

Encontra:

IF WS-CODIGO = 37
   AND WS-TIPO = 'X'
   AND WS-DATA < 19981231
      MOVE 'S' TO WS-EXCECAO
END-IF

Sua primeira reação pode ser:

— Que porcaria é essa?

Calma.

Talvez esse IF exista porque:

  • uma lei mudou;

  • houve uma fusão bancária;

  • determinado produto foi descontinuado;

  • aconteceu um incidente em produção;

  • alguma regra fiscal antiga precisa continuar sendo respeitada;

  • existem contratos históricos;

  • alguém descobriu uma exceção em 1999.

Código legado não contém apenas instruções.

Ele contém arqueologia empresarial.

Às vezes aquelas linhas horrorosas são conhecimento institucional fossilizado.

O perigo da reescrita é acreditar que compreendemos tudo simplesmente porque entendemos a sintaxe.


⏱️ 10:00 — OpenAPI entra na CTU

O próximo personagem da história é o OpenAPI.

Podemos pensar nele como um contrato descrevendo nossa API.

Por exemplo:

paths:
  /clientes/{id}:
    get:
      summary: Consulta cliente
      parameters:
        - name: id
          in: path
          required: true

Ele documenta coisas como:

endpoint
método HTTP
parâmetros
estrutura de entrada
estrutura de saída
códigos de resposta

Isso permite que diferentes equipes compartilhem um contrato comum.

O desenvolvedor mobile não precisa perguntar:

— Qual é o offset do campo CLIENTE-ID na COMMAREA?

Ele pergunta:

— Qual é o contrato da API?

Essa mudança cultural é enorme.


⏱️ 11:00 — O copybook encontra JSON

Agora chegamos a uma das partes mais interessantes.

No mainframe podemos encontrar:

01 CUSTOMER-DATA.
   05 CUSTOMER-ID      PIC 9(09).
   05 CUSTOMER-NAME    PIC X(40).
   05 CUSTOMER-BALANCE PIC S9(9)V99 COMP-3.

No universo web:

{
  "customerId": 12345,
  "customerName": "MARIA",
  "customerBalance": 3450.25
}

Veja o abismo cultural.

O frontend não quer saber que COMP-3 existe.

Aliás, se você explicar packed decimal durante a daily do React, talvez seja expulso da reunião.

O z/OS Connect pode participar justamente da transformação entre esses formatos.

Conceitualmente:

JSON
 ↓
mapping
 ↓
estrutura nativa
 ↓
COBOL
 ↓
estrutura nativa
 ↓
mapping
 ↓
JSON

E isso é maravilhoso porque preserva uma regra fundamental:

não obrigue todas as aplicações da empresa a conhecer os detalhes internos umas das outras.


⏱️ 12:00 — API Requester: plot twist!

Metade da temporada passou.

Hora da reviravolta.

Até agora o mundo estava chamando o mainframe.

Mas e se o COBOL precisar chamar o mundo?

Imagine um programa bancário precisando consultar uma cotação externa.

A API moderna oferece:

GET /exchange/USD/BRL

Resposta:

{
  "currency": "USD",
  "rate": 5.42
}

Agora temos:

COBOL
  │
  ▼
z/OS Connect
  │
  ▼
REST / JSON
  │
  ▼
API EXTERNA

É o API Requester.

Isso muda muito a percepção do mainframe.

Ele deixa de ser apenas:

“a máquina que os outros sistemas chamam”.

Também pode tornar-se consumidor de serviços modernos.


⏱️ 13:00 — Provider e Requester juntos

Agora nosso desenho fica muito mais interessante:

                    API PROVIDER

Mobile / Cloud ─── REST ───► z/OS Connect
                                  │
                                  ▼
                           CICS / IMS / Db2
                                  │
                                  ▼
                                COBOL
                                  │
                                  │
                           API REQUESTER
                                  │
                                  ▼
                              REST API
                                  │
                                  ▼
                         Serviço externo

Isso é integração bidirecional.

O mainframe deixa de parecer uma ilha.

Ele passa a participar da arquitetura distribuída da empresa.


⏱️ 14:00 — Mas espere: INTERNET → COBOL?

Jack Bauer para no corredor.

Olha para você.

— Você colocou a internet na frente da minha transação bancária?

Boa pergunta.

Porque API sem segurança é apenas uma maneira moderna de criar um incidente.

Aqui entram mecanismos como:

TLS
JWT
SAF
RACF
autenticação
autorização
controle por operação

A ideia não deveria ser:

INTERNET
   │
   ▼
COBOL

Mas algo conceitualmente muito mais parecido com:

REQUEST
   │
   ▼
TLS
   │
   ▼
AUTENTICAÇÃO
   │
   ▼
AUTORIZAÇÃO
   │
   ▼
z/OS Connect
   │
   ▼
SAF / RACF
   │
   ▼
RECURSO

O velho castelo ganhou uma porta moderna.

Não removemos os guardas.


⏱️ 15:00 — Autorização granular

Existe uma diferença importante entre:

VAGNER PODE ACESSAR A API

e:

VAGNER PODE EXECUTAR ESTA OPERAÇÃO?

Considere:

GET /contas/123

versus:

POST /transferencias

Consultar saldo e transferir dinheiro são operações completamente diferentes.

Em segurança empresarial queremos aproximar-nos do princípio:

least privilege

Ou seja:

conceder apenas aquilo que determinado usuário ou identidade realmente necessita.

Isso também mostra por que API modernization não é simplesmente instalar um servidor HTTP na LPAR e comemorar.

Existe arquitetura por trás.


⏱️ 16:00 — O telefone toca novamente

— Jack, a API está lenta.

Pronto.

Começou a produção.

Agora precisamos responder:

onde estão os 800 milissegundos?

Pode ser:

Mobile
  ↓
rede
  ↓
API Gateway
  ↓
z/OS Connect
  ↓
CICS
  ↓
COBOL
  ↓
Db2

Sem observabilidade, todos apontam para o vizinho.

O pessoal web:

— Mainframe está lento.

O mainframe:

— Aqui está normal.

A rede:

— Não é comigo.

O DBA:

— A query levou 2 ms.

E assim nasce uma war room de oito horas.


⏱️ 17:00 — OpenTelemetry encontra SMF

O universo moderno fala muito em:

metrics
logs
traces
OpenTelemetry
Prometheus
Grafana

O mainframe possui sua própria tradição de observabilidade:

SMF
RMF
CICS statistics
CICS monitoring
logs

z/OS Connect vive justamente numa região onde esses universos podem se encontrar.

E existe algo poeticamente maravilhoso nisso.

A turma cloud-native descobre distributed tracing.

O velho sysprog toma um gole de café e responde:

— Interessante. Nós também gostamos de saber para onde foi nosso CPU desde antes de você nascer.

Easter egg número 1: nunca diga a um sysprog veterano que observabilidade foi inventada junto com Kubernetes.

Você poderá assistir a uma palestra improvisada de quatro horas sobre SMF.


⏱️ 18:00 — E aquele papo de 99% no zIIP?

Aqui precisamos impedir um pequeno atentado conceitual.

Você poderá ler que mais de 99% do processamento relacionado ao z/OS Connect pode ser elegível para zIIP em determinadas condições de execução nativa.

Então alguém inevitavelmente concluirá:

“Excelente! 99% do meu COBOL vai para zIIP!”

NÃO.

Jack Bauer bate na mesa.

O relógio para durante dois segundos dramáticos.

A afirmação refere-se ao processamento do z/OS Connect, não magicamente a toda carga que existe atrás dele.

Pense:

HTTP processing
JSON transformation
z/OS Connect runtime
        │
        └────► alta elegibilidade zIIP

Depois:

CICS
COBOL
Db2
outros componentes

possuem suas próprias características e regras.

Esse detalhe é fundamental quando alguém começa a transformar arquitetura técnica em planilha financeira.


⏱️ 19:00 — Containers chegam ao mainframe

Outra surpresa para quem pensa que mainframe significa somente:

JCL + STARTED TASK + 3270

O ecossistema moderno do z/OS Connect também contempla deployment containerizado em cenários suportados.

Entram conceitos como:

OCI containers
OpenShift
z/OS Container Extensions
IBM Z

Ou seja, podemos encontrar arquiteturas muito diferentes.

Mas cuidado.

Não conclua:

“Então qualquer componente pode ser colocado em qualquer lugar.”

Características, features e restrições podem variar conforme o modelo de implantação e versão.

Regra do velho Bellacosa:

Antes de transformar um slide de arquitetura em implementação, leia a documentação da versão que realmente será instalada.

Essa frase evita mais incidentes que muita ferramenta cara.


⏱️ 20:00 — E IBM MQ?

Aqui mora outra armadilha interessante.

Em material introdutório é comum vermos juntos:

CICS
IMS
Db2
IBM MQ

Mas suporte depende da feature e geração utilizada.

O ecossistema histórico do z/OS Connect possui diferenças entre gerações e recursos.

Portanto:

“z/OS Connect suporta X” não é uma informação completa sem perguntar versão, feature e cenário.

Isso vale para MQ e praticamente qualquer produto empresarial com anos de evolução.

Easter egg número 2: em mainframe, a resposta para “isso é suportado?” frequentemente começa com:

“Depende do release.”

Se alguém responder imediatamente “sim” sem perguntar versão, comece a ficar desconfiado.


⏱️ 21:00 — API Management não é z/OS Connect

Outra confusão clássica.

Podemos ter:

CONSUMIDORES
     │
     ▼
API MANAGEMENT
     │
     ▼
z/OS Connect
     │
     ▼
CICS / IMS / Db2

API Management pode cuidar de coisas como:

catálogo
lifecycle
analytics
policies
plans
governança
consumidores

z/OS Connect possui foco específico na integração entre APIs e recursos z/OS.

São papéis complementares.

Pense num aeroporto.

API Management administra boa parte da relação com passageiros, rotas, regras e portas.

z/OS Connect é o intérprete altamente especializado que sabe conversar com aquela aeronave de 300 toneladas chamada CICS.


⏱️ 22:00 — Passo a passo mental para criar nossa API

Vamos montar uma operação conceitual.

Temos:

Programa: CLIENTE
Ambiente: CICS
Entrada: CLIENTE-ID
Saída:
   CLIENTE-NOME
   CLIENTE-LIMITE
   CLIENTE-STATUS

Passo 1 — Descubra a capacidade de negócio

Não comece pelo REST.

Pergunte:

O que esse programa realmente faz?

Resposta:

CONSULTAR CLIENTE

Passo 2 — Entenda entrada e saída

Localize copybooks e estruturas.

05 CLIENTE-ID PIC 9(09).

Saída:

05 CLIENTE-NOME   PIC X(40).
05 CLIENTE-LIMITE PIC 9(09)V99.
05 CLIENTE-STATUS PIC X.

Passo 3 — Pense na API como contrato

Por exemplo:

GET /clientes/{id}

Passo 4 — Defina representação externa

{
   "id": 123,
   "nome": "MARIA",
   "limite": 8000.00,
   "status": "ATIVO"
}

Passo 5 — Configure o mapping

Conceitualmente:

id
   ↕
CLIENTE-ID

nome
   ↕
CLIENTE-NOME

limite
   ↕
CLIENTE-LIMITE

Passo 6 — Configure segurança

Pergunte:

Quem chama?
Como autentica?
Qual identidade chega ao z/OS?
Qual operação pode executar?
Qual recurso SAF protege?

Passo 7 — Teste

Não teste somente:

HTTP 200

Teste também:

dados inválidos
cliente inexistente
timeout
indisponibilidade CICS
falha Db2
credencial inválida
usuário sem autorização
campos limites
concorrência
volume

Passo 8 — Observe

Descubra antes da produção:

latência
throughput
CPU
zIIP
erros
timeouts
dependências

Passo 9 — Documente

OpenAPI não deveria ser decoração.

É parte do contrato entre equipes.

Passo 10 — Só então coloque Jack Bauer de plantão

Preferencialmente não coloque.

Se precisarmos dele, alguma coisa já deu muito errado.


⏱️ 23:00 — O verdadeiro significado de modernização

Agora chegamos à parte que considero mais importante.

Existe uma narrativa confortável:

VELHO = RUIM
NOVO = BOM

Computação real não funciona assim.

Um programa COBOL criado em 1992 pode estar executando uma regra crítica perfeitamente.

Uma aplicação criada há seis meses em Kubernetes pode ser uma catástrofe arquitetural.

Idade não é qualidade.

Tecnologia nova não é automaticamente modernização.

A pergunta deveria ser:

Que problema de negócio estamos tentando resolver?

Se o problema for:

“Precisamos disponibilizar capacidades do mainframe para novos canais.”

Talvez a resposta seja integração.

Não reescrita.


⏱️ 23:42 — O castelo Bellacosa

Imagine o mainframe como um castelo gigantesco.

Dentro dele vivem:

COBOL
CICS
IMS
Db2
RACF
JES2

Durante décadas quem quisesse entrar precisava conhecer os costumes locais:

3270
TSO
ISPF
JCL
copybook
COMMAREA
EBCDIC

Então construímos uma recepção moderna.

Na porta está escrito:

HTTPS
REST
JSON
OpenAPI

O visitante chega.

— Quero consultar a conta 123.

Ele envia:

GET /accounts/123

A recepção entende.

Traduz.

Entra no castelo.

O velho COBOL recebe sua estrutura.

Executa.

Consulta Db2.

Devolve os dados.

A recepção traduz novamente.

O visitante recebe:

{
   "account": 123,
   "balance": 8542.71
}

E vai embora.

Ele nunca soube que CICS existia.

E o CICS nunca precisou aprender React.

Isso é desacoplamento.


⏱️ 23:50 — A curiosidade que muda tudo

Perceba uma consequência filosófica interessante.

Uma aplicação pode ter:

30 anos de idade

e possuir uma interface criada ontem.

Portanto:

A idade da implementação não determina a idade da interface.

Essa frase merece ficar colada perto do monitor.

Podemos ter:

React
   │
REST
   │
API Gateway
   │
z/OS Connect
   │
CICS
   │
COBOL
   │
Db2

Qual é a idade desse sistema?

2026?

2015?

2002?

1989?

A resposta correta talvez seja:

todas elas.

Sistemas empresariais são cidades.

Não são casas.

Uma cidade possui prédios de 1890, metrô de 1970, fibra óptica de 2025 e alguém pagando café pelo celular dentro de um edifício construído quando telefone ainda tinha fio.

Ninguém diz:

“Precisamos demolir Lisboa porque algumas construções são antigas.”

Integramos.

Restauramos.

Substituímos onde necessário.

Preservamos onde faz sentido.


⏱️ 23:55 — Cinco dicas do velho COBOLzeiro

Se você está começando em COBOL e z/OS Connect, guarde estas ideias.

1. Aprenda HTTP e REST.

Você não precisa virar desenvolvedor frontend, mas precisa entender:

GET
POST
PUT
DELETE
headers
status codes
JSON
TLS

2. Aprenda OpenAPI.

O contrato é parte central desse novo mundo.

3. Continue estudando COBOL profundamente.

API nenhuma elimina a necessidade de entender aquilo que existe atrás dela.

4. Aprenda segurança.

Especialmente:

SAF
RACF
TLS
JWT
identidade
autenticação
autorização
least privilege

5. Aprenda observabilidade.

Porque depois do primeiro:

HTTP 200 OK

virá inevitavelmente:

“Por que demorou 1,7 segundo?”

E alguém precisará descobrir.


⏱️ 23:58 — O último plot twist

Jack Bauer finalmente encontra o responsável pelo incidente.

Não era o COBOL.

Não era o CICS.

Não era o Db2.

Não era RACF.

Era uma aplicação distribuída fazendo 47 chamadas redundantes para a mesma API para montar uma única tela.

O sysprog olha para Jack.

Jack olha para o sysprog.

O sysprog pergunta:

— Quer café?

— Quanto tempo temos?

00:01:42

— Dá.


⏱️ 23:59 — O relógio chega ao fim

Agora podemos resumir toda nossa arquitetura:

                     IBM z/OS CONNECT
                            │
             ┌──────────────┴──────────────┐
             │                             │
             ▼                             ▼

        API PROVIDER                  API REQUESTER

      mundo → z/OS                   z/OS → mundo

       REST/JSON                         COBOL
           │                               │
           ▼                               ▼
     z/OS Connect                    z/OS Connect
           │                               │
           ▼                               ▼
   CICS / IMS / Db2                  REST APIs
           │                               │
           ▼                               ▼
         COBOL                       Cloud / SaaS

Ao redor disso existem:

OpenAPI
mapping
security
SAF
RACF
TLS
JWT
OpenTelemetry
SMF
zIIP
containers
OpenShift
API Management
DevOps

Mas existe uma ideia ainda maior envolvendo tudo isso:

MODERNIZAÇÃO
      │
      ▼
não significa obrigatoriamente
      │
      ▼
REESCRITA

Modernização pode significar:

PRESERVAR
    │
    ▼
CAPACIDADES DE NEGÓCIO
    │
    ▼
DESACOPLAR
    │
    ▼
EXPOR POR CONTRATOS MODERNOS
    │
    ▼
INTEGRAR
    │
    ▼
EVOLUIR

☕ Epílogo — 00:00:00

O relógio finalmente chega a zero.

A API está funcionando.

O aplicativo mobile consulta o cliente.

O request entra como REST.

z/OS Connect recebe JSON.

A estrutura chega ao CICS.

O programa COBOL executa.

Db2 responde.

A informação volta.

O usuário vê seu saldo no smartphone.

Ele toca na tela e reclama:

— Nossa, tecnologia moderna é incrível.

No datacenter, silenciosamente, um programa COBOL escrito quando Windows 3.1 era novidade acabou de fazer o trabalho pesado.

Ele não recebeu aplausos.

Não apareceu no aplicativo.

Ninguém colocou seu nome na keynote.

Ele simplesmente executou outra transação.

Como fez milhões de vezes.

Jack Bauer fecha o notebook.

O operador olha para a console.

CICS STATUS: ACTIVE

Tudo normal.

Então o velho COBOLzeiro toma o último gole de café e deixa uma anotação para o turno seguinte:

Não confundam modernização com demolição. Às vezes o sistema não precisa de um coração novo. Precisa apenas de uma porta nova.

Na porta está escrito:

REST
JSON
OpenAPI

Atrás dela continua existindo:

PROCEDURE DIVISION.

    PERFORM PROCESSAR-NEGOCIO.

    GOBACK.

00:00:01

O telefone toca novamente.

— Temos outro problema.

— Qual?

— Agora querem colocar IA acessando a API.

O COBOLzeiro olha para Jack Bauer.

Jack Bauer olha para o relógio.

O relógio começa novamente:

24:00:00
23:59:59
23:59:58...

E em algum lugar muito distante do CPD alguém abre um PowerPoint chamado:

AI MAINFRAME MODERNIZATION
FINAL_v7_REAL_FINAL_AGORA_VAI.pptx

O operador suspira.

— Passa o café.

Easter egg final: se você trabalha em TI há tempo suficiente, sabe que o arquivo FINAL_v7_REAL_FINAL_AGORA_VAI jamais é a versão final.

E talvez essa seja a única constante mais confiável que o próprio mainframe.

quinta-feira, 7 de dezembro de 2023

The Mentalist, COBOL e o Caso da API que Sabia Demais Zos Connect

 

Bellacosa Mainframe apresenta o zos connect

☕ Um Café no Bellacosa Mainframe

The Mentalist, COBOL e o Caso da API que Sabia Demais

🧠 z/OS Connect, REST, JSON, OpenAPI, CICS, IMS, Db2, SAF, RACF, SMF, WLM e o estranho caso em que Patrick Jane olhou para uma COMMAREA, sorriu e disse: “O problema nunca foi o COBOL. Foi quem tentou falar diretamente com ele.”

Imagine a cena.

Você acaba de entrar em uma sala de operações de um grande banco.

De um lado, desenvolvedores jovens discutem APIs, JSON, Kubernetes, microsserviços, OAuth, OpenAPI e gateways.

Do outro, um veterano de mainframe olha para uma tela verde onde aparece alguma coisa assim:

01 DFHCOMMAREA.
   05 CUSTOMER-ID        PIC 9(10).
   05 CUSTOMER-NAME      PIC X(40).
   05 ACCOUNT-BALANCE    PIC S9(11)V99 COMP-3.
   05 CUSTOMER-STATUS    PIC X(01).

No meio da sala está você, programador COBOL iniciante, tentando descobrir como esses dois mundos vão conversar.

Então entra Patrick Jane.

Ele olha para o código.

Olha para o diagrama da API.

Olha novamente para o código.

Sorri.

E pergunta:

— Por que vocês estão tentando ensinar o aplicativo móvel a entender COMP-3?

Silêncio.

O arquiteto cloud cruza os braços.

O programador CICS olha para o teto.

Jane continua:

— E por que estão tentando ensinar o programa COBOL a entender JSON?

Mais silêncio.

Finalmente ele pega uma caneta e escreve no quadro:

APP
 |
REST / JSON
 |
z/OS Connect
 |
CICS
 |
COBOL

E conclui:

— O truque não é fazer um mundo se tornar o outro. O truque é colocar alguém no meio que fale os dois idiomas.

Bem-vindo ao z/OS Connect.

E não, ele não é apenas “um conversor de JSON para COBOL”.

Essa definição seria tão incompleta quanto dizer que Sherlock Holmes era apenas um homem que usava lupa.


🔎 Cena do crime: dois mundos que não deveriam conhecer os detalhes um do outro

Comecemos pelo problema original.

Durante décadas, sistemas corporativos foram construídos sobre IBM Z utilizando tecnologias como:

  • COBOL;

  • CICS;

  • IMS;

  • Db2;

  • VSAM;

  • IBM MQ;

  • PL/I;

  • batch;

  • programas tradicionais de negócio.

Esses sistemas podem executar funções essenciais como:

consultar conta
autorizar pagamento
calcular seguro
registrar pedido
validar limite
atualizar estoque
consultar cliente
processar financiamento

A aplicação moderna, porém, pensa diferente.

Um aplicativo mobile quer fazer algo como:

GET /customers/1234567890

e receber:

{
  "customerId": 1234567890,
  "name": "JOAO DA SILVA",
  "balance": 15234.87,
  "status": "ACTIVE"
}

Parece simples.

Mas atrás dessa pequena chamada pode existir um programa COBOL que trabalha com:

PIC X
PIC 9
COMP
COMP-3
SIGN
REDEFINES
OCCURS
EBCDIC
COMMAREA
CHANNEL
CONTAINER

A pergunta verdadeira, portanto, não é:

“Como chamar um COBOL por REST?”

A pergunta correta é:

“Como criar uma fronteira estável entre consumidores modernos e ativos z/OS sem obrigar nenhum dos lados a conhecer detalhes desnecessários do outro?”

Essa é a investigação.


🧠 Primeira pista: o ativo de negócio

Documentações frequentemente usam o termo z/OS asset.

Para quem está começando, isso pode parecer algum arquivo misterioso armazenado no sistema.

Não necessariamente.

Um asset pode representar uma capacidade de negócio executada pelo ambiente z/OS.

Por exemplo:

Transação CICS
     |
     v
Programa COBOL
     |
     v
Db2
     |
     v
"Consultar cliente"

O ativo importante não é apenas o programa.

É o que ele sabe fazer.

Imagine um programa escrito há 25 anos que contém todas as regras para cálculo de prêmio de seguro.

Talvez o código seja antigo.

Mas as regras contidas ali representam décadas de conhecimento corporativo.

Patrick Jane provavelmente observaria:

— Você está olhando para código velho. Eu estou olhando para memória institucional.

E essa diferença muda tudo.

Modernização não significa obrigatoriamente eliminar o legado.

Às vezes significa tornar o legado acessível por interfaces modernas.


🚪 z/OS Connect como recepção do hotel

Existe uma analogia que gosto muito.

Imagine que o mainframe seja um hotel enorme.

Dentro dele existem departamentos falando linguagens próprias:

CICS
IMS
COBOL
Db2
VSAM
MQ
EBCDIC
COMP-3

Chega um cliente falando:

HTTP
REST
JSON
OpenAPI

Seria absurdo obrigar o hóspede a entrar na cozinha e perguntar:

— Onde deixo minha COMMAREA?

Da mesma maneira seria estranho mandar o cozinheiro estudar OAuth apenas para preparar o prato.

Você coloca uma recepção no meio.

CLIENTE
   |
   v
REST / JSON
   |
   v
z/OS Connect
   |
   +------ CICS
   |
   +------ IMS
   |
   +------ outros ativos

O cliente fala o idioma externo.

A aplicação z/OS fala seu idioma interno.

O z/OS Connect faz a mediação.


🎯 Service Provider: quando o mundo chama o mainframe

O primeiro modelo importante é o Service Provider, também chamado, conceitualmente, de fluxo inbound.

O tráfego vem de fora para dentro:

Aplicação
   |
HTTP / REST
   |
   v
z/OS Connect
   |
   v
CICS / IMS / aplicação z/OS

Imagine um aplicativo bancário solicitando saldo.

O aplicativo envia:

GET /accounts/1234567890/balance

Para ele, a coisa termina aí.

Mas internamente o caminho pode acabar em algo como:

CICS transaction = BAL1
program = BALANCE
layout = COBOL copybook
dados = EBCDIC / binário
saldo = COMP-3

O consumidor não precisa saber nada disso.

Essa é uma das características mais importantes de uma boa arquitetura: esconder detalhes de implementação atrás de um contrato.


🕵️ Patrick Jane encontra a primeira mentira: API e serviço não são a mesma coisa

Aqui muitos iniciantes tropeçam.

Um serviço de backend e uma API não são necessariamente a mesma coisa.

Considere uma aplicação COBOL que oferece uma função:

CUSTOMER-INQUIRY

Internamente isso pode ser tratado como um serviço.

Mas externamente talvez desejemos disponibilizar:

GET /customers/{id}

ou:

GET /customers/{id}/accounts

ou ainda:

GET /customers/{id}/balance

A API representa aquilo que desejamos oferecer ao consumidor.

O serviço representa aquilo que sabemos acionar internamente.

Podemos visualizar:

API
 |
 +--- GET /customers/{id}
 |
 +--- GET /customers/{id}/accounts
 |
 +--- GET /customers/{id}/balance
              |
              v
        serviço backend
              |
              v
             CICS
              |
              v
            COBOL

Esse desacoplamento é ouro.

Porque amanhã a implementação pode mudar sem necessariamente alterar o contrato externo.


🧬 O mistério do COMP-3 desaparecido

Chegamos ao coração técnico da história.

Suponha que o COBOL possua:

01 CUSTOMER-DATA.
   05 CUSTOMER-ID      PIC 9(08).
   05 CUSTOMER-NAME    PIC X(30).
   05 BALANCE          PIC S9(9)V99 COMP-3.

Enquanto o cliente espera:

{
  "customerId": 12345678,
  "customerName": "MARIA SILVA",
  "balance": 850.75
}

Esses dois mundos usam representações completamente diferentes.

COBOL entende conceitos como:

PIC
USAGE
COMP
COMP-3
SIGN
OCCURS
REDEFINES

JSON entende basicamente:

string
number
boolean
array
object
null

Alguém precisa transformar um modelo no outro.

Conceitualmente:

JSON
 |
 v
mapping
 |
 v
estrutura esperada pelo backend
 |
 v
COBOL

Na volta:

COBOL
 |
 v
estrutura interna
 |
 v
mapping
 |
 v
JSON

Para um COBOLzeiro, podemos brincar dizendo que é um tipo de:

SORT FIELDS=COPY diplomático entre civilizações de dados.

Só que aqui não estamos reorganizando registros.

Estamos traduzindo modelos de representação.


☕ Curiosidade de CPD: o COBOL talvez nunca saiba que existe JSON

Essa ideia merece atenção.

Um programa COBOL escrito antes da popularização da web pode continuar executando sua lógica normalmente.

Ele recebe uma estrutura.

Processa.

Devolve outra estrutura.

Pronto.

Do ponto de vista dele:

entrada
processamento
saída

Nada mudou.

Enquanto do lado externo temos:

HTTPS
REST
JSON
OpenAPI
API Gateway

Você acabou de criar uma arquitetura moderna ao redor de uma aplicação que talvez tenha começado sua carreira quando ninguém ainda dizia “cloud-native”.

Isso é encapsulamento em escala empresarial.


🛡️ SAF e RACF: Patrick Jane não confia em ninguém sem investigar

Agora chegamos à segurança.

O z/OS possui um conceito importantíssimo chamado SAF — System Authorization Facility.

SAF funciona como uma interface através da qual componentes do z/OS podem pedir verificações de segurança.

Um produto como RACF pode estar por trás dessa interface.

Simplificando:

z/OS Connect
    |
    v
   SAF
    |
    v
  RACF

Imagine que alguém chegue dizendo:

— Sou o usuário ABC123.

Autenticação pergunta:

Quem é você?

Autorização pergunta:

Você pode fazer isso?

Essa diferença parece pequena, mas é gigantesca.

Uma identidade autenticada pode não possuir autorização para chamar determinado recurso.

É semelhante ao prédio da polícia em The Mentalist.

Você pode possuir crachá para entrar no edifício.

Isso não significa que pode abrir qualquer sala de evidências.


📜 SMF: toda boa investigação precisa de registros

Agora aparece uma das integrações mais poderosas do ecossistema z/OS: SMF — System Management Facilities.

O mainframe possui longa tradição em registrar atividades operacionais.

SMF pode alimentar processos associados a:

auditoria
performance
capacity planning
chargeback
investigação
segurança
estatísticas

Quando APIs começam a acessar sistemas centrais, você quer responder perguntas como:

Quem chamou?
Quando chamou?
Qual recurso?
Quanto demorou?
Qual foi o resultado?

Imagine um incidente às 03:17.

Um investigador pergunta:

— Quem consultou essa conta?

Você não quer ouvir:

— Talvez aquele microsserviço azul que estava naquele container que morreu ontem.

Você quer rastreabilidade.

É aqui que a cultura mainframe mostra uma virtude antiga: registrar o que aconteceu é tão importante quanto fazer acontecer.


⚙️ WLM: nem todas as requisições merecem tratamento igual

Outro elemento importante é WLM — Workload Manager.

No mundo simplificado de APIs podemos imaginar:

requisição = requisição

Mas produção não funciona assim.

Uma consulta simples pode ter importância menor que uma autorização financeira urgente.

Considere:

GET /marketing/catalog

versus:

POST /payments/authorize

Talvez ambos sejam APIs.

Mas não necessariamente devem receber a mesma prioridade operacional.

O WLM existe justamente no universo z/OS para tratar workloads de acordo com metas e importância.

Isso é fascinante porque mostra que APIs modernas podem entrar em um ambiente que há décadas já trabalha com conceitos sofisticados de gerenciamento de carga.


🧱 Liberty: a base que fala HTTP naturalmente

O z/OS Connect utiliza tecnologia associada ao Liberty, oferecendo uma base moderna para aplicações Java, HTTP e serviços REST.

Para um programador COBOL podemos pensar assim:

Liberty
   |
runtime moderno
   |
HTTP / REST / segurança
   |
z/OS Connect

É importante porque o mainframe não precisa fingir que HTTP é uma COMMAREA.

Existe uma camada apropriada para lidar com tecnologias web.

Cada componente trabalha no terreno em que é mais competente.

Isso é arquitetura saudável.


🌍 API Gateway: o porteiro antes da recepção

Existe ainda outra peça que costuma aparecer na arquitetura:

CLIENT
   |
   v
API Gateway
   |
   v
z/OS Connect
   |
   v
CICS
   |
   v
COBOL

Não confunda API Gateway com z/OS Connect.

Um gateway frequentemente cuida de questões como:

rate limiting
throttling
quotas
API keys
analytics
policies
versionamento
developer portal
controle de consumidores

O z/OS Connect está mais próximo da integração com os ativos z/OS.

Podemos imaginar:

API Gateway
    =
porteiro do condomínio

z/OS Connect
    =
recepção que sabe para onde encaminhar

Ambos são importantes, mas têm papéis diferentes.


🚨 A armadilha da metralhadora REST

Aqui vai uma história que deveria assustar qualquer sysprog.

Suponha que alguém desenvolva:

setInterval(getBalance, 10);

Parabéns.

Você acaba de transformar um aplicativo em uma metralhadora REST apontada diretamente para o CICS.

Uma transação que antes recebia 500 chamadas por minuto pode começar a receber:

Mobile
Web
Bots
Parceiros
Microsserviços
Aplicações internas
        |
        v
       API
        |
        v
      CICS

e saltar para:

25.000 chamadas por minuto

Publicar uma API muda o perfil do workload.

Portanto entram questões como:

throttling
rate limiting
timeout
capacity planning
WLM
CICS MXT
CPU
zIIP
Db2 locks
pool de conexões
caching
SLA

A API pode tornar um recurso mais acessível.

E exatamente por isso pode torná-lo muito mais solicitado.


🔄 API Requester: quando o COBOL decide sair de casa

Até agora falamos do mundo chamando o mainframe.

Mas existe o movimento contrário.

O API Requester permite que aplicações z/OS consumam APIs REST externas.

O fluxo passa a ser:

COBOL
 |
 v
z/OS Connect
 |
 v
REST API
 |
 v
Cloud / SaaS / serviço externo

Isso é uma mudança conceitual enorme.

Imagine um programa COBOL que precisa consultar uma cotação de moeda.

Sua estrutura pode ser:

01 CURRENCY-REQUEST.
   05 FROM-CURRENCY PIC X(03).
   05 TO-CURRENCY   PIC X(03).
   05 AMOUNT        PIC 9(09)V99.

Enquanto o serviço externo recebe:

{
  "from": "USD",
  "to": "BRL",
  "amount": 100
}

O fluxo conceitual:

COBOL data
   |
   v
mapping
   |
   v
JSON
   |
   v
REST API
   |
   v
JSON response
   |
   v
mapping
   |
   v
COBOL data

Portanto o z/OS Connect não serve apenas para fazer:

REST -> MAINFRAME

Também pode permitir:

MAINFRAME -> REST

🌉 O mainframe deixa de ser uma ilha

Juntando os dois movimentos:

                z/OS Connect
                     |
         +-----------+-----------+
         |                       |
      Provider                Requester
         |                       |
   REST -> z/OS              z/OS -> REST

Imagine:

APP MOBILE
   |
   v
API Gateway
   |
   v
z/OS Connect
   |
   v
CICS
   |
   v
COBOL

Durante o processamento, aquele COBOL pode precisar consultar uma API externa antifraude:

COBOL
   |
   v
z/OS Connect Requester
   |
   v
API antifraude
   |
   v
Cloud

Agora temos uma arquitetura genuinamente híbrida:

Mobile
   |
REST
   |
IBM Z
   |
COBOL
   |
REST
   |
Cloud

O mainframe continua sendo o sistema central.

Mas participa de um ecossistema moderno.


📐 OpenAPI: o contrato que impede testemunhas de mudar a história

Uma API moderna precisa de um contrato claro.

É aqui que entra OpenAPI.

Algo conceitualmente assim:

paths:
  /customers/{customerId}:
    get:
      operationId: getCustomer

Isso pode descrever:

URI
método HTTP
parâmetros
request
response
tipos
status codes

O contrato OpenAPI pode ser usado por ferramentas para:

documentação
geração de clientes
testes
validação
automação
DevOps

Patrick Jane provavelmente observaria:

— Em investigações, pessoas mudam versões. Em APIs, contratos existem para impedir isso.

Se hoje a API retorna:

{
  "balance": 100.00
}

e amanhã alguém simplesmente muda para:

{
  "currentBalance": 100.00
}

pode quebrar consumidores.

Por isso API não é apenas interface.

É contrato de produção.


🗃️ SAR e AAR: pegadas de uma geração anterior

Quem pesquisa z/OS Connect inevitavelmente encontra termos como:

SAR
Service Archive

AAR
API Archive

Eles aparecem em materiais históricos de versões anteriores do produto.

Isso merece cuidado.

A tecnologia evoluiu.

Hoje existe uma orientação muito mais forte para abordagens baseadas em OpenAPI e tooling moderno.

Portanto, ao estudar, adote uma regra que todo veterano de mainframe aprende cedo:

Antes de acreditar em uma documentação, descubra para qual versão ela foi escrita.

Essa regra economiza semanas de sofrimento.

Mainframe possui excelente retrocompatibilidade.

Documentação da internet, nem sempre.


🔧 DevOps entra na investigação

APIs não deveriam ser tratadas como arquivos criados artesanalmente e esquecidos em produção.

Uma abordagem moderna pode ter:

Git
 |
 v
OpenAPI
 |
 v
Build
 |
 v
Validation
 |
 v
Tests
 |
 v
Package
 |
 v
Deploy
 |
 v
z/OS Connect

Agora imagine um commit:

commit:
"alterando resposta da API"

Isso pode disparar:

lint
validation
test
build
deployment

O IBM Z passa a participar do mesmo ciclo de engenharia observado no restante da organização.

Não significa abandonar controles tradicionais.

Significa integrá-los.


🧪 Passo a passo mental para construir uma API

Suponha que você precise expor uma consulta de cliente existente no CICS.

Passo 1 — descubra o verdadeiro ativo

Não comece pela API.

Pergunte:

Qual transação?
Qual programa?
Qual entrada?
Qual saída?
Onde estão os dados?

Talvez descubra:

TRN = CUST
PGM = CUSTINQ
DB  = Db2

Passo 2 — entenda o layout COBOL

Exemplo:

01 REQUEST.
   05 CUSTOMER-ID PIC 9(10).

01 RESPONSE.
   05 NAME        PIC X(40).
   05 STATUS      PIC X.

Passo 3 — pense como consumidor

O consumidor não quer saber sobre PIC 9(10).

Ele quer:

GET /customers/1234567890

Passo 4 — defina o contrato

Resposta:

{
  "customerId": "1234567890",
  "name": "JOAO DA SILVA",
  "status": "ACTIVE"
}

Passo 5 — defina o mapping

Agora ligue:

customerId
     |
     v
CUSTOMER-ID

e:

NAME
 |
 v
name

Passo 6 — defina segurança

Pergunte:

Quem pode chamar?
Como será autenticado?
Qual recurso SAF?
Quais grupos RACF?

Passo 7 — pense em observabilidade

Pergunte:

O que será registrado?
SMF?
Logs?
Tempo de resposta?
Erros?

Passo 8 — pense em carga

Pergunte:

Quantas chamadas?
Qual pico?
Qual SLA?
É necessário throttling?

Passo 9 — teste erro, não apenas sucesso

Teste:

cliente inexistente
dados inválidos
backend indisponível
timeout
usuário não autorizado
CICS congestionado
Db2 indisponível

A API perfeita em PowerPoint costuma morrer no primeiro HTTP 500.


🧠 Dica de Mentalista: observe aquilo que ninguém está perguntando

Em projetos de integração, todos perguntam:

“A API funciona?”

Pergunte também:

“O que acontece se ela funcionar demais?”

Esse é um dos segredos arquiteturais mais importantes.

Uma API bem-sucedida pode multiplicar chamadas.

Imagine antes:

Sistema A
   |
500 chamadas/hora

Depois:

Sistema A
Sistema B
Sistema C
Mobile
Parceiros
Bots
Analytics
       |
       v
50.000 chamadas/hora

O backend continua sendo o mesmo.

Isso significa que API design também precisa envolver:

capacity
performance
security
governance
resiliência

💣 Easter egg: o Red John das APIs

Toda série policial precisa de um vilão recorrente.

No mundo das APIs, ele atende por vários nomes:

acoplamento
falta de controle
ausência de versionamento
payload mal desenhado
autorização excessiva
timeout inexistente
retry infinito

Mas existe um especialmente perigoso:

expor diretamente a implementação interna.

Imagine uma API assim:

POST /executeTransaction/BAL1/program/BALANCE

Isso é quase entregar ao cliente o mapa da casa inteira.

Melhor expor intenção de negócio:

GET /accounts/{id}/balance

A API deveria dizer:

“o que o negócio oferece”

e não:

“como meu CICS está montado”.

Patrick Jane chamaria isso de linguagem corporal arquitetural.

Quando uma API começa a revelar demais sobre o backend, alguma coisa está errada.


🏚️ APIficar não é modernizar automaticamente

Outro erro comum:

legacy ruim
   |
REST
   |
legacy moderno

Não.

Você pode ter:

API linda
   |
   v
COBOL gigantesco
   |
   v
47 CALLs
   |
   v
12 tabelas Db2
   |
   v
3 arquivos VSAM
   |
   v
regra que ninguém entende desde 1997

O z/OS Connect resolve integração.

Ele não resolve automaticamente:

código ruim
acoplamento
débito técnico
modelagem inadequada
problemas de performance
regras incompreensíveis

API não é água benta arquitetural.


🧭 O erro do iniciante: pensar em tecnologia antes do negócio

O programador iniciante geralmente pergunta:

“Como faço o JSON?”

O arquiteto experiente pergunta:

“Qual capacidade estamos oferecendo?”

Essa mudança mental é importante.

Em vez de começar:

REST
JSON
OpenAPI

comece:

negócio
 |
capacidade
 |
contrato
 |
integração

Depois escolha a tecnologia.

Porque uma API excelente para uma operação mal definida continuará sendo uma API mal desenhada.


🎩 Curiosidade: o mainframe já fazia “serviços” antes da palavra ficar elegante

Existe uma ironia histórica deliciosa.

Durante décadas, aplicações mainframe já separavam responsabilidades usando:

CALL
LINK
XCTL
MQ
transações
programas reutilizáveis
copybooks
interfaces

Hoje chamamos muitos conceitos de:

service
API
contract
interface

É claro que as tecnologias são diferentes.

Mas a ideia de criar fronteiras entre componentes não nasceu com REST.

O veterano COBOL pode aprender uma coisa importante:

Você não está entrando em um universo completamente alienígena.

Muito do raciocínio arquitetural você já conhece.

Os nomes mudaram.

Os protocolos mudaram.

Os princípios continuam surpreendentemente familiares.


☕ A cena final

Depois de horas olhando diagramas, Patrick Jane pega sua xícara de chá.

O veterano COBOL pergunta:

— Então o z/OS Connect moderniza o mainframe?

Jane faz aquela expressão irritantemente tranquila.

— Não exatamente.

— Então ele substitui COBOL?

— Não.

— Converte JSON?

— Também.

— Então o que ele realmente faz?

Jane aponta para o quadro.

MUNDO MODERNO
REST / JSON / OpenAPI
        |
        v
   z/OS Connect
        |
        v
MUNDO IBM Z
CICS / IMS / COBOL

E responde:

— Ele permite que dois mundos colaborem sem obrigar nenhum deles a fingir que é o outro.

Essa é a chave.

O COBOL não precisa virar JavaScript.

O aplicativo mobile não precisa entender COMMAREA.

O desenvolvedor cloud não precisa saber onde está o programa CICS.

O programa CICS não precisa saber que foi chamado por um smartphone.

Cada camada conhece apenas aquilo que precisa conhecer.

E isso, no fim das contas, é arquitetura.


🧠 O mapa mental definitivo

Se você está começando com z/OS Connect, grave este desenho:

                    CONSUMIDORES
             Mobile / Web / Cloud
                       |
                       v
                 API Gateway
                       |
                       v
                 z/OS Connect
                       |
        +--------------+--------------+
        |              |              |
       CICS           IMS          outros
        |              |
      COBOL          COBOL
        |
      Db2 / VSAM

No fluxo contrário:

COBOL
   |
   v
z/OS Connect Requester
   |
   v
REST API externa
   |
   v
Cloud / SaaS

E ao redor disso pense sempre em:

OpenAPI
Security
SAF
RACF
SMF
WLM
DevOps
Observability
API Management
Performance
Governance

🎯 Conclusão: observe o que está escondido atrás da API

O grande valor do z/OS Connect não é simplesmente “colocar REST na frente do COBOL”.

É criar uma fronteira arquitetural controlada.

De um lado:

HTTP
REST
JSON
OpenAPI
Cloud
Mobile
Web

Do outro:

COBOL
CICS
IMS
Db2
z/OS

No meio:

contrato
mapeamento
segurança
governança
observabilidade
integração

E aqui está talvez a lição mais importante para quem está começando.

Não despreze a aplicação antiga porque ela não fala JSON.

Ela pode carregar quarenta anos de conhecimento corporativo.

Também não force a aplicação moderna a aprender detalhes de mainframe que não lhe dizem respeito.

Coloque uma fronteira correta entre os dois mundos.

É para isso que arquiteturas de integração existem.

E quando alguém na reunião disser:

— Precisamos substituir COBOL porque o aplicativo mobile precisa usar REST...

Você pode sorrir discretamente, tomar um gole de café e pensar como Patrick Jane:

“Interessante. O suspeito parece culpado demais.”

Talvez COBOL não seja o problema.

Talvez a verdadeira pista esteja justamente na camada que faltava entre ele e o resto do mundo.

☕🧠🖥️

Easter egg final: se você chegou até aqui procurando Red John, talvez ele esteja escondido no único endpoint em produção que ninguém documentou, não possui throttling, aceita qualquer usuário autenticado e chama uma transação CICS que ninguém ousa alterar desde 1998.

Nesse caso, esqueça Patrick Jane.

Chame o sysprog.

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...