| 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.
Sem comentários:
Enviar um comentário