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

domingo, 21 de dezembro de 2025

📦 O que é REXX Data Stack

 


📦 O que é REXX Data Stack

📌 Conceito básico

O Data Stack é uma fila (stack/queue) de dados em memória, mantida pelo interpretador REXX, usada para:

Trocar dados entre comandos, programas e o próprio REXX, sem usar datasets.

Ele funciona como um buffer temporário de linhas.


🧠 Modelo mental simples

Imagine o Data Stack como:

  • Uma caixa de mensagens

  • Onde você empilha (PUSH) ou enfileira (QUEUE) dados

  • E depois retira (PULL / PARSE PULL)

📌 Muito parecido com:

  • STDIN / STDOUT

  • Pipe de Unix

  • Buffer de mensagens




🔁 LIFO vs FIFO

O Data Stack suporta dois comportamentos:

ComandoComportamento
PUSHLIFO (último a entrar, primeiro a sair)
QUEUEFIFO (primeiro a entrar, primeiro a sair)

🔹 Comandos principais do Data Stack

1️⃣ PUSH – empilha no topo

PUSH 'LINHA1' PUSH 'LINHA2' PULL x say x /* LINHA2 */

2️⃣ QUEUE – coloca no fim da fila

QUEUE 'LINHA1' QUEUE 'LINHA2' PULL x say x /* LINHA1 */

3️⃣ PULL / PARSE PULL – retira da stack

PARSE PULL a b c

📌 Data Stack x Variáveis

AspectoVariáveisData Stack
EstruturaEscalarFila
OrdemFixaFIFO / LIFO
Uso típicoLógicaComunicação
PersistênciaApenas no scriptPode cruzar comandos

🧩 Integração com comandos do sistema

Exemplo clássico – capturar saída de comando TSO

ADDRESS TSO "LISTDSI 'USER.TEST'" PARSE PULL msg say msg

📌 O comando escreve no Data Stack
📌 O REXX lê do Data Stack


🔄 Stacks múltiplas (avançado)

REXX permite criar pilhas separadas:

ComandoFunção
NEWSTACKCria stack isolada
DELSTACKRemove stack

Exemplo

NEWSTACK QUEUE 'TEMP' PULL x say x DELSTACK

💡 Essencial para:

  • Macros ISPF

  • SYSREXX

  • Scripts grandes


🧠 Uso real no mainframe

✔ Capturar saída de:

  • TSO

  • ISPF

  • SDSF

  • OPERCMDS

✔ Passar dados entre:

  • REXX ↔ COBOL

  • REXX ↔ utilitários

✔ Evitar datasets temporários


⚠️ Erros clássicos (Easter Eggs 🥚)

❌ Esquecer de limpar stack
❌ Misturar PUSH e QUEUE sem critério
❌ Não usar NEWSTACK em macros
❌ Ler stack vazia (gera valores inesperados)


📋 Checklist rápido

  • Sei se preciso FIFO ou LIFO?

  • Stack está isolada (NEWSTACK)?

  • Stack está limpa antes de sair?

  • Uso PARSE PULL corretamente?


🧠 Frase final estilo Bellacosa Mainframe

Se você entende o Data Stack, você entende o REXX.
Ele é a ponte entre comandos, programas e o sistema.

 

quarta-feira, 17 de dezembro de 2025

📌 O que é STACK em REXX?

 


📌 O que é STACK em REXX?

Em REXX, STACK é uma pilha (fila LIFO/FIFO) de linhas de texto usada para:

  • Passar dados entre programas

  • Simular entrada padrão (PULL)

  • Trocar informações com JCL, TSO e batch

  • Comunicação entre execs

👉 Pense na STACK como um buffer de entrada/saída em memória.



1️⃣ STACK ≠ variável

A STACK:

  • Não é uma variável

  • Não precisa ser declarada

  • É global ao exec

  • Armazena linhas de texto

Ela é usada automaticamente por:

  • PULL

  • PARSE PULL

  • Alguns comandos de host


2️⃣ Comandos principais da STACK

📤 PUSH

Coloca uma linha no topo da pilha (LIFO).

PUSH 'linha 1' PUSH 'linha 2'

Ordem de saída:

linha 2 linha 1

📥 QUEUE

Coloca uma linha no final da fila (FIFO).

QUEUE 'linha 1' QUEUE 'linha 2'

Ordem de saída:

linha 1 linha 2

📄 PULL

Lê a próxima linha da STACK.

PULL dado

Se a STACK estiver vazia:

  • Em TSO → lê do terminal

  • Em batch → lê de SYSTSIN

  • Em SYSREXX → comportamento depende do ambiente


3️⃣ Diferença clara: PUSH x QUEUE

ComandoTipoUso típico
PUSHPilha (LIFO)Processamento reverso
QUEUEFila (FIFO)Simular input sequencial
PULLLeituraConsome a STACK

4️⃣ Exemplo simples e didático

/* REXX */ QUEUE 'primeiro' QUEUE 'segundo' QUEUE 'terceiro' PULL a PULL b PULL c SAY a SAY b SAY c

Saída:

primeiro segundo terceiro

5️⃣ STACK em Batch (uso real)

Em batch, a STACK é fundamental.

Exemplo: simular entrada para um programa

QUEUE 'MATH1 10 20' QUEUE 'exit' ADDRESS TSO CALL 'PROGCOB'

O COBOL lê como se fosse input real.


6️⃣ STACK + EXECIO (padrão profissional)

'EXECIO * DISKR INPUT (STEM in.' DO i = 1 TO in.0 QUEUE in.i END DO WHILE QUEUED() > 0 PULL linha SAY linha END

7️⃣ Função QUEUED()

Retorna quantas linhas existem na STACK.

IF QUEUED() = 0 THEN SAY 'Stack vazia'

💡 Boa prática: sempre testar antes de PULL.


8️⃣ STACK como comunicação entre execs

QUEUE 'valor1' QUEUE 'valor2' CALL OUTROEXEC PULL resposta

O outro exec pode consumir e devolver dados pela STACK.


9️⃣ Erros comuns (produção)

❌ Usar PULL sem saber de onde vem a entrada
❌ Deixar lixo na STACK
❌ Misturar PUSH e QUEUE sem critério
❌ Assumir que STACK sempre tem dados

✔ Sempre limpar ou controlar a STACK


🔟 Regra de ouro

STACK em REXX é entrada padrão controlável.
Quem domina STACK domina automação batch.


🧠 Frase para memorizar

QUEUE escreve o roteiro,
PUSH muda a ordem,
PULL executa a cena.

 

sexta-feira, 9 de dezembro de 2011

🔥 Understanding QUEUE, TSQ e TDQ no CICS

 

Cics filas TSQ e TDQ passagem de dados

🔥 Understanding QUEUE, TSQ e TDQ no CICS

 


☕ Midnight Lunch, fila cheia e CICS aberto

Todo mainframer já passou por isso: programa CICS travado, usuário reclamando, operador olhando o CEMT, e alguém solta a clássica pergunta:

“Isso aí não é fila? TSQ ou TDQ?”

E o silêncio toma conta do data center.
Vamos resolver isso de vez, no estilo Bellacosa: com história, conceito, prática, fofoca técnica e alguns easter eggs de quem já levou AEI0 na testa.


🏛️ Um pouco de história: filas antes da nuvem

Antes de Kafka, Redis, RabbitMQ e afins, o CICS já sabia lidar com filas.
Desde os anos 70, IBM introduziu mecanismos simples, rápidos e extremamente eficientes para armazenar dados temporários ou sequenciais durante a execução de transações online.

Esses mecanismos são chamados genericamente de QUEUE, mas na prática se dividem em:

  • TSQ – Temporary Storage Queue

  • TDQ – Transient Data Queue

Ambos são filas, mas com propósitos, comportamentos e riscos bem diferentes.


🧠 Conceito-chave (guarde isso como mantra)

TSQ = memória temporária, aleatória, flexível
TDQ = fluxo sequencial, estilo arquivo/log, orientado a eventos

Se você entendeu isso, já está 50% certificado CICS 😄


📦 TSQ – Temporary Storage Queue

O que é?

Uma fila temporária de armazenamento usada por programas CICS para guardar dados durante ou entre transações.

Ela pode residir:

  • Em memória (MAIN)

  • Em disco (AUX – VSAM)

Características

✔ Acesso direto por item
✔ Pode ler, escrever, atualizar e apagar
✔ Pode sobreviver ao fim da transação
✔ Pode ser compartilhada entre programas

Comandos principais

EXEC CICS WRITEQ TS EXEC CICS READQ TS EXEC CICS DELETEQ TS

Exemplo mental (Bellacosa way)

Imagine um post-it compartilhado entre programas CICS:

  • Programa A escreve dados

  • Programa B lê

  • Programa C atualiza

  • Programa D apaga

Tudo rápido, sem I/O pesado.


⚠️ Armadilhas clássicas (easter eggs)

  • TSQ esquecida = vazamento de storage

  • Nome dinâmico mal feito = fila órfã

  • Volume alto em MAIN = SOS no CEMT I TASK

📌 Dica de ouro: sempre pense em DELETEQ TS.


🧾 TDQ – Transient Data Queue

O que é?

Uma fila sequencial, orientada a eventos, muito usada como:

  • Log

  • Interface com batch

  • Comunicação com sistemas externos

Tipos de TDQ

  1. Intrapartition TDQ

    • Dentro do CICS

    • Uma única partição

  2. Extrapartition TDQ

    • Fora do CICS

    • Geralmente associada a um dataset sequencial


Características

✔ Escrita sequencial
✔ Leitura normalmente sequencial
✔ Ideal para log e integração
❌ Não permite acesso aleatório
❌ Não é feita para update

Comandos principais

EXEC CICS WRITEQ TD EXEC CICS READQ TD

Exemplo prático

  • Transação online grava eventos em TDQ

  • Job batch lê essa TDQ depois

  • Processamento assíncrono elegante, old school e eficiente

📌 Isso é o avô espiritual do streaming moderno.


🥊 TSQ vs TDQ – Luta no octógono

CritérioTSQTDQ
TipoTemporáriaSequencial
AcessoAleatórioSequencial
Uso típicoWork area, cacheLog, interface
PerformanceMuito altaAlta
PersistênciaConfigurávelDepende do tipo
Risco comumStorage leakFila parada

🛠️ Passo a passo mental (como escolher)

1️⃣ Preciso acessar dados fora de ordem? → TSQ
2️⃣ Preciso registrar eventos/logs? → TDQ
3️⃣ Comunicação com batch? → TDQ extrapartition
4️⃣ Compartilhar estado entre transações? → TSQ


📚 Guia de estudo para mainframers

Se você quer dominar filas no CICS, estude:

  • Storage Management (MAIN vs AUX)

  • CEMT I TSQUEUE / TDQUEUE

  • Recovery e rollback

  • CICS Logging e Journals

  • Integração TSQ + MQ (sim, isso acontece)

📖 Manual-chave: CICS Application Programming Guide


🤓 Curiosidades de boteco mainframe

🍺 TSQ já foi usada como cache improvisado antes de DB2
🍺 TDQ era chamada de “log dos pobres” nos anos 80
🍺 Muitos sistemas críticos ainda rodam com TDQ + batch noturno
🍺 Já existiram sistemas bancários inteiros baseados em TSQ (não recomendado 😅)


💬 Comentário El Jefe Midnight Lunch

“Enquanto o mundo redescobre filas com nomes modernos,
o CICS continua servindo café quente, confiável e previsível
desde antes de você nascer.”


🚀 Aplicações modernas (sim, ainda hoje)

  • Core bancário

  • Sistemas de cartão

  • Logs de auditoria

  • Integração com MQ e APIs

  • Work areas de alta performance


🎯 Conclusão Bellacosa

TSQ e TDQ não são relíquias.
São armas cirúrgicas, feitas para problemas específicos.

Quem sabe usar:

  • Escreve código mais rápido

  • Evita gargalos

  • Dorme tranquilo quando o CICS sobe

🔥 CICS não é velho. Velho é quem não entende fila.