Translate

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

domingo, 21 de junho de 2026

Natural x CICS BMS para Desenvolvedores COBOL

 

Bellacosa Mainframe e uma breve comparação entre Natural e CICS BMS

☕ Um Café no Bellacosa Mainframe

Natural x CICS BMS para Desenvolvedores COBOL

Entendendo duas filosofias diferentes de construir aplicações Online no Mainframe

Salve jovem Padawan.

Uma das dúvidas mais comuns de quem começa no mundo Mainframe é:

Se eu sei desenvolver online em Natural, já sei desenvolver em CICS?

A resposta curta é:

Não.

A resposta longa é:

Você conhece o objetivo, mas não conhece o mecanismo.

Natural e CICS possuem filosofias completamente diferentes para construir aplicações online.


A grande diferença

Natural é uma plataforma completa.

CICS é um monitor transacional.

Podemos pensar da seguinte maneira:

NaturalCICS
FrameworkMonitor Transacional
IDE integradaFerramentas separadas
Tela automáticaBMS
Segurança integradaRACF/CICS
Navegação nativaProgramada
Dicionário PredictCopybooks
Estado mantido pelo NaturalCOMMAREA
Desenvolvimento RADDesenvolvimento explícito

Arquitetura Natural

Em Natural normalmente temos:

Usuário

↓

Terminal 3270

↓

Natural Runtime

↓

Programa Natural

↓

Predict

↓

Adabas

Natural faz praticamente tudo.

O desenvolvedor apenas escreve:

INPUT

'CPF' CPF

'Nome' NOME


END-INPUT

Pronto.

Tela criada.


Arquitetura CICS

No CICS:

Usuário

↓

3270

↓

BMS

↓

MAPSET

↓

COBOL

↓

COMMAREA

↓

DB2


Tudo é responsabilidade do desenvolvedor.


Natural é quase um framework

Natural lembra.

Django

Rails

PowerBuilder

Oracle Forms


Exemplo Natural


INPUT USING MAP 'CLI001'

END-INPUT



Natural já sabe.

Mapa.

Campos.

Validação.

Cursor.

Ajuda.

PF Keys.

Tudo praticamente pronto.


CICS é uma caixa de ferramentas

CICS fornece:

SEND

RECEIVE

LINK

RETURN

HANDLE

Mas você constrói.


Exemplo


SEND MAP


RECEIVE MAP


VALIDA


CONSULTA DB2


SEND


RETURN



Predict

Aqui está uma grande diferença.


Natural usa Predict.

Predict é um catálogo.

Um dicionário corporativo.


Armazena.

Campos

Programas

Mapas

Arquivos

Views

Documentação

Relacionamentos


Exemplo


CLIENTE


CPF


NOME


ENDERECO


LIMITE




Natural gera automaticamente.

Campos.

Mapas.

Views.

Documentação.


Exemplo


1 CPF

1 NOME

1 CIDADE


Tudo centralizado.


CICS não possui Predict

No CICS.

Criamos.

Copybooks.

Layouts.

BMS.

Manualmente.


Exemplo


COPY CLIENTE.


COPY CLIMAP.




Construção de Menus

Natural

Muito simples.


MENU

1 Consulta

2 Inclusao

3 Alteracao



CICS

Criamos.

MAPSET.

COBOL.

Fluxo.

PF Keys.


Exemplo

MENU01


1 Consultar


2 Incluir


3 Alterar



PF3



Hierarquia de programas

Natural

Quase sempre.

Programa chama programa.



MENU


↓

CLIENTE


↓

CONSULTA


↓

ALTERA


Natural controla.


No CICS.

Mais cuidado.


Podemos usar.

LINK

XCTL

START


LINK

Retorna.


EXEC CICS LINK

PROGRAM('CLI002')

END-EXEC



XCTL

Não retorna.



EXEC CICS XCTL

PROGRAM('MENU')


END-EXEC



Como segregar funções

Boa prática.


MENU

Só navegação.


CLIENTE

Negócio.


DBCLI

DB2.


TELA

BMS.


UTIL

Rotinas.


Exemplo



MENU0001



CLI0001



DBCLI01



UTILCPF



MSGERRO




Segurança

Natural

Muito integrada.


Natural Security.

NSC.

Predict.

Menus.

Perfis.


Exemplo

Usuário João.

Pode.

Consultar.

Não alterar.


Natural faz.


No CICS.

Usamos.

RACF.


Transação.

Programa.

Arquivo.

Fila.

TSQ.

TDQ.


Exemplo


CLI1


CONS



ALT1


ADM1




RACF controla.


Navegação

Natural

Automática.


ENTER.

PF3.

PF12.


Tudo tratado.


CICS.

Manual.


Precisamos verificar.


COPY DFHAID





EVALUATE EIBAID



WHEN DFHPF3


PERFORM SAIR



WHEN DFHPF5


PERFORM REFRESH


END-EVALUATE



BMS

Natural

Mapas do Natural.


CICS

BMS.


MAP

Tela.


MAPSET

Conjunto de telas.


Exemplo



LOGIN



MENU



CLIENTE



CONSULTA



HELP




Mapset.


DFHMSD




Tela.


DFHMDI




Campo.


DFHMDF




PF Keys

Muito importante.


PF1

Ajuda


PF3

Sair


PF5

Atualizar


PF7

Anterior


PF8

Próximo


PF12

Cancelar


No terminal 3270

Emuladores modernos.

PCOMM.

Rocket.

Vista.

x3270.


Teclas mapeadas.


Exemplo.

F3

PF3


F7

PF7


Shift+F12

PF24


Clear

PA1


Attention

PA2


SYSREQ

PA3


Comportamento curioso

No 3270.

ENTER.

Não é.

Carriage Return.


É um.

AID.

Attention Identifier.


CICS recebe.


EIBAID



Natural trata.

Automaticamente.


Uma analogia moderna

Natural é parecido com:

Oracle Forms

PowerBuilder

GeneXus


CICS é parecido com.

HTML

CSS

Javascript

Backend Java


Natural oferece produtividade.

CICS oferece controle.


O que é melhor?

Depende.

Natural é excelente para:

Desenvolvimento rápido.

CRUD.

Adabas.


CICS é excelente para:

Grandes volumes.

Flexibilidade.

Integração.

APIs.

DB2.

MQ.


Minha recomendação para um COBOL Júnior

Aprenda primeiro:

  • BMS

  • SEND/RECEIVE

  • DFHAID

  • COMMAREA

  • Pseudo-conversação

  • LINK/XCTL

  • TSQ

  • CEDF

Depois estude:

  • Natural

  • Predict

  • Adabas

  • Natural Security

Quando você conhecer os dois mundos, perceberá algo interessante:

Natural tenta esconder a complexidade do CICS.

CICS mostra explicitamente como as engrenagens funcionam.

E, para quem deseja realmente entender os bastidores das aplicações bancárias e seguradoras do IBM Z, estudar CICS/BMS costuma ser uma excelente forma de aprender como um sistema transacional corporativo é construído desde a fundação.

sábado, 20 de junho de 2026

☕ LAB - CICS BMS para Padawans

 

Bellacosa Mainframe laboratorio pratico CICS BMS

☕ LAB Bellacosa Mainframe

CICS BMS para Padawans

Bem-vindo ao Laboratório Bellacosa Mainframe – CICS BMS para Padawans. Este conjunto de exercícios foi projetado para conduzir um desenvolvedor COBOL iniciante por uma jornada gradual de aprendizado, partindo da criação do primeiro MAPSET BMS até a construção de uma pequena aplicação pseudo-conversacional semelhante às encontradas em bancos, seguradoras e grandes empresas. 

O objetivo não é apenas aprender a sintaxe das macros DFHMSD, DFHMDI e DFHMDF, mas desenvolver a forma de pensar utilizada por desenvolvedores CICS experientes.

Ao longo dos laboratórios, o aluno será estimulado a raciocinar em termos de interface, estado, fluxo de navegação, persistência temporária de informações e interação entre usuário e aplicação. Inicialmente, o foco será compreender como uma tela 3270 é construída, como os campos são definidos, protegidos ou liberados para edição e como o BMS abstrai as características do terminal. 

Em seguida, serão introduzidos os conceitos de SEND MAP, RECEIVE MAP, EIBAID, DFHAID, posicionamento dinâmico de cursor e tratamento de teclas funcionais.

Nos desafios mais avançados, espera-se que o aluno seja capaz de projetar uma aplicação utilizando pseudo-conversação, COMMAREA, paginação, mensagens de erro e validações, adotando uma abordagem semelhante à empregada em sistemas corporativos reais. 

Mais importante do que memorizar comandos é desenvolver o raciocínio arquitetural necessário para compreender como aplicações CICS foram concebidas, evoluíram ao longo das décadas e continuam sustentando milhões de transações críticas diariamente no ecossistema IBM Z.

10 Laboratórios Práticos de BMS


LAB01 – Meu Primeiro BMS

Objetivo:

Criar o primeiro MAPSET.

Resultado esperado:

HELLO BMS

PF3=Sair

Atividades

Criar um DFHMSD

Criar um DFHMDI

Criar dois DFHMDF

Gerar Physical Map

Gerar Symbolic Map


Solução

HELLO DFHMSD TYPE=&SYSPARM,
       LANG=COBOL,
       MODE=OUT,
       TIOAPFX=YES

TELA1 DFHMDI SIZE=(24,80)

      DFHMDF POS=(5,25),
              LENGTH=10,
              INITIAL='HELLO BMS',
              ATTRB=(PROT,BRT)

      DFHMDF POS=(22,2),
              LENGTH=8,
              INITIAL='PF3=Sair',
              ATTRB=(ASKIP)

      DFHMSD TYPE=FINAL

END

LAB02 – Criando Campo de Entrada

Objetivo

Campo editável.


Resultado

Nome :

______________

Atividades

Adicionar campo input

Posicionar cursor

Testar MDT


Solução

NOME DFHMDF POS=(5,15),
              LENGTH=30,
              ATTRB=(UNPROT,IC)

LAB03 – Campos Protegidos

Objetivo

Criar labels.


Resultado

CPF:


Cidade:


Email:

Solução

DFHMDF POS=(1,1),
        LENGTH=4,
        INITIAL='CPF:',
        ATTRB=(ASKIP)

LAB04 – Tela Cadastro Cliente

Objetivo

Montar tela completa.


Resultado

Codigo:


Nome:


CPF:


Cidade:


Telefone:



PF3


PF5


ENTER

Atividades

Criar 5 campos

Criar mensagens

Criar PF Keys


Solução

CODIGO DFHMDF
        POS=(5,15),
        LENGTH=6,
        ATTRB=(UNPROT,IC)



CPF DFHMDF
        POS=(7,15),
        LENGTH=11,
        ATTRB=(UNPROT,NUM)

LAB05 – SEND MAP

Objetivo

Mostrar tela.


Atividades

Criar programa COBOL

Executar SEND


Solução

EXEC CICS SEND MAP

MAP('TELA01')

MAPSET('CLIMAP')

ERASE

FREEKB

END-EXEC.

LAB06 – RECEIVE MAP

Objetivo

Receber dados.


Atividades

Capturar nome.

Capturar CPF.


Solução

EXEC CICS RECEIVE

MAP('TELA01')

MAPSET('CLIMAP')

INTO(TELA01I)

END-EXEC.

LAB07 – Tratando ENTER e PF3

Objetivo

Usar DFHAID.


Atividades

Copy DFHAID

Verificar tecla


Solução

COPY DFHAID.



EVALUATE EIBAID


WHEN DFHENTER

PERFORM PROCESSA



WHEN DFHPF3

PERFORM SAIR



END-EVALUATE

LAB08 – Cursor Dinâmico

Objetivo

Cursor em campo inválido.


Exemplo

CPF inválido


Cursor volta CPF

Solução

MOVE -1 TO CPFL



EXEC CICS SEND

CURSOR

END-EXEC

LAB09 – Pseudo Conversação

Objetivo

Implementar COMMAREA.


Atividades

Salvar contexto

Retornar transação


Solução

EXEC CICS RETURN


TRANSID('CLI1')


COMMAREA(WS-COMM)


LENGTH(100)


END-EXEC.

Primeira vez

IF EIBCALEN = ZERO

PERFORM PRIMEIRA-VEZ

END-IF.

LAB10 – Mini Sistema Bancário

Objetivo

Criar aplicação real.


Funcionalidades

Consultar Cliente

Cadastrar

Alterar

Excluir

Paginar

PF7

PF8

PF3


Tela


==================================

CLIENTES


Codigo


Nome


CPF



PF3=Sair

PF5=Limpar

PF7=Anterior

PF8=Próximo


==================================


Desafio Extra

Implementar:

MAPFAIL

HANDLE CONDITION

HANDLE AID

FSET

FRSET

DATAONLY

MAPONLY


Gabarito Esperado

Ao final dos 10 labs o aluno deverá dominar:

✅ DFHMSD

✅ DFHMDI

✅ DFHMDF

✅ SEND MAP

✅ RECEIVE MAP

✅ DFHAID

✅ EIBAID

✅ CURSOR

✅ MDT

✅ FSET

✅ COMMAREA

✅ Pseudo-conversação

✅ CEDA

✅ CEMT

✅ INSTALL

✅ BMS Physical

✅ Symbolic Maps


🏆 Desafio Bellacosa Mainframe (Boss Fight)

Construa uma aplicação semelhante a um sistema bancário contendo:

  • Login

  • Menu Principal

  • Consulta Cliente

  • Inclusão

  • Alteração

  • Exclusão

  • Paginação PF7/PF8

  • Help PF1

  • Mensagens de erro

  • COMMAREA

  • TSQ para paginação

  • DB2 (simulado)

  • CEDF para debug

Se conseguir completar este laboratório, você estará muito próximo do nível esperado de um Desenvolvedor COBOL/CICS Júnior pronto para atuar em projetos corporativos IBM Z.


quinta-feira, 1 de maio de 2025

☕💣🚀 PADAWAN, MODERNIZAR O CICS NÃO É JOGAR COBOL FORA. É ENSINAR UMA LENDA DE 50 ANOS A FALAR REST, JAVA E CLOUD!

Bellacosa Mainframe introducao a modernizacao do cics mainframe seculo xxi


☕💣🚀 PADAWAN, MODERNIZAR O CICS NÃO É JOGAR COBOL FORA. É ENSINAR UMA LENDA DE 50 ANOS A FALAR REST, JAVA E CLOUD!

Durante décadas, muita gente repetiu a mesma profecia:

"O Mainframe vai acabar."

Enquanto isso, silenciosamente, o CICS continuou processando bilhões de transações por dia.

E aqui está a grande ironia tecnológica da nossa época:

As empresas que tentaram substituir completamente seus sistemas CICS descobriram que recriar 40 anos de regras de negócio é muito mais difícil do que parece.

Foi então que surgiu uma pergunta mais inteligente:

E se, em vez de substituir, nós modernizarmos?

É exatamente isso que o CICS moderno faz.


O PRIMEIRO ERRO: CONFUNDIR MODERNIZAÇÃO COM REESCRITA

Quando alguém fala em modernização, muitos imaginam:

COBOL -> Java
Mainframe -> Cloud
3270 -> Browser

Mas o CICS moderno propõe algo diferente:

COBOL + Java
Mainframe + Cloud
3270 + REST
VSAM + APIs

A IBM chama isso de:

Hybrid Cloud

Ou seja:

O sistema continua executando onde sempre funcionou, mas agora conversa com aplicações modernas.


PASSO 1 – ENTENDER O QUE VOCÊ POSSUI

Antes de modernizar qualquer aplicação CICS, faça um inventário.

Identifique:

  • Transações

  • Programas COBOL

  • Arquivos VSAM

  • DB2

  • COMMAREAs

  • Web Services existentes

  • Dependências

Perguntas importantes:

  • O sistema ainda usa 3270?

  • Existem APIs?

  • Existe documentação?

  • Existe código-fonte?

Acredite:

Nem sempre existe.

E sim...

Existem sistemas produtivos em que o fonte original desapareceu há décadas.


PASSO 2 – SEPARAR APRESENTAÇÃO E NEGÓCIO

A arquitetura clássica ensinada pela IBM possui:

Presentation Layer
Business Logic Layer
Data Services Layer

Exemplo clássico:

PAYPGM
    |
    v
PAYBUS
    |
    v
VSAM

O PAYPGM fala com o usuário.

O PAYBUS contém as regras de negócio.

Quando isso já existe, a modernização fica muito mais simples.


PASSO 3 – TRANSFORMAR O NEGÓCIO EM SERVIÇO

O erro mais comum é tentar modernizar a tela.

A tela não tem valor.

O valor está na regra de negócio.

Por isso o melhor caminho normalmente é:

Browser
    |
REST API
    |
PAYBUS
    |
VSAM

Observe:

O COBOL continua vivo.

Apenas ganhou uma nova interface.


PASSO 4 – APOSENTAR A COMMAREA

A COMMAREA foi uma revolução.

Mas ela possui um limite:

32767 bytes

Isso era enorme em 1975.

Hoje não é.

A solução moderna:

Channels
Containers

Antes:

EXEC CICS LINK
     COMMAREA(...)
END-EXEC

Depois:

EXEC CICS LINK
     CHANNEL('PAYROLL')
END-EXEC

Benefícios:

  • Sem limite prático

  • Dados organizados

  • Menos copybooks gigantes

  • Melhor integração


PASSO 5 – INTRODUZIR JAVA SEM TRAUMA

Aqui surge a pergunta que assombra muitos programadores COBOL:

"Precisamos reescrever tudo em Java?"

Não.

E provavelmente você não deveria.

O CICS permite executar Java dentro do próprio ambiente.

Arquitetura:

CICS
   |
JVM Server
   |
Liberty
   |
Java

Agora o cenário fica interessante:

COBOL
   |
LINK
   |
Java

e também:

Java
   |
LINK
   |
COBOL

Os dois mundos coexistem.


PASSO 6 – DESCOBRIR O PODER DO LINK TO LIBERTY

Este é um dos recursos mais elegantes do CICS moderno.

Um programa COBOL pode chamar um método Java.

Exemplo:

@CICSProgram("CUSTGET")

Agora o COBOL pode executar:

EXEC CICS LINK
     PROGRAM('CUSTGET')
END-EXEC

Sem HTTP.

Sem REST.

Sem MQ.

Sem gambiarra.

Tudo dentro do próprio CICS.


PASSO 7 – ADOTAR APIs REST

Uma das formas mais comuns de modernização é expor programas COBOL como APIs REST.

Arquitetura:

Mobile App
     |
REST
     |
Java
     |
PAYBUS
     |
VSAM

O usuário nem imagina que existe COBOL por trás.

E isso é perfeitamente aceitável.

Aliás...

É exatamente o objetivo.


PASSO 8 – IMPLEMENTAR EVENT PROCESSING

Aqui está um superpoder pouco conhecido.

Imagine um sistema de apostas.

Toda vez que alguém aposta mais de R$ 50.000:

Evento

Mas você perdeu o fonte.

Como alterar o programa?

Você não altera.

O CICS observa eventos.

Exemplo:

EXEC CICS LINK

Ao detectar o comando:

Evento gerado

Sem modificar uma linha de COBOL.

Isso é Event Processing.


PASSO 9 – PROGRAMAÇÃO ASSÍNCRONA

Outro recurso poderoso.

Tradicional:

Programa A
espera B
espera C
espera D

Moderno:

Programa A

+---- B
|
+---- C
|
+---- D

Tudo executando simultaneamente.

Novas APIs:

RUN TRANSID
FETCH CHILD
FETCH ANY
FREE CHILD

Menos espera.

Mais throughput.

Mais escalabilidade.


PASSO 10 – ENTRAR NO MUNDO DEVOPS

Aqui muitos profissionais acreditam que existe:

DevOps Linux
DevOps Mainframe

Mas a IBM foi direta:

Existe apenas:

DevOps

Ferramentas modernas:

Git
VS Code
Zowe
Jenkins
DBB
Ansible
UrbanCode

O fluxo torna-se:

Git
 |
Build
 |
Test
 |
Deploy
 |
CICS

ERROS MAIS COMUNS

Erro 1

Tentar reescrever tudo.

Resultado:

Projeto de 5 anos.

Orçamento explode.

Sistema antigo continua rodando.


Erro 2

Modernizar a interface e esquecer a regra de negócio.

A regra é o patrimônio.

A tela é apenas um detalhe.


Erro 3

Ignorar testes.

Use:

ZUnit
JUnit
Mockito
Galasa

Erro 4

Não envolver o System Programmer.

Lembre-se:

Arquivos.

Recovery.

Resources.

Bundles.

JVM Servers.

Tudo isso depende dele.


SOLUÇÃO DE PROBLEMAS

EIBCALEN = 0

Primeira entrada da transação.


Programa novo não atualiza

Execute:

NEWCOPY

ou

REFRESH PROGRAM

COMMAREA truncada

Provavelmente ultrapassou:

32K

Migre para Containers.


LINK retornando erro

Verifique:

RESP
RESP2

Sempre.


CURIOSIDADE

Pouca gente sabe, mas o CICS nasceu em uma época em que muitos computadores ainda trabalhavam com cartões perfurados.

Hoje ele executa:

  • APIs REST

  • Java

  • JSON

  • Liberty

  • Cloud

  • DevOps

Sem abandonar sua essência transacional.

Isso talvez explique sua longevidade.


EASTER EGG MAINFRAME

Existe uma frase que quase todo profissional experiente de CICS aprende depois de alguns anos:

"O problema nunca está no CICS."

Primeiro você culpa:

  • CICS

  • VSAM

  • RACF

  • DB2

  • MQ

Depois de algumas horas investigando...

Descobre que esqueceu de fazer:

EXEC CICS RETURN
END-EXEC

ou

EXEC CICS HANDLE CONDITION
END-EXEC

ou simplesmente compilou o programa errado.

Acontece mais do que deveria.


CONCLUSÃO

☕💣🚀 PADAWAN, O MAIOR SEGREDO DA MODERNIZAÇÃO NÃO É TROCAR COBOL POR JAVA.

É entender que o verdadeiro valor está nas regras de negócio acumuladas durante décadas.

O CICS moderno permite adicionar:

  • REST

  • Java

  • Liberty

  • Eventos

  • APIs

  • DevOps

  • Cloud

sem destruir aquilo que já funciona.

E essa talvez seja a definição mais elegante de modernização:

Evoluir sem perder a confiança conquistada por milhões de transações executadas corretamente ao longo de décadas.

sexta-feira, 7 de junho de 2024

CICS REST: O Policial Cibernético das APIs Corporativas

 

Bellacosa Mainframe e o cics rest uma improvavel uniao a ser investigada

☕ Um Café no Bellacosa Mainframe

CICS REST: O Policial Cibernético das APIs Corporativas

Quando um Programador COBOL Descobre que o CICS Pode Patrulhar HTTP, Interrogar JSON e Entregar a COMMAREA Viva ou Morta

Detroit, futuro próximo.

A cidade está mergulhada no caos digital. Aplicativos móveis exigem respostas em milissegundos. Microsserviços atravessam nuvens públicas e privadas. APIs aparecem em cada esquina. Contêineres fogem pelas avenidas do Kubernetes. Mensagens JSON circulam sem documento, sem copybook e, às vezes, sem qualquer respeito pelo contrato de dados.

No subsolo de uma grande corporação financeira, porém, existe uma máquina que nunca dorme.

Ela não usa capa.
Não pilota um Batmóvel.
Não fala em promessas vazias de transformação digital.

Ela executa transações.

Seu nome é CICS Transaction Server.

Durante décadas, ele patrulhou os corredores do processamento corporativo, protegendo contas bancárias, seguradoras, companhias aéreas, governos, cartões de crédito, estoques e sistemas industriais. Agora, diante da invasão das APIs REST, recebeu uma nova diretiva:

Servir o público, proteger a lógica de negócio e fazer o JSON obedecer ao copybook.

Bem-vindo, jovem programador COBOL, ao distrito mais movimentado do IBM Z.

Hoje veremos como um programa COBOL tradicional, acostumado a receber dados por COMMAREA ou CHANNEL, pode ser exposto como uma API REST moderna sem precisar ser completamente reescrito.

Prepare o café. Ajuste o terminal 3270. Verifique o CEMT. O suspeito está chegando pela porta TCP/IP.


Diretiva Primária: compreender o problema

Antes de falarmos sobre recursos CICS, precisamos entender o conflito central.

Um programa COBOL tradicional não conhece naturalmente conceitos como:

  • URL;

  • HTTP;

  • HTTPS;

  • JSON;

  • cabeçalhos;

  • métodos GET, POST, PUT e DELETE;

  • códigos de status como 200, 400, 404 e 500;

  • autenticação por token;

  • chamadas originadas por aplicativos móveis.

O programa COBOL normalmente conhece estruturas fixas de dados.

Por exemplo:

01  WS-CLIENTE-REQUEST.
    05 WS-AGENCIA          PIC 9(4).
    05 WS-CONTA            PIC 9(8).
    05 WS-DIGITO           PIC X.

Ele espera receber bytes em posições previamente definidas.

A agência ocupa quatro posições.
A conta ocupa oito.
O dígito ocupa uma.

Não há chaves, aspas, vírgulas nem nomes de propriedades circulando em tempo de execução.

Já uma aplicação web moderna envia algo parecido com:

{
  "agencia": 1234,
  "conta": 87654321,
  "digito": "9"
}

Para um desenvolvedor JavaScript, isso parece natural.

Para um programa COBOL antigo, esse JSON é praticamente um criminoso não identificado entrando na delegacia sem documento.

Alguém precisa fazer a identificação, separar cada campo, validar formatos, converter números e entregar os dados exatamente na posição esperada.

Esse alguém é o CICS.


A unidade especial de tradução do CICS

O CICS atua como uma camada intermediária inteligente entre o cliente REST e a aplicação tradicional.

O fluxo básico é:

Cliente externo
      ↓
HTTP ou HTTPS
      ↓
TCPIPSERVICE
      ↓
URIMAP
      ↓
PIPELINE
      ↓
JSON Handler
      ↓
COMMAREA ou CHANNEL
      ↓
Programa COBOL

Na resposta, o caminho é invertido:

Programa COBOL
      ↓
COMMAREA ou CHANNEL
      ↓
JSON Handler
      ↓
JSON
      ↓
Resposta HTTP
      ↓
Cliente externo

O ponto fundamental é este:

O programa COBOL não precisa compreender o documento JSON original.

Ele recebe uma estrutura de dados tradicional, preparada pelo CICS.

Assim, a lógica de negócio pode continuar fazendo aquilo que sempre fez:

  • consultar Db2;

  • ler VSAM;

  • calcular juros;

  • validar saldo;

  • verificar limites;

  • emitir autorizações;

  • atualizar cadastros;

  • registrar auditoria;

  • controlar uma unidade lógica de trabalho.

O CICS cuida do protocolo moderno.
O COBOL cuida do negócio.

Essa separação de responsabilidades é uma das maiores virtudes da arquitetura.


Cena 1: o cliente externo chega à cidade

No topo do fluxo temos o consumidor da API.

Ele pode ser:

  • um aplicativo Android;

  • um aplicativo iOS;

  • um portal web;

  • um sistema Java;

  • um serviço Python;

  • um microsserviço no OpenShift;

  • uma aplicação hospedada em AWS, Azure ou IBM Cloud;

  • uma plataforma de integração;

  • o IBM API Connect;

  • outro sistema mainframe;

  • uma ferramenta de testes como Postman ou curl.

O cliente pode enviar uma requisição como:

POST /api/v1/transferencias
Content-Type: application/json

Corpo:

{
  "contaOrigem": 10012345,
  "contaDestino": 20098765,
  "valor": 250.75
}

Do ponto de vista do cliente, ele está chamando uma API REST comum.

Ele não precisa saber:

  • em qual LPAR o CICS está;

  • se o programa foi escrito em COBOL;

  • se os dados estão em Db2 ou VSAM;

  • se a transação utiliza COMMAREA;

  • se existe um programa com 30 anos de produção;

  • se o serviço participa de uma unidade de trabalho protegida por syncpoint.

Essa transparência é valiosa.

Para a aplicação moderna, o mainframe aparece como um provedor de serviços corporativos.


Cena 2: TCPIPSERVICE, o portão blindado

O primeiro recurso CICS relevante é o TCPIPSERVICE.

Pense nele como o portão de entrada do distrito.

Ele define onde o CICS escutará conexões TCP/IP.

Entre suas responsabilidades estão:

  • porta de escuta;

  • protocolo utilizado;

  • suporte a HTTP ou HTTPS;

  • configuração de SSL/TLS;

  • associação com parâmetros de segurança;

  • controle da entrada de conexões.

Exemplo conceitual:

Porta: 8443
Protocolo: HTTP
SSL: habilitado
Status: aberto

Quando o cliente chama:

https://api.empresa.com:8443/api/v1/saldo

a conexão chega ao TCPIPSERVICE correspondente.

Sem TCPIPSERVICE ativo, ninguém entra.

É como tentar apresentar uma denúncia em uma delegacia cujo portão está fechado.

Dica Bellacosa

Quando um serviço não responde, não comece imediatamente alterando o COBOL.

Verifique primeiro:

  1. O TCPIPSERVICE está instalado?

  2. Está habilitado?

  3. Está escutando na porta correta?

  4. Existe firewall bloqueando?

  5. O certificado TLS é válido?

  6. O host e a porta da chamada estão corretos?

Muitos “erros do programa” são, na verdade, problemas anteriores ao programa.

O suspeito sequer chegou à sala de interrogatório.


Cena 3: URIMAP, o reconhecimento facial das URLs

Depois que a requisição entra no CICS, é necessário descobrir qual serviço deve tratá-la.

Essa é uma das funções do URIMAP.

O URIMAP relaciona um padrão de URI a um recurso ou fluxo CICS.

Por exemplo:

/api/v1/clientes/*

ou:

/api/v1/saldos/*

Ele funciona como uma tabela de encaminhamento.

Quando chega:

GET /api/v1/clientes/12345

o CICS verifica qual URIMAP corresponde àquele endereço.

Em termos conceituais:

URI recebida
      ↓
Comparação com URIMAPs
      ↓
Seleção do pipeline ou serviço

O URIMAP também pode ajudar a separar versões:

/api/v1/clientes
/api/v2/clientes

Isso é importante porque APIs evoluem.

Talvez a versão 1 retorne:

{
  "nome": "MURPHY"
}

e a versão 2 retorne:

{
  "nomeCompleto": "ALEX MURPHY",
  "status": "ATIVO"
}

Manter versões evita que uma mudança destrua consumidores antigos.

Curiosidade investigativa

Em arquiteturas web como Spring Boot, rotas podem ser definidas com anotações:

@GetMapping("/clientes/{id}")

No CICS, o conceito de roteamento aparece por meio de recursos como URIMAP, pipelines e handlers.

A tecnologia muda.
A necessidade arquitetural permanece.

Alguém sempre precisa decidir quem atende cada endereço.


Cena 4: PIPELINE, a linha de processamento

O PIPELINE é a linha de montagem que conduz a mensagem pelos componentes necessários.

Imagine uma esteira industrial da Omni Consumer Products, mas sem o protótipo ED-209 disparando contra os programadores durante a reunião.

A requisição passa por estágios:

HTTP
  ↓
Identificação do serviço
  ↓
Tratamento da mensagem
  ↓
Conversão do JSON
  ↓
Chamada da aplicação
  ↓
Conversão da resposta

O pipeline não é apenas uma “seta” no desenho.

Ele representa a infraestrutura que organiza o processamento da mensagem.

Dependendo da configuração, podem existir etapas relacionadas a:

  • transformação de dados;

  • validação;

  • segurança;

  • tratamento de cabeçalhos;

  • seleção de handlers;

  • geração da resposta;

  • registro de erros.

É importante não confundir o pipeline com o programa de negócio.

O pipeline é a rota operacional.
O programa COBOL é o policial que executa a investigação.


Cena 5: o JSON Handler interroga a mensagem

O cliente envia:

{
  "codigoCliente": 4711,
  "valor": 850.25,
  "moeda": "BRL"
}

O programa COBOL espera:

01  WS-REQUEST.
    05 WS-CODIGO-CLIENTE   PIC 9(8).
    05 WS-VALOR            PIC S9(9)V99 COMP-3.
    05 WS-MOEDA            PIC X(3).

Essas representações não são iguais.

O JSON representa números e textos de forma lógica.

O COBOL pode representar números em:

  • display;

  • binário;

  • packed decimal;

  • COMP;

  • COMP-3;

  • campos com sinal;

  • casas decimais implícitas.

O JSON Handler realiza a tradução entre esses formatos.

Exemplo:

"valor": 850.25

pode ser convertido para um campo:

PIC S9(9)V99 COMP-3

O programa recebe o valor na forma adequada para o processamento COBOL.

Na resposta ocorre o contrário.

Se o programa devolver:

WS-SALDO PIC S9(9)V99 COMP-3 VALUE 150075

considerando as casas decimais implícitas, o handler poderá produzir:

{
  "saldo": 1500.75
}

A conversão exige regras.

Essas regras são geradas a partir da definição das estruturas.

E aqui entram os assistentes do CICS.


DFHLS2JS e DFHJS2LS: a reconstrução cibernética dos dados

Dois nomes aparecem frequentemente quando estudamos JSON no CICS:

  • DFHLS2JS

  • DFHJS2LS

À primeira vista, parecem números de série de unidades mecanizadas da polícia de Detroit.

Mas são utilitários fundamentais.

DFHLS2JS

O nome pode ser lido como:

Language Structure to JSON

Ou seja:

Estrutura de linguagem
        ↓
Definição JSON

Você fornece uma estrutura COBOL, PL/I ou outra linguagem suportada.

O utilitário gera artefatos que permitem mapear aquela estrutura para JSON.

Por exemplo, a partir de:

01  CLIENTE-RESPONSE.
    05 CLIENTE-ID          PIC 9(8).
    05 CLIENTE-NOME        PIC X(40).
    05 CLIENTE-SALDO       PIC S9(9)V99 COMP-3.

pode ser criada uma representação lógica equivalente a:

{
  "clienteId": 12345678,
  "clienteNome": "ALEX MURPHY",
  "clienteSaldo": 4900.50
}

DFHJS2LS

O sentido principal é:

JSON to Language Structure

Ele parte de uma definição JSON e gera estruturas ou mapeamentos adequados para a linguagem.

Isso é útil quando o contrato JSON já existe e a aplicação CICS precisa se adaptar a ele.

Portanto, existem dois caminhos de desenvolvimento.

Caminho bottom-up

Você já possui o programa COBOL e o copybook.

Parte da estrutura existente e gera a interface JSON.

Copybook COBOL
       ↓
DFHLS2JS
       ↓
Artefatos JSON e binding

Caminho top-down

Você já possui o contrato JSON ou o desenho da API.

Parte do contrato e gera uma estrutura de linguagem correspondente.

Definição JSON
       ↓
DFHJS2LS
       ↓
Estrutura COBOL e binding

A escolha depende de onde está a fonte da verdade.

Em sistemas legados, muitas vezes o copybook existente é o ponto de partida.

Em projetos API-first, o contrato JSON pode ser definido antes da implementação.


O arquivo de binding: a memória operacional

O web service binding file contém informações de mapeamento necessárias para que o CICS converta a mensagem.

Ele funciona como uma espécie de memória operacional da reconstrução.

Diz ao CICS, em essência:

  • qual campo JSON corresponde a qual campo COBOL;

  • como tratar tipos;

  • como converter representações;

  • como montar a estrutura de entrada;

  • como transformar a estrutura de saída.

Esse arquivo costuma ser armazenado no zFS, o sistema de arquivos UNIX do z/OS.

O CICS acessa os artefatos durante o processamento.

Atenção

O binding não é simplesmente documentação.

Ele participa efetivamente da execução.

Se houver inconsistência entre:

  • o copybook utilizado na geração;

  • o programa compilado;

  • o binding implantado;

o resultado pode ser desastroso.

Campos podem ser interpretados com tamanhos errados.
Valores podem chegar deslocados.
Conversões podem falhar.
O programa pode receber dados aparentemente válidos, mas incorretos.

Essa é uma ocorrência particularmente perigosa porque nem sempre provoca ABEND imediato.

Às vezes, o dado errado passa pela porta usando um crachá aparentemente válido.


COMMAREA ou CHANNEL: escolha seu compartimento

Depois da conversão, o CICS precisa entregar os dados à aplicação.

Dois modelos são comuns:

  • COMMAREA;

  • CHANNEL e CONTAINER.

COMMAREA

A COMMAREA é o método clássico.

Ela consiste em uma área contínua de memória passada entre programas ou transações.

Exemplo conceitual:

01 DFHCOMMAREA.
   05 CA-FUNCAO          PIC X.
   05 CA-CLIENTE         PIC 9(8).
   05 CA-STATUS          PIC X(2).

Vantagens:

  • simples;

  • conhecida por praticamente todos os programadores CICS;

  • amplamente utilizada;

  • adequada para estruturas pequenas e estáveis.

Limitações:

  • tamanho limitado;

  • uma única área linear;

  • maior dificuldade para mensagens complexas;

  • mudanças podem afetar offsets e compatibilidade.

A COMMAREA tradicional possui um limite próximo de 32 KB, associado ao tamanho permitido no modelo clássico de comunicação.

CHANNEL e CONTAINER

O CHANNEL organiza múltiplos containers.

Exemplo:

CHANNEL: API-CHANNEL

CONTAINER: REQUEST
CONTAINER: RESPONSE
CONTAINER: METADATA
CONTAINER: ERROR-INFO

Vantagens:

  • melhor organização;

  • suporte a volumes maiores;

  • separação lógica dos dados;

  • flexibilidade;

  • menor dependência de uma única estrutura monolítica.

Para novos desenhos, CHANNEL e CONTAINER costumam oferecer uma arquitetura mais limpa.

Contudo, não significa que toda COMMAREA deva ser imediatamente substituída.

A regra Bellacosa é:

Não modernize destruindo o que funciona. Modernize criando fronteiras melhores.

Se o programa existente funciona corretamente com COMMAREA, uma camada de exposição pode preservar essa interface.

Se uma nova aplicação estiver sendo criada, CHANNEL e CONTAINER merecem forte consideração.


Cena 6: o programa COBOL entra em ação

Após a conversão, o CICS chama o programa de aplicação.

Ele pode receber:

01  REQUEST-DATA.
    05 REQUEST-CONTA      PIC 9(8).
    05 REQUEST-VALOR      PIC S9(9)V99 COMP-3.

O programa executa sua lógica:

IF REQUEST-VALOR <= SALDO-DISPONIVEL
    MOVE '00' TO RESPONSE-CODE
    SUBTRACT REQUEST-VALOR
        FROM SALDO-ATUAL
ELSE
    MOVE '51' TO RESPONSE-CODE
END-IF

Observe que não há nenhuma instrução para interpretar JSON.

Não existe:

PARSE JSON MANUALMENTE

O código se concentra no domínio do negócio.

Esse é o objetivo.

Contudo, algumas versões modernas do Enterprise COBOL também oferecem recursos próprios para processamento JSON. Isso pode ser útil em certos cenários, mas não elimina necessariamente o valor da infraestrutura CICS de pipelines, assistentes e bindings.

Existem duas filosofias:

Conversão na infraestrutura

CICS converte
Programa recebe estrutura pronta

Conversão na aplicação

Programa recebe JSON
Programa executa JSON PARSE

Para exposição padronizada de serviços CICS, a conversão na infraestrutura costuma reduzir acoplamento e manter o programa focado no negócio.


Cena 7: a resposta sai patrulhando a rede

O programa preenche a estrutura de saída:

01  RESPONSE-DATA.
    05 RESPONSE-CODE      PIC X(2).
    05 RESPONSE-MESSAGE   PIC X(60).
    05 RESPONSE-BALANCE   PIC S9(9)V99 COMP-3.

Exemplo:

RESPONSE-CODE    = 00
RESPONSE-MESSAGE = TRANSFERENCIA APROVADA
RESPONSE-BALANCE = 3250.25

O JSON Handler converte para:

{
  "codigo": "00",
  "mensagem": "TRANSFERENCIA APROVADA",
  "saldo": 3250.25
}

O CICS então envia uma resposta HTTP.

Exemplo:

HTTP/1.1 200 OK
Content-Type: application/json

O cliente recebe a resposta sem saber quantas camadas corporativas participaram do processamento.

Mas aqui existe uma decisão importante:

Um código de negócio não é automaticamente um código HTTP.

Por exemplo:

Código 51 = saldo insuficiente

Isso não significa necessariamente:

HTTP 500

Saldo insuficiente é uma resposta válida da regra de negócio. O serviço funcionou corretamente.

Dependendo do contrato da API, pode ser retornado:

HTTP 422 Unprocessable Content

ou até:

HTTP 200 OK

com:

{
  "aprovado": false,
  "motivo": "SALDO_INSUFICIENTE"
}

A escolha depende do padrão arquitetural da organização.

Regra prática

  • Erro de formato enviado pelo cliente: 400 Bad Request;

  • credencial ausente ou inválida: 401 Unauthorized;

  • acesso proibido: 403 Forbidden;

  • recurso inexistente: 404 Not Found;

  • conflito de estado: 409 Conflict;

  • regra de negócio não processável: frequentemente 422;

  • falha inesperada no servidor: 500 Internal Server Error;

  • serviço temporariamente indisponível: 503 Service Unavailable.

Não transforme todo problema de negócio em erro técnico.

O ED-209 não precisa disparar porque o cliente digitou um código inválido.


Passo a passo de uma modernização controlada

Agora vamos construir um roteiro prático.

Passo 1: escolha uma operação pequena

Não comece expondo o fechamento contábil completo da empresa.

Escolha uma função simples e bem conhecida:

  • consultar cliente;

  • consultar saldo;

  • obter status;

  • listar produtos;

  • validar cadastro.

Operações de consulta são bons primeiros candidatos porque apresentam menor risco transacional.


Passo 2: localize o programa e sua interface

Descubra:

  • nome do programa;

  • transação associada;

  • copybook de entrada;

  • copybook de saída;

  • uso de COMMAREA ou CHANNEL;

  • tamanho dos dados;

  • chamadas a Db2, VSAM, MQ ou outros programas;

  • códigos de retorno;

  • requisitos de segurança.

Documente o contrato atual antes de criar o novo.

Modernização sem inventário é patrulhamento sem mapa.


Passo 3: higienize o copybook

Verifique:

  • campos redefinidos;

  • REDEFINES;

  • OCCURS DEPENDING ON;

  • campos binários;

  • packed decimal;

  • sinais;

  • campos filler;

  • nomes duplicados;

  • estruturas condicionais;

  • caracteres especiais;

  • campos de comprimento variável.

Nem toda estrutura COBOL antiga foi criada pensando em exposição externa.

Pode ser melhor criar um copybook de API separado.

Exemplo:

01 API-SALDO-REQUEST.
   05 API-CONTA          PIC 9(8).

01 API-SALDO-RESPONSE.
   05 API-CODIGO         PIC X(2).
   05 API-SALDO          PIC S9(9)V99 COMP-3.

Essa estrutura pode chamar internamente o programa legado.

Assim, você cria uma fachada estável.


Passo 4: defina o contrato REST

Decida:

GET /api/v1/contas/{conta}/saldo

Resposta:

{
  "conta": 12345678,
  "saldo": 1750.40,
  "moeda": "BRL"
}

Defina também:

  • campos obrigatórios;

  • tamanhos máximos;

  • valores permitidos;

  • formato de datas;

  • precisão decimal;

  • códigos HTTP;

  • mensagens de erro;

  • versão da API.

O copybook não deve ser publicado cegamente como contrato externo.

Um nome interno como:

WS-X9-COD-CLI-BASE

não é um bom nome de propriedade JSON.

Prefira algo compreensível:

"codigoCliente"

Passo 5: gere os artefatos

Use o assistente apropriado:

  • DFHLS2JS para partir da estrutura de linguagem;

  • DFHJS2LS para partir do JSON.

A geração pode produzir:

  • schemas;

  • bindings;

  • estruturas;

  • metadados de conversão;

  • arquivos de configuração.

Em muitos ambientes, o CICS Explorer facilita esse processo.

Um wizard pode criar um CICS Bundle a partir de um programa existente.

Isso reduz a necessidade de preparar manualmente todos os recursos e jobs.

Mas atenção:

Wizard não substitui entendimento.

Ele automatiza passos.
Não decide por você se o contrato da API é bom.


Passo 6: configure os recursos CICS

Você precisará garantir que os elementos estejam corretamente definidos e instalados:

  • TCPIPSERVICE;

  • URIMAP;

  • PIPELINE;

  • WEBSERVICE ou recursos relacionados;

  • diretórios no zFS;

  • bundle;

  • programa;

  • transação, quando aplicável;

  • segurança.

Use o CICS Explorer, definições CSD, bundles ou o método adotado pela organização.


Passo 7: teste com ferramentas externas

Teste primeiro fora da aplicação final.

Exemplo com curl:

curl -X POST \
  https://host.exemplo.com/api/v1/saldos \
  -H "Content-Type: application/json" \
  -d '{"conta":12345678}'

Valide:

  • status HTTP;

  • conteúdo da resposta;

  • headers;

  • tempo de resposta;

  • comportamento com dados inválidos;

  • campos ausentes;

  • números fora da faixa;

  • caracteres especiais;

  • falha do programa;

  • indisponibilidade de banco de dados.

Não teste apenas o caminho feliz.

Todo criminoso digital parece inocente quando recebe apenas dados perfeitos.


CICS como REST Requester: o policial também faz chamadas

Até agora vimos o CICS como service provider.

Ou seja:

Cliente externo chama o CICS

Mas o CICS também pode atuar como solicitante:

Programa CICS chama serviço externo

Imagine um programa COBOL que precise consultar:

  • cotação de moeda;

  • serviço antifraude;

  • validação de endereço;

  • geolocalização;

  • serviço de identidade;

  • API de parceiros;

  • serviço de nuvem;

  • motor de inteligência artificial corporativo.

O fluxo pode ser:

Programa COBOL
      ↓
CICS
      ↓
HTTP
      ↓
API externa
      ↓
Resposta JSON
      ↓
Conversão
      ↓
Estrutura COBOL

O CICS pode usar comandos e recursos de cliente HTTP para construir e enviar requisições.

Em cenários específicos, o programa pode trabalhar com:

  • EXEC CICS WEB OPEN;

  • EXEC CICS WEB CONVERSE;

  • EXEC CICS WEB SEND;

  • EXEC CICS WEB RECEIVE;

  • URIMAP do tipo cliente;

  • conexões TLS;

  • tratamento de headers.

A implementação exata depende da versão do CICS, da arquitetura e da estratégia adotada.

É importante entender que o lado requester não é simplesmente o diagrama provider virado ao contrário.

Os conceitos são simétricos, mas os recursos, comandos e responsabilidades de programação podem mudar.


Segurança: diretiva que não pode ser apagada

Expor um programa COBOL como REST não significa abrir a porta do mainframe para qualquer pessoa.

A API deve considerar:

  • TLS;

  • certificados;

  • autenticação;

  • autorização;

  • RACF;

  • proteção das transações;

  • proteção dos recursos;

  • validação de entrada;

  • limitação de chamadas;

  • auditoria;

  • mascaramento de informações sensíveis;

  • API gateway;

  • tokens;

  • logs seguros.

Uma arquitetura comum pode ser:

Cliente
   ↓
API Gateway
   ↓
Autenticação e políticas
   ↓
CICS
   ↓
Programa COBOL

O IBM API Connect pode atuar como camada de gerenciamento, aplicando:

  • segurança;

  • quotas;

  • analytics;

  • controle de versões;

  • portal para desenvolvedores;

  • políticas de tráfego.

O CICS continua executando a transação, enquanto o gateway controla a exposição externa.

Cuidado com logs

Não grave indiscriminadamente:

  • CPF;

  • senha;

  • token;

  • número completo de cartão;

  • dados bancários;

  • informações médicas;

  • chaves privadas.

Log de diagnóstico não deve virar arquivo de evidências contra a própria empresa.


Curiosidades da delegacia CICS

1. CICS não é apenas uma “tela verde”

Muitos iniciantes associam CICS exclusivamente a mapas BMS e terminais 3270.

Mas o CICS moderno pode atender:

  • aplicações web;

  • APIs;

  • Java;

  • JSON;

  • SOAP;

  • eventos;

  • mensageria;

  • integração com cloud;

  • workloads híbridos.

A tela 3270 é apenas uma das interfaces possíveis.


2. REST não obriga reescrita completa

Modernizar não significa necessariamente transportar toda a lógica para outra plataforma.

Muitas vezes, uma boa modernização consiste em:

Criar uma API estável
        ↓
Preservar a lógica confiável
        ↓
Substituir partes gradualmente

Isso reduz risco.

Reescrever milhões de linhas de COBOL apenas para produzir JSON pode ser economicamente irresponsável.


3. Copybook também é contrato

O copybook descreve mais do que campos.

Ele carrega decisões históricas:

  • tamanho de conta;

  • precisão monetária;

  • códigos;

  • indicadores;

  • datas;

  • flags;

  • estruturas repetitivas.

Ao expor uma API, você está transformando parte desse contrato interno em contrato externo.

Faça isso conscientemente.


4. JSON é flexível; COBOL é preciso

JSON aceita estruturas dinâmicas.

COBOL prefere estruturas rigorosamente definidas.

Isso não é defeito.

É uma diferença filosófica.

Em sistemas financeiros, precisão de posição, tamanho e decimal é uma vantagem.

O CICS cria uma ponte entre a flexibilidade externa e a disciplina interna.


Erros clássicos que o programador deve evitar

Expor diretamente a COMMAREA inteira

Uma COMMAREA pode conter:

  • campos internos;

  • fillers;

  • controles;

  • dados sensíveis;

  • flags técnicas;

  • áreas de trabalho;

  • códigos incompreensíveis para consumidores externos.

Crie uma interface própria para API.


Ignorar versionamento

Alterar um campo pode quebrar dezenas de consumidores.

Use versões e contratos claros.


Misturar erro técnico com erro de negócio

“Cliente não possui saldo” não é necessariamente uma pane no servidor.


Não validar números

Um valor JSON pode ultrapassar a capacidade de um PIC 9(5).

Valide limites antes da lógica de negócio.


Esquecer a codificação de caracteres

O mainframe trabalha frequentemente com EBCDIC; clientes web trabalham geralmente com UTF-8.

Conversões precisam estar corretamente configuradas.

Problemas de encoding podem transformar:

JOÃO

em um relatório digno do arquivo de ocorrências inexplicáveis.


Alterar copybook sem regenerar binding

Se a estrutura mudou, o mapeamento pode precisar ser regenerado e redistribuído.

Binding antigo com programa novo é receita para corrupção silenciosa.


Easter eggs para os veteranos do cinema e do mainframe

Em algum lugar da região CICS, um sysprog observa o painel e murmura:

Eu compraria essa API por um dólar.

Na sala ao lado, um desenvolvedor tenta enviar um JSON com campo numérico maior que o PIC suporta. O handler responde com a firmeza de um policial cibernético:

Dead or alive, you are coming with me.

O JSON, naturalmente, escolhe o 400 Bad Request.

Enquanto isso, uma reunião executiva promete substituir todo o mainframe em seis meses. No fundo da sala, o veterano do CICS apenas olha para o relatório de disponibilidade, toma um café e aguarda o próximo episódio.

Ele já viu esse filme antes.

Talvez mais de uma vez.


Conclusão: a quarta diretiva do CICS

O CICS Transaction Server não sobreviveu por permanecer parado.

Ele sobreviveu porque evoluiu sem abandonar seus fundamentos:

  • integridade;

  • desempenho;

  • segurança;

  • controle transacional;

  • escalabilidade;

  • compatibilidade;

  • proteção da lógica de negócio.

Ao fornecer suporte a REST e JSON, o CICS não obrigou o COBOL a fingir que é JavaScript.

Ele criou uma camada especializada de tradução.

O cliente envia HTTP e JSON.
O TCPIPSERVICE recebe a conexão.
O URIMAP identifica o caminho.
O PIPELINE conduz o processamento.
O JSON Handler converte a mensagem.
A COMMAREA ou o CHANNEL entrega os dados.
O programa COBOL executa a regra de negócio.
A resposta percorre o caminho inverso.

Tudo isso permite que um aplicativo moderno converse com uma aplicação escrita décadas atrás como se estivesse chamando qualquer outro serviço contemporâneo.

Essa é a verdadeira modernização pragmática.

Não é destruir o passado.
É colocar uma interface moderna diante dele.

Não é substituir um sistema confiável apenas porque sua linguagem é antiga.
É permitir que ele participe de arquiteturas atuais.

Não é esconder o mainframe por vergonha.
É transformá-lo em um provedor de serviços corporativos.

O jovem programador COBOL entra na sala pensando que encontrará apenas COMMAREA, BMS e terminal 3270.

Sai de lá compreendendo URIs, pipelines, bindings, JSON, TLS, APIs e integração híbrida.

No visor do CICS aparece a mensagem final:

SERVICE STATUS: ENABLED
PIPELINE STATUS: ACTIVE
PROGRAM STATUS: AVAILABLE
HTTP RESPONSE: 200 OK

A cidade digital pode continuar operando.

O JSON foi processado.
O COBOL permaneceu intacto.
A transação foi concluída.

E, em algum lugar do z/OS, a verdadeira quarta diretiva continua protegida:

Nunca interromper o processamento de produção.

domingo, 21 de janeiro de 2024

☕🔥 COMMAREA, CHANNELS e CONTAINERS no CICS TS: O Guia Definitivo para Desenvolvedores COBOL Junior

 

Bellacosa Mainframe e commarea channels e containers no cics ts

☕🔥 COMMAREA, CHANNELS e CONTAINERS no CICS TS: O Guia Definitivo para Desenvolvedores COBOL Junior

Introdução

Todo programador COBOL que inicia no mundo CICS aprende rapidamente três palavras que aparecem em praticamente qualquer aplicação online:

  • COMMAREA

  • CHANNEL

  • CONTAINER

Embora pareçam apenas mecanismos para passagem de parâmetros, na realidade representam três gerações diferentes da evolução do CICS.

Compreender quando utilizar cada abordagem, suas limitações, vantagens, implicações de performance e integração com Web Services, APIs REST e IBM MQ é fundamental para qualquer desenvolvedor que deseje construir aplicações modernas no IBM Z.

A grande dúvida dos iniciantes costuma ser:

"Se a COMMAREA funciona há décadas, por que a IBM criou Channels e Containers?"

A resposta está diretamente relacionada à evolução dos sistemas corporativos.


Como o CICS Enxerga uma Transação

Quando uma transação executa:

Cliente
   |
TRANSAÇÃO
   |
PROGRAMA A

frequentemente o programa precisa:

  • chamar outro programa

  • enviar dados

  • receber retorno

  • transferir controle

Exemplo:

PROGRAMA A
   |
 LINK
   |
PROGRAMA B

Nesse momento os dados precisam ser transferidos.

É aí que entram COMMAREA, CHANNEL e CONTAINER.


COMMAREA — O Clássico do CICS

COMMAREA significa:

Communication Area

Ela surgiu nos primeiros anos do CICS e se tornou durante décadas o principal mecanismo de comunicação entre programas.

Exemplo:

Programa A:

EXEC CICS LINK
     PROGRAM('CLIENTE')
     COMMAREA(WS-COMMAREA)
     LENGTH(200)
END-EXEC

Programa B:

01 DFHCOMMAREA.
   05 CLI-CODIGO PIC 9(08).
   05 CLI-NOME   PIC X(40).

O CICS copia os dados de um programa para outro.


Como Funciona Internamente

Imagine:

PROGRAMA A
   |
   | 200 bytes
   |
PROGRAMA B

O CICS realiza uma cópia física do conteúdo.

Por isso o tamanho importa.


Limite da COMMAREA

O limite máximo teórico é:

64 KB

Na prática:

65.535 bytes

Porém a maioria dos sistemas utiliza:

32 KB

como limite operacional seguro.

Por quê?

Porque historicamente muitos aplicativos e interfaces foram construídos considerando esse valor.


Exemplo de Layout COMMAREA

01 WS-COMMAREA.
   05 WS-HEADER.
      10 WS-OPERACAO PIC X(08).
      10 WS-USUARIO  PIC X(20).

   05 WS-CLIENTE.
      10 WS-CONTA    PIC 9(10).
      10 WS-NOME     PIC X(40).
      10 WS-SALDO    PIC S9(9)V99 COMP-3.

Total:

82 bytes

Vantagens da COMMAREA

Simplicidade

Extremamente fácil.

EXEC CICS LINK

e pronto.


Compatibilidade

Praticamente todos os sistemas CICS do mundo utilizam COMMAREA.


Performance

Para pequenos volumes:

100 bytes
500 bytes
1 KB
2 KB

é extremamente eficiente.


Desvantagens da COMMAREA

Estrutura rígida

Quem envia e quem recebe devem conhecer exatamente o mesmo layout.

Mudou um campo?

Pode quebrar tudo.


Acoplamento forte

Programa A depende diretamente do layout do Programa B.


Limite de tamanho

Web Services modernos frequentemente ultrapassam:

32 KB
50 KB
100 KB
500 KB

A COMMAREA não foi projetada para isso.


O Problema das APIs Modernas

Imagine um JSON:

{
  "cliente": {
     "nome":"João",
     "enderecos":[...],
     "cartoes":[...],
     "seguros":[...]
  }
}

Facilmente pode ultrapassar:

40 KB
80 KB
150 KB

A COMMAREA começa a sofrer.


Surge o CHANNEL

Para resolver isso a IBM criou:

CHANNEL

Pense nele como um envelope.


O que é um CHANNEL?

Um CHANNEL não contém dados.

Ele contém:

CONTAINERS

Imagine:

CHANNEL CLIENTE

   |
   +-- HEADER
   +-- DADOS
   +-- ENDERECOS
   +-- CARTOES
   +-- SEGUROS

O que é um CONTAINER?

Container é onde os dados ficam armazenados.

Cada container possui:

  • nome

  • conteúdo

  • tamanho


Analogia Simples

COMMAREA:

1 caixa gigante

CHANNEL:

1 armário

CONTAINER:

gavetas do armário

Exemplo de Criação

Criando container:

EXEC CICS PUT CONTAINER
     CONTAINER('CLIENTE')
     CHANNEL('CANAL01')
     FROM(WS-DADOS)
     FLENGTH(500)
END-EXEC

Recuperando Dados

EXEC CICS GET CONTAINER
     CONTAINER('CLIENTE')
     CHANNEL('CANAL01')
     INTO(WS-DADOS)
END-EXEC

Limites dos Containers

Ao contrário da COMMAREA:

64 KB máximo

Containers podem armazenar:

Megabytes

de informação.

Na prática:

  • JSON grandes

  • XML grandes

  • payloads extensos

funcionam muito melhor.


Estrutura Recomendada

Exemplo:

CHANNEL CLIENTE

HEADER
CLIENTE
ENDERECOS
TELEFONES
PRODUTOS
LOGS

Cada informação isolada.


Benefícios dos Channels

Menor acoplamento

Cada container pode evoluir independentemente.


Melhor manutenção

Não é necessário reconstruir um layout monolítico.


Escalabilidade

Ideal para integrações modernas.


COMMAREA vs CHANNEL

CaracterísticaCOMMAREACHANNEL
Tamanho64 KBMuito maior
EstruturaÚnicaMúltiplos Containers
JSONLimitadoExcelente
XMLLimitadoExcelente
APIs RESTFracoExcelente
MQBomExcelente
EvoluçãoDifícilFácil

Uso com Web Services

Quando um Web Service recebe:

<cliente>
 ...
</cliente>

ou

{
 ...
}

normalmente o runtime do CICS utiliza:

CHANNEL
CONTAINER

internamente.

Motivo:

Payloads variáveis.


Uso com z/OS Connect

Praticamente todas as implementações modernas utilizam:

JSON
↓
CHANNEL
↓
COBOL

em vez de COMMAREA.


Uso com IBM MQ

MQ pode trabalhar com ambos.


Modelo Tradicional

MQ
  |
COMMAREA
  |
COBOL

Modelo Moderno

MQ
  |
CHANNEL
  |
CONTAINERS
  |
COBOL

Exemplo MQ

Mensagem recebida:

Pedido
Itens
Cliente
Pagamento

Pode ser dividida em:

PEDIDO
ITENS
CLIENTE
PAGAMENTO

Cada parte em um container.


Quando Usar COMMAREA?

Utilize quando:

✅ aplicações legadas

✅ pequenas estruturas

✅ LINK simples

✅ integração interna

Exemplo:

Consulta Cliente
Consulta Agência
Consulta Conta

Quando Usar CHANNEL?

Utilize quando:

✅ APIs REST

✅ JSON

✅ XML

✅ Web Services

✅ MQ moderno

✅ microsserviços

✅ payloads grandes


Estratégia Utilizada pelos Bancos

O que normalmente vemos hoje:

Core COBOL antigo
      |
   COMMAREA

e

APIs novas
      |
CHANNEL
CONTAINER

Os dois convivem perfeitamente.


Erros Comuns dos Iniciantes

Não validar tamanho

LENGTH(...)

deve sempre ser controlado.


Alterar layout sem sincronizar

Clássico problema de COMMAREA.


Usar container gigante

Separar logicamente os dados é melhor.


Não documentar containers

Sempre documente:

CLIENTE
ENDERECO
PRODUTO
PAGAMENTO

Boas Práticas

COMMAREA

  • manter abaixo de 32 KB

  • usar copybooks

  • versionar layouts


CHANNELS

  • containers pequenos

  • nomes padronizados

  • separar responsabilidades


MQ

  • payload desacoplado

  • evitar estruturas gigantes

  • utilizar containers temáticos


Conclusão

A COMMAREA continua viva e continuará por muitos anos. Milhares de aplicações bancárias processam bilhões de transações diariamente utilizando esse mecanismo criado há décadas.

Entretanto, o mundo mudou.

JSON, APIs REST, Open Banking, PIX, Web Services, MQ distribuído e arquiteturas orientadas a serviços exigiram uma evolução do modelo tradicional.

Foi exatamente para atender esse novo cenário que surgiram os Channels e Containers.

O desenvolvedor COBOL moderno não deve enxergar COMMAREA e CHANNEL como concorrentes.

Eles são ferramentas diferentes para problemas diferentes.

A regra prática é simples:

  • COMMAREA para integrações simples e legadas.

  • CHANNEL e CONTAINER para aplicações modernas, APIs, MQ e Web Services.

Quem domina os dois mundos consegue navegar tanto nos sistemas que sustentam os bancos há décadas quanto nas novas arquiteturas digitais que conectam o IBM Z ao restante do planeta.

E essa é uma das habilidades mais valiosas para qualquer programador COBOL que deseja evoluir para desenvolvedor CICS de alto nível.

quinta-feira, 3 de dezembro de 2020

CICS Conversacional e Pseudo-Conversacional - Parte IV

 

Bellacosa Mainframe e a conversação em CICS Parte IV

☕ Um Café no Bellacosa Mainframe

CICS Conversacional e Pseudo-Conversacional

Parte 4 — COMMAREA, TSQ, TDQ, Temporary Storage, Control Blocks e os Bastidores do CICS

"Salve novamente, jovem Padawan Mainframe! Se você chegou até aqui, parabéns. Você já compreendeu como a pseudo-conversação revolucionou a escalabilidade do CICS, descobriu Channels, Containers, APIs REST e até OpenTelemetry. Mas agora vamos abrir a tampa do motor do CICS. Vamos conhecer o que acontece por trás das cortinas."

Pegue mais um café.

Abra o IPCS.

Deixe o CEDF ligado.

Reserve uma aba do SDSF.

Porque agora vamos entrar na sala das máquinas.


O que realmente acontece dentro do CICS?

Quando executamos:

EXEC CICS SEND MAP
END-EXEC

Muita gente imagina algo parecido com:

Programa

Tela

Fim.

Mas o CICS faz muito mais.


Fluxo interno

Programa COBOL

        │

        ▼

Translator

        │

        ▼

EXEC Interface

        │

        ▼

Kernel CICS

        │

        ▼

Terminal Control

        │

        ▼

BMS

        │

        ▼

TIOA

        │

        ▼

3270

TIOA

Talvez uma das estruturas menos conhecidas pelos iniciantes.

TIOA

Terminal Input Output Area

É uma área onde ficam armazenados.

Dados digitados.

Cursor.

Atributos.

AID Keys.


Exemplo

ENTER

PF3

PF5

CPF

Nome

Cursor linha 7

Cursor coluna 15

Tudo isso.

Na TIOA.


TCA

Task Control Area.

Cada task possui.


Guarda.

Status.

Transação.

Programa.

Recursos.

Flags.


EIB

Você já conhece.

Mas agora sabemos.

Ele é derivado.

Da TCA.


Control Blocks interessantes

TCT

Terminal Control Table


PPT

Program Processing Table


FCT

File Control Table


PCT

Program Control Table


SIT

System Initialization Table


Temporary Storage Queue

TSQ

Muito usada.

Em pseudo-conversação.


Imagine.

1000 registros.

Não cabem.

Na COMMAREA.


Salvamos em TSQ.


EXEC CICS WRITEQ TS

QUEUE('CLI0001')

FROM(WS-DADOS)

END-EXEC



Lendo.



EXEC CICS READQ TS

QUEUE('CLI0001')

INTO(WS-DADOS)

END-EXEC



TDQ

Transient Data Queue

Muito utilizada.

Para logs.

Integração.

Mensageria.


TSQ versus TDQ

CaracterísticaTSQTDQ
Leitura múltiplaSimNão
AtualizaçãoSimNão
SequencialNãoSim
PersistênciaOpcionalSim
Uso típicoEstadoLogs

COMMAREA versus TSQ

COMMAREA

64 KB

TSQ

Megabytes


Exemplo bancário

Tela.

Lista.

5000 clientes.

Salvar TSQ.

Usuário PF8.

Recupera TSQ.

Próxima página.


Paginando consultas

PF7

Anterior

PF8

Próxima




IF EIBAID = DFHPF8

PERFORM PAGINA-SEGUINTE


END-IF



Boas práticas

Nunca coloque.

Tabela enorme.

Na COMMAREA.


Use.

TSQ.

Ou.

Containers.


LINK

Outro comando muito importante.

Chamando programa.




EXEC CICS LINK

PROGRAM('CLI0002')

COMMAREA(WS-COMM)

END-EXEC



Retorna.

Para chamador.


XCTL

Diferente.

Não retorna.



EXEC CICS XCTL

PROGRAM('MENU0001')

END-EXEC



Programa anterior.

Morre.

Novo.

Assume controle.


START

Assíncrono.

Agenda execução.




EXEC CICS START

TRANSID('CLI1')

END-EXEC



DELAY

Muito curioso.



EXEC CICS DELAY

FOR SECONDS(5)

END-EXEC



Raramente utilizado.


CEMT

Melhor amigo.

Administrador.


Consultar tasks.


CEMT I TASK



Consultar programas.



CEMT I PROGRAM



Consultar files.



CEMT I FILE



Consultar TSQ.



CEMT I TSQUEUE



CEDF

Ferramenta maravilhosa.


Permite.

Passo a passo.

SEND.

RECEIVE.

LINK.

READ.

WRITE.

DB2.




CEDF ON



CECI

Testador.

Interativo.



CECI READ FILE




CECI RECEIVE MAP



Curiosidades Bellacosa Mainframe

Existem sistemas.

Que utilizam.

TSQ.

Desde 1988.

Ainda funcionando.

No z16.

No z17.

Sem alterações.


Easter Egg Mainframe

Muitos programadores escondiam.

Comentários.

Como.



* THIS PROGRAM IS OLDER THAN YOU


Ou.



* IF IT BREAKS


* RUN AWAY



Ou.



* WRITTEN DURING NIGHT SHIFT


* POWERED BY COFFEE



O que veremos na Parte 5

✔ Program Control;

✔ HANDLE CONDITION;

✔ HANDLE ABEND;

✔ RESP e RESP2;

✔ Syncpoint;

✔ Journaling;

✔ Recoverable Resources;

✔ Mirror Transactions;

✔ DPL;

✔ IPIC;

✔ CICSplex;

✔ CPSM;

✔ Threadsafety;

✔ Open TCBs;

✔ OTE;

✔ E muitos outros segredos do universo CICS.


No Bellacosa Mainframe aprendemos uma regra simples: se você acredita que já conhece o CICS, provavelmente apenas encontrou a próxima porta do labirinto. Porque no IBM Z sempre existe mais um control block para estudar, mais um dump para analisar e mais um café esperando para ser servido.

 

sexta-feira, 4 de setembro de 2020

CICS Conversacional e Pseudo-Conversacional - Parte II

 

Bellacosa Mainframe e a conversação em cics parte II

☕ Um Café no Bellacosa Mainframe

CICS Conversacional e Pseudo-Conversacional

Parte 2 — Escalabilidade, COMMAREA, Channels, Web Services e Boas Práticas

"Na primeira parte aprendemos que programas conversacionais gostam de ficar esperando o usuário pensar, enquanto programas pseudo-conversacionais executam como ninjas do IBM Z: aparecem, trabalham, desaparecem e retornam apenas quando necessários. Agora vamos entender por que a IBM praticamente transformou a pseudo-conversação em padrão de mercado."

Pegue mais um café, abra o CEDF, deixe o CEMT pronto e vamos continuar nossa jornada.


Os problemas do modelo Conversacional

O modelo conversacional é elegante.

É simples.

É intuitivo.

Mas infelizmente é extremamente caro.

Vamos imaginar um banco.

Cenário

50.000 usuários.

Cada usuário demora:

20 segundos

para preencher uma tela.


Aplicação Conversacional

Programa fica ativo.

Task permanece viva.

TCB permanece associado.

TCA permanece ocupada.

Storage continua reservado.

EIB continua residente.

Tudo isso...

Durante vinte segundos.


Resultado

Pouca escalabilidade.

Maior uso de CPU.

Maior consumo de memória.

Possibilidade de gargalos.


O fenômeno Think Time

Um dos maiores inimigos do CICS.

Think Time.

Tempo em que o usuário está apenas pensando.

Exemplos:

Lendo uma tela.

Pegando um documento.

Atendendo telefone.

Procurando CPF.

Conversando com cliente.


Conversacional

Think Time = recursos desperdiçados


Pseudo

Think Time = recursos liberados


A IBM fez uma escolha inteligente

Ao invés de esperar.

Finaliza a task.

Salva contexto.

Cria nova task depois.


Visualmente:

Task 1

Mostra tela

RETURN


=================


Usuário pensa


=================


Task 2


Recebe dados


Processa


RETURN

Múltiplas telas

Poucos desenvolvedores COBOL iniciantes percebem.

Uma pseudo-conversação pode navegar por dezenas de telas.

Exemplo:

Menu

Consulta

Inclusão

Alteração

Confirmação

Resumo

Help

Paginação


Exemplo

MENU

PF5

CONSULTA

ENTER

DETALHE

PF3

MENU


Tudo utilizando.

COMMAREA.


COMMAREA

Provavelmente um dos conceitos mais importantes do CICS.

Ela guarda estado.

Entre uma task.

E outra.


Exemplo:


01 WS-COMM.

   05 WS-MODO PIC X.

   05 WS-PAGINA PIC 99.

   05 WS-CPF PIC 9(11).

   05 WS-NOME PIC X(30).


Limitação

COMMAREA possui limite.

64 KB.


Antigamente

Era suficiente.


Hoje.

JSON.

REST.

SOAP.

XML.

JWT.

Podem ultrapassar facilmente.

64 KB.


Surge Channels e Containers

Introduzidos para resolver isso.


COMMAREA

64 KB


Container

Gigabytes.


Exemplo


EXEC CICS PUT CONTAINER

CONTAINER('CLIENTE')

FROM(WS-DADOS)

END-EXEC



Recuperando.


EXEC CICS GET CONTAINER

CONTAINER('CLIENTE')

INTO(WS-DADOS)

END-EXEC



Qual utilizar?

Sistemas antigos

COMMAREA


Novos projetos

Channels

Containers


EIBCALEN

Nos projetos antigos.

Era rei.




IF EIBCALEN = ZERO


PERFORM PRIMEIRA-VEZ


ELSE


PERFORM RETORNO


END-IF



Pseudo-Conversação com BMS

Fluxo típico.


SEND MAP

RETURN

Usuário ENTER

Nova Task

RECEIVE

DB2

SEND

RETURN


Web Services no CICS

Muitos acreditam.

Que CICS é apenas 3270.

Isso está muito longe da realidade.


CICS suporta.

SOAP.

REST.

JSON.

XML.

MQ.

JMS.

TCP/IP.

HTTP.

HTTPS.


Exemplo

Angular

API

zOS Connect

CICS

COBOL

DB2


Visualmente



Browser


   │


REST API


   │


zOS Connect


   │


CICS


   │


COBOL


   │


DB2



O COBOL muda?

Quase nada.


Exemplo


PERFORM VALIDA


PERFORM CONSULTA-DB2


PERFORM RETORNA-DADOS




Interface muda.

Negócio permanece.


SOAP

Muito usado.

Seguradoras.

Governo.

ERP.


REST

Dominante.

OpenAPI.

Swagger.

JSON.


BMS ainda é importante?

Sim.

Muito.


Milhares de aplicações.

Continuam em produção.


Além disso.

BMS ensina.

Arquitetura.

Separação de responsabilidades.

Persistência de contexto.

Gerenciamento de estado.


Problemas comuns

MAPFAIL

Usuário apertou PF3.

Sem alterar dados.


INVREQ

Sequência incorreta.


LENGERR

Área pequena.


ASRA

S0C7.

S0C4.

S0CB.


Como debugar?

CEDF.

Excelente.



CEDF ON



Programa para.

Comando por comando.


CECI

Muito útil.


Exemplo


CECI RECEIVE MAP



CEMT

Consultar recursos.



CEMT I TASK




CEMT I PROG




CEMT I TRAN



Boas práticas

Sempre usar pseudo-conversação


Utilizar COMMAREA pequena


Preferir Containers

Projetos novos.


Não salvar tabelas grandes

Na COMMAREA.


Usar MDT apenas quando necessário


Utilizar DATAONLY

Reduz tráfego.


Evitar múltiplos SEND

Na mesma task.


Validar EIBRESP

Sempre.


Exemplo



IF EIBRESP NOT = DFHRESP(NORMAL)

PERFORM TRATA-ERRO


END-IF



Curiosidade Bellacosa Mainframe

Alguns bancos possuem aplicações pseudo-conversacionais escritas em 1986.

Elas foram migradas.

De 3090.

Para 9672.

Para z900.

Para z990.

Para z9.

Para z10.

Para z14.

Para z16.

E continuam praticamente inalteradas.


Easter Egg Mainframe

Nos anos 80.

Muitos desenvolvedores colocavam comentários curiosos.

Exemplo.



* MAY THE COBOL BE WITH YOU


Ou.



* DO NOT TOUCH


* WORKS SINCE 1987


Ou o clássico.



* IF YOU CHANGE THIS


* BUY COFFEE FOR THE TEAM



Continua...

Na Parte 3 veremos:

✔ Web Open Interface (WOI);

✔ CICS Event Processing;

✔ Programas COBOL completos;

✔ Pseudo-conversação com múltiplos MAPSETs;

✔ BMS avançado;

✔ Channels versus TSQ;

✔ Segurança RACF;

✔ Web Services SOAP e REST detalhados;

✔ Observabilidade moderna;

✔ OpenTelemetry;

✔ Curiosidades e easter eggs pouco conhecidos do universo CICS.

quarta-feira, 1 de julho de 2020

CICS Conversacional e Pseudo-Conversacional - Parte I

 

Bellacosa Mainframe e as tecnicas de conversação em programas CICS parte I

☕ Um Café no Bellacosa Mainframe

CICS Conversacional e Pseudo-Conversacional

Parte 1 — Das Conversas Eternas ao Modelo que Move o Mundo

"Salve, jovem Padawan Mainframe! Pegue seu café, abra uma sessão do SDSF, deixe o IPCS de prontidão e venha comigo entender uma das maiores sacadas de engenharia já criadas pela IBM. Hoje vamos falar sobre dois conceitos que sustentam boa parte das aplicações bancárias do planeta: CICS Conversacional e Pseudo-Conversacional."


O que é uma aplicação Conversacional?

Imagine que você está conversando com alguém pelo telefone.

Você liga.

A pessoa atende.

A ligação permanece aberta.

Vocês conversam.

Você pensa.

Procura um documento.

Vai tomar café.

Volta.

Continua falando.

Finalmente desliga.

Foi exatamente esta filosofia que inspirou o primeiro modelo de aplicações CICS.

Modelo Conversacional

O programa permanece residente na memória durante toda a interação com o usuário.

Visualmente:

Usuário
   │
EXEC CICS RECEIVE
   │
Programa permanece ativo
   │
Processa
   │
EXEC CICS SEND
   │
Espera usuário
   │
EXEC CICS RECEIVE
   │
Processa
   │
EXEC CICS SEND
   │
...
   │
EXEC CICS RETURN

O programa nunca sai da memória.

A task permanece viva.

A TCA continua alocada.

O TCB continua associado.

A área de trabalho permanece disponível.

Tudo fica esperando.

Inclusive o usuário.


O problema

Vamos imaginar um banco em 1982.

Existem:

5.000 terminais.

3.000 usuários.

2.000 consultas simultâneas.

Cada usuário fica parado.

Lendo a tela.

Pensando.

Conferindo CPF.

Procurando documentos.

Tomando café.

Atendendo telefone.

Conversando.

Enquanto isso...

O programa continua residente.

A task continua viva.

O CICS continua consumindo recursos.

A memória continua ocupada.


O nascimento da pseudo-conversação

Os engenheiros da IBM olharam para isso e disseram:

"Por que manter um programa carregado esperando um ser humano pensar?"

E a resposta foi brilhante.

Não vamos esperar.

Vamos embora.

Quando o usuário voltar...

Criamos outra task.

Recuperamos o estado.

Continuamos.

Nascia a pseudo-conversação.


O que é Pseudo-Conversação?

A pseudo-conversação é um modelo onde o programa não fica esperando.

Ele:

Mostra a tela.

Encerra a task.

Libera recursos.

Quando o usuário aperta ENTER...

Uma nova task é criada.

Tudo continua.

Como se nada tivesse acontecido.


Fluxo


Usuário

   │

Executa CLI1

   │

Programa COBOL

   │

SEND MAP

   │

RETURN TRANSID

COMMAREA

   │

Task termina



=====================


Usuário digita


ENTER


=====================


Nova Task


Recebe COMMAREA


RECEIVE MAP


Processa


SEND MAP


RETURN


É quase uma ilusão.

Parece conversacional.

Mas não é.

Por isso o nome:

Pseudo-Conversacional.


Comparando os dois modelos

CaracterísticaConversacionalPseudo
Task ativaSimNão
Programa residenteSimNão
Consome memóriaAltaBaixa
EscalabilidadeRuimExcelente
Usado atualmenteRaroPadrão
Ideal para milhares usuáriosNãoSim

Por que a IBM venceu?

Porque ela resolveu um problema gigantesco.

Imagine.

100 mil usuários.

Cada um esperando.

Em modelo conversacional.

Seria inviável.

No pseudo.

As tasks duram poucos milissegundos.

O usuário pensa.

Mas o mainframe trabalha em outra coisa.


Analogia moderna

Conversacional:

Você deixa o Uber esperando na porta enquanto toma banho.

Pseudo-conversacional:

Você pede outro Uber quando estiver pronto.

O custo muda completamente.


O segredo: COMMAREA

A memória da aplicação.

Entre uma task e outra.

Exemplo:


01 WS-COMM.

   05 WS-CLIENTE.

      10 WS-CODIGO PIC 9(6).

      10 WS-NOME PIC X(30).

      10 WS-PAGINA PIC 99.

      10 WS-MODO PIC X.



Primeira execução

Como descobrir?

Usando:

EIBCALEN



IF EIBCALEN = ZERO

   PERFORM PRIMEIRA-VEZ

END-IF


Primeira vez.

Sem COMMAREA.


Retorno



IF EIBCALEN > ZERO

   PERFORM RETORNO


END-IF


Existe contexto.

Usuário voltou.


Salvando estado



EXEC CICS RETURN

TRANSID('CLI1')

COMMAREA(WS-COMM)

LENGTH(100)

END-EXEC.


CICS guarda.

Task termina.

Memória liberada.


Criando nova task

Usuário aperta ENTER.

CICS cria:

Nova TCA

Nova Task

Novo TCB

Novo EIB

Mas entrega a COMMAREA.

Tudo continua.

Mágica.

Engenharia.

IBM.


O papel do BMS

Sem BMS.

Pseudo-conversação seria muito mais complicada.

Precisaríamos:

Salvar coordenadas.

Salvar cursor.

Salvar atributos.

Salvar campos.

O BMS faz tudo isso.


SEND MAP

Mostra tela.



EXEC CICS SEND MAP

MAP('TELA1')

MAPSET('CLIMAP')

ERASE

FREEKB

END-EXEC.



RECEIVE MAP

Recebe dados.



EXEC CICS RECEIVE MAP

MAP('TELA1')

MAPSET('CLIMAP')

INTO(TELA1I)

END-EXEC.



Curiosidade Bellacosa Mainframe

Muitos sistemas bancários desenvolvidos em 1985 ainda utilizam exatamente este modelo.

Mudou o hardware.

Mudou o storage.

Mudou a CPU.

Mudou a interface.

Mas a arquitetura continua.

E continua funcionando.

Talvez esta seja uma das maiores demonstrações da elegância da engenharia IBM.


Easter Egg Mainframe

Alguns desenvolvedores chamavam aplicações conversacionais de:

Programas preguiçosos.

Porque passavam a maior parte do tempo...

Esperando o usuário pensar.

Enquanto os programas pseudo-conversacionais eram apelidados de:

Programas ninja.

Aparecem.

Executam.

Desaparecem.

Voltam.

Executam.

Somem novamente.

Tudo em poucos milissegundos.


Continua...

Na Parte 2 veremos:

✔ Problemas clássicos do modelo conversacional;

✔ Deadlocks de recursos;

✔ Pseudo-conversação com múltiplas telas;

✔ COMMAREA versus Channels e Containers;

✔ Web Services no CICS;

✔ REST, SOAP e z/OS Connect;

✔ Exemplos COBOL completos;

✔ Boas práticas;

✔ Troubleshooting;

✔ Curiosidades e easter eggs pouco conhecidos do universo CICS.


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