Translate

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

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.

 

segunda-feira, 1 de junho de 2020

CICS BMS para Desenvolvedores COBOL – Parte 3

 

Bellacosa Mainframe e a terceira parte do mini curso CICS BMS

☕ Um Café no Bellacosa Mainframe

CICS BMS para Desenvolvedores COBOL – Parte 3

Construindo uma Aplicação Real: Cadastro de Clientes, Pseudo-Conversação e Troubleshooting

"Até agora aprendemos o que é BMS, como criar mapas, compilá-los, instalá-los no CICS e navegar entre SEND MAP, RECEIVE MAP e HANDLE AID. Agora chegou a hora de montar uma aplicação semelhante às encontradas em bancos, seguradoras e empresas de telecomunicações."

Pegue mais um café, abra uma sessão do IPCS, outra do SDSF e vamos colocar a mão na massa.


O Projeto

Nosso sistema será composto por uma transação chamada:

CLI1

Associada ao programa:

CLICAD

Utilizando o MAPSET:

CLIMAP

Nossa tela

Visualmente teremos:

----------------------------------------------------------

               CADASTRO DE CLIENTES


Codigo.......: _______

Nome.........: ___________________________

CPF..........: ___________

Cidade.......: ___________________________

Telefone.....: ___________

Email........: ___________________________



Mensagem.....:



PF3=Sair   PF5=Limpar   PF7=Consultar


----------------------------------------------------------

O MAPSET

DFHMSD


CLIMAP DFHMSD TYPE=&SYSPARM,
               MODE=INOUT,
               LANG=COBOL,
               STORAGE=AUTO,
               TIOAPFX=YES,
               CTRL=(FREEKB)



DFHMDI


TELA01 DFHMDI SIZE=(24,80)



Campos protegidos

Labels.

Nunca serão alterados.

Exemplo:


DFHMDF POS=(5,2),
        LENGTH=10,
        INITIAL='Codigo:',
        ATTRB=(ASKIP,NORM)



DFHMDF POS=(6,2),
        INITIAL='Nome:',
        LENGTH=10,
        ATTRB=(ASKIP)




Campos de entrada

Código


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


Observe.

IC

Cursor inicial.


Nome


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



CPF


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



Cidade


CIDADE DFHMDF POS=(8,15),
                 LENGTH=25,
                 ATTRB=UNPROT



Mensagem

Protegida.

Sempre enviada.


MSG DFHMDF POS=(22,2),
             LENGTH=70,
             ATTRB=(PROT,FSET,BRT)



O MDT

Muitos iniciantes demoram a entender.

MDT significa:

Modified Data Tag

Indica se um campo foi alterado.

Se não estiver ligado.

Campo não chega ao COBOL.


FSET

Força transmissão.


ATTRB=(FSET)

Excelente para mensagens.

Datas.

Campos protegidos.


Bloqueando campos

Imagine uma consulta.

Usuário não pode alterar.

Mudamos.

De:

UNPROT

Para:

PROT

Alternando dinamicamente

Muito comum.

Modo Inclusão.

Nome -> UNPROT

Modo Consulta.

Nome -> PROT

Posicionando cursor

Existe um truque elegante.


MOVE -1 TO NOMEL


Depois:


EXEC CICS SEND MAP
CURSOR
END-EXEC


BMS procura.

Campo cujo L=-1.

Cursor aparece ali.


Tratando PF Keys

COPY DFHAID


COPY DFHAID.



Avaliando



EVALUATE EIBAID


WHEN DFHENTER

PERFORM GRAVA



WHEN DFHPF3

PERFORM SAIR



WHEN DFHPF5

PERFORM LIMPA



WHEN DFHPF7

PERFORM CONSULTA



WHEN OTHER

PERFORM ERRO



END-EVALUATE



PF3


EXEC CICS RETURN
END-EXEC



PF5

Limpa campos.


MOVE SPACES TO TELA01O


SEND novamente.


PF7

Consulta.

DB2.

VSAM.

IMS.

Pode ser qualquer backend.


A Arquitetura em 3 Camadas

Poucos percebem.

Já fazíamos isso nos anos 80.


Camada Apresentação

BMS

MAPSET


Camada Negócio

COBOL

CLICAD


Camada Dados

DB2

VSAM

IMS


Visualmente:


Terminal

    │

MAPSET

    │

COBOL

    │

DB2




Pseudo-Conversação

Talvez o conceito mais importante.

Não existe programa residente.

CICS trabalha com tarefas curtas.


Fluxo



Usuário


↓

EXECUTA CLI1



↓

Programa


↓

SEND MAP


↓

RETURN



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



Usuário ENTER



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



Nova Task



↓

RECEIVE MAP


↓

Valida


↓

DB2


↓

SEND MAP




Primeira chamada


IF EIBCALEN = ZERO


PERFORM PRIMEIRA-VEZ


END-IF



Retorno



IF EIBCALEN > ZERO


PERFORM RETORNO


END-IF




COMMAREA

Persistência.

Entre tasks.


01 WS-COMM.

05 WS-CODIGO PIC 9(6).

05 WS-MODO PIC X.



RETURN


EXEC CICS RETURN


TRANSID('CLI1')

COMMAREA(WS-COMM)

LENGTH(100)


END-EXEC



Troubleshooting

MAPFAIL

Muito comum.

Usuário apertou PF3.

Sem digitação.

RESP=36

INVREQ

Comando inválido.

Exemplo:

SEND DATAONLY

Antes de MAPONLY.


LENGERR

Tamanho incorreto.


ASRA

Favorito dos desenvolvedores.

Normalmente:

S0C7

S0C4

S0CB


CEDF

Melhor amigo.

Debug online.


CEDF ON



Executa.

Comando por comando.


CECI

Excelente ferramenta.

Testar comandos.

Exemplo.


CECI INQUIRE PROGRAM(CLICAD)




Curiosidades

SDF II

Editor gráfico.

Muito usado.

Década de 80.

Desenhava telas.

Gerava BMS.


Cores

Suportava:

Azul

Branco

Verde

Turquesa

Vermelho

Amarelo


Easter Egg Mainframe

Alguns programadores escondiam mensagens.

Campos DRK.

Exemplo.


DFHMDF POS=(24,1),

ATTRB=(DRK,PROT),

INITIAL='MAY THE COBOL BE WITH YOU'


Usuário nunca via.

Mas um dump IPCS entregava.


Releases do CICS

1970

Primeiros CICS.

1980

BMS consolidado.

1990

SDF II.

2000

CICS TS.

2010

Web Services.

2020

REST.

JSON.

zOS Connect.

2025+

CICS TS 6.x.

IA.

OpenTelemetry.

APIs modernas.


Considerações Finais

Aprender BMS é muito mais do que aprender a desenhar telas 3270.

É compreender a forma como milhares de aplicações críticas foram construídas.

É entender pseudo-conversação.

É conhecer a origem das arquiteturas em camadas.

É perceber que muitos conceitos considerados modernos já estavam presentes em aplicações escritas décadas atrás.

E talvez esta seja a principal lição do universo IBM Z:

A tecnologia muda.

Interfaces mudam.

Frameworks desaparecem.

Mas sistemas bem projetados atravessam gerações.

No próximo café do Bellacosa Mainframe, continuaremos explorando os bastidores do CICS, porque, no IBM Z, sempre existe mais um comando, mais um control block e mais uma curiosidade esperando para ser descoberta.


domingo, 18 de fevereiro de 2007

O que é CICS?

 

Bellacosa Mainframe e o que é CICS

O que é CICS?

CICS significa:

Customer Information Control System

É o principal monitor transacional do ambiente Mainframe IBM Z e um dos softwares mais importantes da história da computação corporativa.

Criado pela IBM em 1968, o CICS é responsável por executar milhões de transações online em bancos, seguradoras, governos, companhias aéreas e grandes empresas.


Definição Simples

O CICS é:

um gerenciador de transações online.

Ele permite que milhares de usuários acessem simultaneamente aplicações COBOL, PL/I, C e Java executadas no Mainframe.


Analogia Simples

Imagine um restaurante.

  • O cliente faz o pedido.

  • O garçom recebe.

  • A cozinha prepara.

  • O prato é entregue.

No Mainframe:

Usuário
   ↓
CICS
   ↓
Programa COBOL
   ↓
DB2 / VSAM
   ↓
Resposta

O CICS é o "garçom" que coordena tudo.


Por que o CICS existe?

Sem o CICS, cada usuário precisaria executar diretamente um programa no sistema operacional.

Isso consumiria muitos recursos.

O CICS resolve esse problema:

✅ Compartilhando recursos

✅ Controlando usuários

✅ Gerenciando transações

✅ Controlando memória

✅ Gerenciando comunicação


Onde o CICS é usado?

Praticamente em:

  • Bancos

  • PIX

  • TED

  • Cartões de crédito

  • Internet Banking

  • Seguradoras

  • Governo

  • Telecomunicações

  • Companhias aéreas


Arquitetura Simplificada

Terminal
    ↓
CICS
    ↓
Programa COBOL
    ↓
DB2
    ↓
Resposta

Exemplo Real

Cliente consulta saldo:

ATM
 ↓
CICS
 ↓
COBOL
 ↓
DB2
 ↓
Saldo exibido

Tudo acontece em poucos milissegundos.


O que é uma Transação CICS?

É uma operação identificada por um código de 4 caracteres.


Exemplos

CUST
SALD
PIX1
PAGT

Fluxo

Usuário digita:

SALD

O CICS:

Localiza programa
       ↓
Executa COBOL
       ↓
Retorna resultado

Programas CICS

Normalmente escritos em:

  • COBOL

  • PL/I

  • C

  • Java


Exemplo COBOL CICS

Recebendo dados:

EXEC CICS RECEIVE
     MAP('TELA1')
END-EXEC.

Enviando dados

EXEC CICS SEND
     MAP('TELA2')
END-EXEC.

O que é uma MAP?

Tela utilizada pelo usuário.


Exemplo

+----------------------+
| CONSULTA CLIENTE     |
| CONTA: ________      |
| SALDO: ________      |
+----------------------+

BMS

Basic Mapping Support.

Ferramenta usada para criar telas CICS.


COMMAREA

Área usada para passar dados entre programas.


Exemplo

Programa A:

EXEC CICS LINK
     PROGRAM('PROG2')
     COMMAREA(WS-AREA)
END-EXEC.

Programa B

Recebe os dados pela COMMAREA.


Principais Comandos CICS

LINK

Chama outro programa.

EXEC CICS LINK
END-EXEC

XCTL

Transfere controle sem retorno.

EXEC CICS XCTL
END-EXEC

RETURN

Finaliza transação.

EXEC CICS RETURN
END-EXEC

SEND

Envia tela.

EXEC CICS SEND
END-EXEC

RECEIVE

Recebe dados.

EXEC CICS RECEIVE
END-EXEC

CICS e DB2

Integração extremamente comum.


Exemplo

EXEC SQL

   SELECT SALDO
   INTO :WS-SALDO

   FROM CLIENTES

END-EXEC.

CICS e VSAM

Também muito utilizado.


Exemplo

READ ARQCLI

CICS e Segurança

Normalmente integrado ao:

  • RACF

  • ACF2

  • Top Secret


Regiões CICS

O CICS executa dentro de uma região.


Exemplos

CICSA
CICSPRD
CICSTST

O que é uma Região?

Ambiente onde as transações executam.


Monitoramento

Comandos comuns:

CEMT
CEDA
CEDF
CECI

CEMT

Monitor operacional.


Exemplo

CEMT I TASK

Mostra tarefas ativas.


CEDA

Administração de recursos.


CEDF

Debug interativo.


CECI

Executa comandos CICS manualmente.


Erros Comuns (ABENDs CICS)

AICA

Timeout.


AEI0

Programa não encontrado.


AEIV

Erro COMMAREA.


ASRA

Exceção de programa.

Equivalente a:

S0C7
S0C4

Conceito de Transação

Uma transação deve obedecer:

ACID


Atomicidade

Tudo ou nada.


Consistência

Dados válidos.


Isolamento

Transações independentes.


Durabilidade

Dados persistem após COMMIT.


Curiosidades

1. O CICS existe desde 1968

2. Processa bilhões de transações diariamente

3. É considerado o maior monitor transacional do mundo

4. Grande parte dos sistemas bancários utiliza CICS

5. Muitas transações PIX passam por aplicações COBOL/CICS


Resumo Rápido

ConceitoFunção
CICSMonitor transacional
TransaçãoOperação online
MAPTela usuário
BMSCriação de telas
COMMAREAPassagem de dados
LINKChama programa
XCTLTransfere controle
SENDEnvia tela
RECEIVERecebe dados
CEMTAdministração
CEDADefinição recursos
CEDFDebug
CECITestes

Conclusão

O CICS (Customer Information Control System) é o principal monitor de processamento online do Mainframe IBM Z. Ele gerencia transações, usuários, programas COBOL, acesso a DB2 e VSAM, permitindo que milhões de operações críticas sejam executadas com segurança, desempenho e alta disponibilidade em tempo real.