quinta-feira, 10 de novembro de 2011

🔥 Program Control Operation – LINK no CICS

 

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

EXEC CICS LINK PROGRAM('PGM002') COMMAREA(WS-COMMAREA) LENGTH(LEN) END-EXEC.

📌 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érioLINKXCTL
RetornoSimNão
StackEmpilhaSubstitui
Uso típicoSub-rotinaTransferência de fluxo
RiscoStack overflowPerda 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.


Sem comentários:

Enviar um comentário