| Falando sobre o comando cics link |
🔥 Program Control Operation – LINK no CICS
☕ Midnight Lunch, stack limpo e um LINK mal feito
Todo mainframer raiz já ouviu (ou falou):
“Relaxa, é só um LINK.”
Até o dia em que esse “só um LINK” vira:
-
Loop infinito
-
Storage violation
-
Abend AEI0, ASRA ou o clássico APCT
Hoje vamos destrinchar o EXEC CICS LINK como gente grande, com história, prática, malícia técnica e aquele tempero Bellacosa.
🏛️ Um pouco de história: modularidade antes do hype
Antes de:
-
microservices
-
REST
-
gRPC
-
serverless
o CICS já fazia chamada síncrona entre programas, com passagem de parâmetros, controle transacional e retorno garantido.
O LINK nasceu para:
-
Modularizar aplicações
-
Reutilizar regras de negócio
-
Separar camadas (apresentação, lógica, acesso a dados)
📌 LINK é o “call stack corporativo” do mainframe.
🧠 Conceito fundamental (grave na testa)
LINK = chamada síncrona de programa dentro do mesmo task CICS
✔ Mesma UOW
✔ Mesmo Task Number
✔ Mesmo controle transacional
✔ Retorno garantido ao programa chamador
Se não volta, tem coisa errada 😈
🔗 O que é o LINK no CICS?
O EXEC CICS LINK transfere o controle:
-
Do programa chamador
-
Para um programa chamado
-
Passando um COMMAREA
Quando o programa chamado termina:
-
O controle volta automaticamente
-
O COMMAREA pode vir atualizado
🧾 Sintaxe básica
📌 Simples. Perigoso. Poderoso.
📦 COMMAREA – o contrato sagrado
O que é?
Área de memória compartilhada entre programas durante o LINK.
Regras não escritas (mas mortais):
-
Layout idêntico nos dois programas
-
Mesmo tamanho
-
Mesmo alinhamento
-
Mesmo entendimento semântico
🧨 1 byte errado = ASRA elegante.
🥊 LINK vs XCTL (clássico de entrevista)
| Critério | LINK | XCTL |
|---|---|---|
| Retorno | Sim | Não |
| Stack | Empilha | Substitui |
| Uso típico | Sub-rotina | Transferência de fluxo |
| Risco | Stack overflow | Perda de contexto |
📌 Se precisa voltar, é LINK. Se não, XCTL.
🛠️ Passo a passo mental (antes de usar LINK)
1️⃣ Preciso que o controle volte?
2️⃣ O COMMAREA está alinhado?
3️⃣ O programa chamado é reentrante?
4️⃣ Existe risco de loop (A chama B, B chama A)?
5️⃣ O LENGTH é compatível?
Se respondeu “não sei” para algum, pare tudo.
⚠️ Armadilhas clássicas (easter eggs mainframe)
🐣 LINK dentro de LINK dentro de LINK
→ Stack crescendo como fila de restaurante às 12h
🐣 COMMAREA reutilizada sem inicializar
→ Dado fantasma, bug intermitente, terror noturno
🐣 LINK para programa não definido
→ APCT no meio da tarde
🐣 LINK circular
→ Travamento silencioso e operador suando
🧪 LINK na prática (exemplo mental)
Programa A
-
Recebe dados da tela
-
Valida campos
-
Faz LINK para regra de negócio
Programa B
-
Recebe COMMAREA
-
Aplica cálculo
-
Atualiza DB2
-
Retorna status
📌 Isso é arquitetura em camadas antes de virar moda.
📚 Guia de estudo para dominar LINK
Estude profundamente:
-
COMMAREA vs CHANNEL/CONTAINER
-
Program Reentrancy
-
CICS Program Control
-
Transaction Scope
-
Abend codes (ASRA, AEI0, APCT)
📖 Manual essencial: CICS Application Programming Guide
🤓 Curiosidades de boteco mainframe
🍺 LINK já foi usado como “service call” antes do SOA
🍺 Existem sistemas com 30 níveis de LINK (sim, sobrevivem)
🍺 Muitos bugs só aparecem sob carga por causa de LINK mal desenhado
🍺 O CHANNEL/CONTAINER nasceu para salvar o mundo do COMMAREA gigante
💬 Comentário El Jefe Midnight Lunch
“LINK é educação.
Se você não respeita o contrato,
o CICS te educa com um abend.”
🚀 Aplicações reais hoje
-
Core bancário
-
Processamento de cartões
-
Seguros
-
Sistemas governamentais
-
Regras críticas reutilizáveis
LINK ainda é:
✔ rápido
✔ previsível
✔ seguro
✔ corporativo
🎯 Conclusão Bellacosa
O EXEC CICS LINK é simples só na aparência.
Quem domina:
-
Escreve sistemas limpos
-
Evita abends misteriosos
-
Constrói arquitetura durável
🔥 LINK não é atalho. É contrato.