Mostrar mensagens com a etiqueta automação. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta automação. Mostrar todas as mensagens

segunda-feira, 13 de outubro de 2014

Iniciação ao REXX – Quando o Mainframe Te Apresenta um Novo Amigo

 


Iniciação ao REXX – Quando o Mainframe Te Apresenta um Novo Amigo

“REXX não é moda. REXX é sobrevivência.”

Quem trabalha com z/OS, z/VM ou IBM Z cedo ou tarde chega a essa constatação:
não importa quantos produtos enterprise você tenha, sempre haverá aquele momento em que o problema é pequeno demais para COBOL, complexo demais para JCL e burocrático demais para justificar uma nova ferramenta.

É exatamente nesse espaço — invisível para muitos — que mora o REXX.

Subestimado, silencioso, quase sempre ignorado… até o dia em que você descobre que ele resolve 80% das dores do dia a dia com meia dúzia de linhas.

Este post é um convite:
👉 conhecer o REXX não como linguagem, mas como companheiro de trincheira no mainframe.



📜 Um pouco de história (porque nada no mainframe surge do nada)

O REXX (Restructured Extended Executor) nasceu em 1979, dentro da IBM, criado por Mike Cowlishaw.
A motivação era simples e genial:

Criar uma linguagem fácil de ler, difícil de quebrar e totalmente integrada ao sistema.

Enquanto o mundo brigava com sintaxe pesada, pontuação excessiva e códigos ilegíveis, o REXX nasceu com uma ideia revolucionária para a época:

  • tudo é string

  • tipagem dinâmica

  • sintaxe próxima do inglês

  • tolerância a erro humano

📌 Curiosidade:
REXX é mais antigo que Perl, Python e Ruby — e já fazia muita coisa que elas só popularizaram décadas depois.


🧠 REXX não vive sozinho: ambientes de processamento e comando

Aqui está o primeiro choque para quem vem de linguagens “tradicionais”:

👉 REXX não existe fora de um ambiente.

Antes de escrever código, você precisa entender onde ele roda e com quem ele conversa.

Ambientes de Processamento

  • TSO/E

  • ISPF

  • Batch TSO

  • Batch não-TSO

  • z/VM (CMS / CP)

O mesmo EXEC pode se comportar de forma totalmente diferente dependendo do ambiente.

📌 Easter egg de sobrevivência:

Se você não sabe em que ambiente está, o erro não é do REXX — é seu.


Ambientes de Comandos

REXX não executa comandos diretamente.
Ele endereça comandos a um ambiente específico.

address tso "listcat level('USER01')" address ispexec "display panel(MYPANEL)"

Isso explica por que REXX é tão poderoso:
ele fala a língua do sistema.


🧱 Fundamentos do REXX – Simples, mas não simplório

Filosofia da linguagem

  • Tudo é string

  • Conversão automática quando necessário

  • Pouca pontuação

  • Código legível

  • Menos regras, mais resultado

say 'Hello, Mainframe!'

Sem ponto e vírgula.
Sem BEGIN obrigatório.
Sem cerimônia.

📌 Curiosidade perigosa:
Variáveis não inicializadas não geram erro.
Elas retornam o próprio nome.
Ótimo para debug… péssimo se você não souber 😄


Entrada, saída e lógica

  • SAY → saída

  • PULL → entrada (stack)

  • IF / THEN / ELSE

  • DO / END

  • EXIT

Aqui o REXX começa a mostrar sua vocação: automatizar decisões, não apenas executar código.


🖥️ REXX e o Ambiente TSO – Onde a mágica começa

Com REXX você:

  • aloca datasets

  • consulta catálogos

  • automatiza comandos

  • elimina JCL desnecessário

address tso "allocate fi(arq1) da('user.test.ps') shr" address tso "listalc"

📌 Comentário Bellacosa:
REXX + TSO = menos JCL, menos erro, menos dor de cabeça.


📦 CLISTs x EXECs – O passado e o presente

CLIST fez história.
Mas o REXX fez melhor.

  • EXECs são mais poderosos

  • Mais legíveis

  • Mais fáceis de manter

  • Melhor integração

Entender a sequência de busca (SYSEXEC, SYSPROC…) é obrigatório.

📌 Easter egg clássico:
“EXEC não encontrado” quase sempre é DD errado, não código errado.


🔁 Programação REXX – Onde o iniciante vira sysprog

Aqui o REXX mostra que não é brinquedo:

  • Funções e subrotinas

  • Escopo de variáveis

  • DO composto

  • ITERATE e LEAVE

  • SELECT (case statement elegante)

  • SIGNAL e SIGNAL VALUE

  • INTERPRET (meta-programação!)

cmd = "say 'REXX é poderoso'" interpret cmd

📌 Comentário raiz:
INTERPRET é um sabre de luz.
Poderoso… mas não entregue para qualquer padawan.


🌳 Variáveis, Strings e o poder do PARSE

Stems – arrays antes dos arrays

nome.1 = 'Ana' nome.2 = 'João' nome.0 = 2

PARSE – o superpoder escondido

parse var linha campo1 ',' campo2

📌 Curiosidade:
PARSE elimina dezenas de IFs, SUBSTRs e gambiarras.


📂 EXECIO – O mini DFSORT do dia a dia

"EXECIO * DISKR ARQ1 (STEM LIN.)"

Com EXECIO você:

  • lê arquivos

  • grava datasets

  • processa linhas

  • automatiza relatórios

Tudo sem sair do REXX.


🧪 Depuração – Porque errar faz parte

REXX não te abandona quando algo dá errado:

  • TRACE

  • RC

  • SIGL

  • SOURCELINE

  • CONDITION

📌 Curiosidade histórica:
Debug nativo em REXX era luxo quando muitas linguagens nem sonhavam com isso.


⚙️ Batch, endereços e ambientes avançados

REXX roda:

  • em batch TSO

  • fora do TSO

  • em múltiplos ambientes de comando

say address()

📌 Comentário Bellacosa:

Antes de perguntar “por que falhou”, pergunte “onde estou rodando”.


🚀 Compilador REXX – Performance e proteção

Sim, REXX pode ser compilado:

  • melhora performance

  • protege código

  • usado em ambientes críticos

Mesmo compilado, ele não perde sua alma dinâmica.


☕ Conclusão – Por que REXX vira amigo

REXX não tenta competir com COBOL.
Não substitui Assembler.
Não briga com produtos enterprise.

Ele faz algo muito mais valioso:

👉 resolve problemas reais com o que já existe no sistema.

Quem domina REXX:

  • automatiza mais

  • depende menos

  • entende melhor o ambiente

  • sobrevive melhor no data center

No mainframe, o melhor amigo
não é o software mais caro…
é o que resolve às 3 da manhã.

Bem-vindo ao REXX.
Ele sempre esteve aí. ☕🖥️


quarta-feira, 3 de novembro de 2010

☕🔥 REXX Hardcore no z/OS — automação, controle e poder operacional

 

Bellacosa Mainframe apresenta o REXX

☕🔥 REXX Hardcore no z/OS — automação, controle e poder operacional  

Se você já salvou produção com um exec improvisado, já rasgou SDSF via ADDRESS, ou já ouviu

“isso dá pra automatizar em REXX, né?”
então puxa a cadeira.
Aqui é REXX técnico, sem verniz didático e com cheiro de madrugada.


🕰️ Histórico & Origem — por que o REXX virou arma de produção

O REXX (Restructured Extended Executor) nasce na IBM nos anos 80 com uma missão clara:

  • Substituir JCL “verboso”

  • Padronizar scripts

  • Criar uma linguagem legível, extensível e integrada ao sistema

Ele não foi feito para ser “bonito”.
Foi feito para controlar ambiente.

Verdade histórica:

REXX não é linguagem de apoio — é linguagem de governo operacional.


🧠 Conceito de Ambiente de Processamento

REXX não executa no vácuo.
Ele sempre roda dentro de um ambiente:

  • TSO/E

  • Batch

  • SDSF

  • ISPF

  • CICS (indiretamente)

  • Programas externos

Cada ambiente define:

  • Comandos válidos

  • RC interpretado

  • Recursos disponíveis

  • Permissões RACF

🔥 Easter egg:
O mesmo EXEC pode funcionar em TSO e falhar em Batch sem mudar uma linha.


🧩 Fundamentos da Linguagem — simples na superfície, profunda no núcleo

Sintaxe & Elementos

  • Tipagem dinâmica

  • Strings como cidadão de primeira classe

  • Sem declaração obrigatória

  • Case-insensitive (armadilha clássica)

📌 Exemplo:

parse upper arg parm1 parm2 if parm1 = '' then exit 8

Comentário ácido:
REXX perdoa erro demais — e isso cobra seu preço em produção.


🏗️ Estrutura de um Programa REXX

Todo EXEC sério tem:

  1. Identificação

  2. Validação de ambiente

  3. Tratamento de RC

  4. Controle de erro

  5. Cleanup

📌 Exemplo base:

/* REXX */ signal on error signal on failure signal on syntax address tso "ALLOC FI(IN) DA('DATASET') SHR" ... exit 0

🔥 Veterano sabe:
EXEC sem SIGNAL ON é convite ao caos.


🧮 Estrutura de Dados — tabelas na memória

REXX não tem array clássico.
Tem stem variables.

tab.1 = 'A' tab.2 = 'B' tab.0 = 2

Curiosidade:
Stem mal controlado vira memory leak conceitual.


📂 Acesso a Arquivos & Geração de Relatórios

  • ALLOC / FREE

  • EXECIO DISKR / DISKW

  • Geração de relatórios spoolados

  • Integração com SORT

📌 Exemplo:

"EXECIO * DISKR IN (STEM L.)" do i=1 to L.0 say L.i end

🔥 Easter egg:
EXECIO ignora erro… até você checar o RC.


🔃 Classificação & Manipulação de Dados

  • SORT via IDCAMS

  • SORT via ICETOOL

  • Manipulação em memória (lento)

  • Pipeline híbrido REXX + SORT

Regra de produção:

Se precisa ordenar muito, não é REXX — é SORT.


🗂️ Acesso a Diretório de PDS

REXX + ISPF services:

  • LMDINIT

  • LMMLIST

  • LMCLOSE

📌 Exemplo:

address ispexec "LMINIT DATAID(DID) DATASET('MY.PDS')" "LMMLIST DATAID(DID) OPTION(LIST)"

🔥 Veterano:
ISPF services dão poder… e risco.


🧑‍💻 Interatividade com Usuário (TSO)

  • Pseudo-conversational

  • Command-level

  • SAY / PULL

  • Mensagens controladas

Fofoquice:
Interface feia, mas resolve crise em minutos.


🧪 Modos de Execução REXX

🟢 REXX Linha de Comando (Online)

  • Interativo

  • Debug rápido

  • Dependente de perfil

🟡 REXX Batch Script (Interpretado)

  • Executa via IKJEFT01

  • Dependente de ambiente

  • Mais flexível

🔴 REXX Batch Compilado

  • Performance superior

  • RC previsível

  • Menos tolerante a erro

  • Exige processo de build

🔥 Script vs Compilado:

Interpretado é agilidade.
Compilado é confiabilidade.


🔐 REXX + RACF

REXX não ignora segurança:

  • Herda permissões do usuário

  • Pode consultar via RACROUTE (indireto)

  • Controla acesso via classes

Verdade dura:
EXEC com SPECIAL é bomba com pavio curto.


🗄️ REXX + DB2

  • DSNREXX

  • SQL dinâmico

  • RC + SQLCODE + SQLSTATE

  • Automação de consultas e relatórios

📌 Exemplo:

ADDRESS DSNREXX "EXECSQL SELECT COUNT(*) INTO :CNT FROM SYSIBM.SYSTABLES"

🔥 Easter egg:
SQLCODE ignorado vira incidente invisível.


🔀 ADDRESS — o coração da integração

ADDRESS muda o destino dos comandos:

  • TSO

  • ISPEXEC

  • SDSF

  • CONSOLE

  • DSNREXX

☕🔥 Regra sagrada:

Quem domina ADDRESS domina o sistema.


🔢 Return Code (RC) — o idioma da produção

  • RC ≠ erro sempre

  • RC precisa ser interpretado

  • Padronização é vital

if rc > 4 then exit rc

🔥 Veterano:
RC não tratado é mentira operacional.


📘 Programa do Curso — visão hardcore

Estrutura Geral / Labs

  • Ambiente restritivo

  • Casos reais

  • Incidentes simulados

Instruções REXX

  • IF, DO, SELECT

  • SIGNAL, EXIT

  • PARSE

Funções Internas / Sub-rotinas

  • Modularização

  • Reuso

  • Controle de escopo

Comandos REXX

  • SAY, PULL, TRACE

  • QUEUE / PULL

  • EXECIO

Funções TSO / CONSOLE

  • WTO

  • MODIFY

  • DUMP

  • SDSF

INTERPRET (🔥 perigoso)

  • Execução dinâmica

  • Flexibilidade extrema

  • Risco máximo

Comentário ácido:

INTERPRET é poder absoluto — use sóbrio.


🥚 Easter Eggs & Fofoquices REXX

  • Todo ambiente tem um EXEC “salvador”

  • Sempre existe um REXX sem comentários rodando há anos

  • O melhor REXX é o que não precisa ser explicado

  • Debug começa com TRACE ?R


☕🔥 Conclusão — Manifesto El Jefe REXX

REXX não é:

  • Script simples

  • Linguagem de iniciante

  • Alternativa ao COBOL

REXX é:

  • Cola do z/OS

  • Automação estratégica

  • Ferramenta de sobrevivência em produção

☕🔥 Quem domina REXX,
não programa apenas —
orquestra o mainframe.