Cics - Inefe
Cics - Inefe
CICS
“Tudo o que você sempre quis saber
sobre CICS, mas nunca teve a
coragem de perguntar.”
Maiores Consumidores
UNIDADE 1 – Customer Information Control System - CICS
Introdução ao CICS TS
• O CICS fornece aos usuários de um aplicativo ONLINE, acesso aos dados de forma
rápida, eficiente e segura.
Uma Chave de Memória (storage key) é associada com cada bloco de 4 KB de memória. A chave de memória tem 7 bits, sendo:
• Access-Control Bits, com 4 bits, que é a Chave de Proteção, e provê a proteção de memória;
• Fetch-Protection Bit, controla se a proteção se aplica a referências do tipo fetch (busca);
• Reference Bit, indica se o bloco foi referido para leitura/gravação de informação;
• Change Bit, indica se informação foi armazenada/alterada no bloco correspondente.
JES2
Address Space batch (initiator)
Execution queue
Módulo de carga
RMODE 24 PSW KEY = 9
FREE POOL
Above
EUDSA
ERDSA
ESDSA
ECDSA
Line 16 MB
FREE POOL
UDSA Below
RDSA
SDSA
CDSA
Execução de um programa COBOL
(Reentrante)
RDSA UDSA
TRANID TSTA
1
PGM TESTEA
WS
TESTEA
WS WS
TRANID TSTB
2 TESTEA TESTEB
PGM TESTEB
TRANID TSTA
3 Código Código
PGM TESTEA
TESTEA TESTEB
DFHRPL
CEMT
T01
WB01 WB02 PCT Transações
WB01
PROG01 PROG02 PPT Programas
RDSA COBOL
T03
PROG01 PROG02 Identification
WB02 1100101001001001001
0010000011101100110
0111001111011110011
0101011111100001101
Environment
0001100101101010010 0001110101011010101 Data
Procedure
UDSA
INSTALL
JOB Batch
CEDA TASKID01
TCA
TASKID02
TCA
TASKID03
Como dissemos, para cada execução de transação (task), é criado um bloco de controle
chamado TCA. Portanto, se tivermos várias tasks da mesma transação, teremos várias
TCAs, uma para cada task. Entretanto, o CICS não carrega na memória várias cópias
de um mesmo programa. Apenas uma cópia do programa é carregada e utilizada por
todas as tasks. Tem que ter uma cópia da WORKING-STORAGE para cada task, já que
ela é utilizada com dados diferentes para cada usuário.
A TCA é o ponto focal da task, já que todas as áreas são encadeadas a partir dela. Cada
task terá também uma área denominada EIB (Exec Interface Block), que traz uma série
de informações muito úteis para nossos programas.
Exec Interface Block (EIB)
O EIB (Exec Interface Block) é uma área que fica na LINKAGE SECTION de nosso programa e traz uma série de
informações que podem e devem ser utilizadas a qualquer momento para facilitar nosso trabalho. Abaixo, estão algumas das
informações que constam do EIB.
EIBTIME - Hora
EIBDATE - Data
EIBSPOSN- Posição do Cursor
EIBAID - Tecla pressionada (Enter, PF2, PF3, etc.)
EIBCALEN - Tamanho da Commarea
EIBTRNID - Código da Transação
EIBTRMID - Terminal associado
EIBFN - Última função executada
EIBRESP - Response Code
Executando Transações
Através da PCT o CICS sabe qual o programa associado à transação, e verifica se esse
programa está cadastrado na tabela PPT (Processing Program Table). Se estiver tudo
o.k., a task é executada.
Execução de um programa COBOL
(Storage Violation)
UDSA
FREE POOL
EXTENT DA ECDSA
EUDSA H T
ERDSA
ESDSA
ECDSA
A comunicação entre CICS
Podemos ter uma única região de CICS se tivermos uma carga de trabalho pequena,
mas caso a empresa tenha um alto número de usuários e muito processamento online a
ser executado diariamente, podemos ter diversas regiões CICS trabalhando e
distribuindo a carga através de facilidades de comunicação.
Um CICS pode comunicar-se com outros CICS residentes na mesma CPU, em CPUs
diferentes e mesmo em localidades diversas do planeta, facilitando muito o
processamento distribuído.
Passagem de dados para a próxima task - COMMAREA
Para enviar dados para a próxima task, podemos utilizar uma área de
comunicação chamada COMMAREA. Essa área será passada através de uma área de
WORKING-STORAGE no programa e pode ter qualquer nome. Na próxima execução,
os dados passados serão recebidos em uma área reservada do programa, localizada na
LINKAGE SECTION e chamada DFHCOMMAREA (nome reservado). A área
transmitida deve ter o mesmo tamanho em sua recepção na DFHCOMMAREA.
Um CHANNEL é uma referência única nomeada para uma coleção de dados de parâmetros
de uma aplicação disposta em CONTAINERS.
CHANNEL01
Conversacional: é uma técnica antiga que praticamente não está sendo utilizada,
uma vez que consome muitos recursos do sistema, e vai contra a filosofia do CICS,
que é de aplicações que processem rapidamente e consumam poucos recursos. Essa
técnica consiste em processar os dados recebidos do usuário, devolver a resposta, e
aguardar para receber novas solicitações.
O comando LINK passa o controle para o programa indicado. Esse programa executa
e, ao terminar, devolve o controle ao programa que emitiu o LINK (chamador).
NÍVEL 0 CICS
Primeiro Programa
NÍVEL 1
LINK
.....
RETURN
Segundo Programa
NÍVEL 2
.....
RETURN
Níveis Lógicos - LINK
Todo programa chamado pelo LINK executa em novo nível lógico. Quando termina (RETURN),
o controle volta para o nível lógico imediatamente superior, ou seja, para o programa que
emitiu o LINK ou, no caso do primeiro programa, para o CICS.
O comando XCTL também passa controle para outro programa, mas ao contrário do LINK,
quando o programa chamado termina, o controle não retorna ao programa chamador. O XCTL
é muito utilizado para desenvolver MENUS de aplicações.
NÍVEL 0 CICS
NÍVEL 1
.....
LINK RETURN
.....
XCTL
.....
NÍVEL 2 RETURN
Segundo Programa
.....
RETURN
CALL estático
Algumas considerações:
Algumas considerações:
TD Intrapartition:
• Todas as filas de TD são direcionadas para o mesmo arquivo VSAM ESDS chamado DFHINTRA;
• Os registros nas filas são gravados sempre sequencialmente e recuperados da mesma forma;
• A leitura é destrutiva, ou seja, uma vez lido não pode ser recuperado novamente;
• Os registros podem ter tamanho variável.
TD Extrapartition: É a forma que o CICS oferece para utilizarmos arquivos SAM (Sequential Access Method).
• As filas TS podem ser gravadas em disco (AUX) ou em memória (MAIN), onde o acesso é muito
mais rápido;
• Os registros (itens) podem ter o tamanho fixo ou variável;
• A TS aceita gravação sequencial, leitura sequencial e direta, e atualização;
• Os dados permanecem disponíveis até que sejam excluídos por comando, ou enquanto o CICS
estiver ativo.
Gravação de TS
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
EXEC CICS WRITEQ TS QUEUE(name)
FROM(data-area)
[LENGTH(LENGTH OF data-area)]
[ITEM (data-area)[REWRITE]]
[MAIN | AUXILIARY]
END-EXEC.
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
WORKING-STORAGE SECTION.
01 RESP1 PIC 9(05).
01 RESP2 PIC 9(05).
01 W-DADOS PIC X(50).
*
PROCEDURE DIVISION.
EXEC CICS READQ TS QUEUE(‘FATTS01’)
INTO(W-DADOS)
LENGTH(LENGTH OF W-DADOS)
RESP(RESP1)
RESP2(RESP2)
END-EXEC.
IF RESP1 NOT EQUAL DFHRESP(NORMAL)
GO TO ROTINA-TRATA-ERRO.
. . . . .
ROTINA-TRATA-ERRO.
. . . . .
Manuseio de Exceção
Manuseio de condições de exceção
O comando IGNORE CONDITION serve para o CICS ignorar as condições especificadas, e deixar
o programa continuar. Serve também para resetar condições tratadas anteriormente em
HANDLE CONDITION.
Manuseio de Exceção
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
PROCEDURE DIVISION.
EXEC CICS HANDLE CONDITION
INVREC(TRATA-INV)
LENGERR(TRATA-LENGERR)
NOTFND(TRATA-NOTFND)
PGMIDERR(TRATA-PGMIDERR)
ERROR(TRATA-ERROR)
END-EXEC.
EXEC CICS IGNORE CONDITION
INVREQ
END-EXEC.
EXEC CICS READ FILE(‘KZF001’)
RIDFLD(W-CHAVE)
INTO(W-REG)
END-EXEC.
. . . . . . .
TRATA-NOTFND.
. . . . . . .
TRATA-LENGERR.
. . . . . .
Opções para manuseio de exceções
Uma das maneiras de tratar as condições de exceção é codificar a opção RESP, e em seguida
testar o campo utilizado como argumento.
Outra forma estruturada de trabalhar é codificar a opção NOHANDLE nos comandos. O CICS
deixará o programa prosseguir, e devemos testar o campo EIBRESP.
A utilização de HANDLE e IGNORE CONDITION quebra a estrutura do programa, por tanto, não
é aconselhável.
Se não utilizarmos nenhuma das condições mostradas acima, no caso de exceções, o CICS toma
uma ação “default”, que geralmente é ABENDAR a task.
Manuseio de Teclas
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
WORKING-STORAGE SECTION.
. . . .
COPY DFHAID.
PROCEDURE DIVISION.
EVALUATE EIBAID
WHEN DFHPF3
GO TO ROTINA-SAIDA.
WHEN DFHENTER
GO TO ROTINA-GRAVACAO.
WHEN DFHPF6
GO TO ROTINA-LIMPA-CAMPOS
WHEN OTHER
MOVE ‘Tecla Inválida.’ TO MSG
GO TO ROTINA-ERRO
END-EVALUATE.
Para testar qual tecla foi pressionada pelo usuário, vimos a técnica estruturada, que consiste em
copiar o copybook DFHAID na WORKING-STORAGE, e depois testar o campo EIBAID. Essa é a
técnica recomendada.
Cuidado ao utilizar HANDLE
Se o CICS detecta uma tecla controlado por HANDLE AID e uma condição de exceção controlada
por HANDLE CONDITION após um comando de input, o desvio é feito para a rotina do HANDLE
AID.
Abaixo mostramos uma condição em que a tecla PF5 foi pressionada e um MAPFAIL ocorreu. O
desvio foi feito para a rotina TRATA-PF5.
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
PROCEDURE DIVISION.
EXEC CICS HANDLE CONDITION
MAPFAIL(TRATA-MAPFAIL)
NOTFND(TRATA-NOTFND)
LENGERR(TRATA-LENGERR)
END-EXEC.
. . . . .
EXEC CICS HANDLE AID
PF5(TRATA-PF5)
END-EXEC.
. . . . .
TRATA-MAPFAIL.
. . . . .
TRATA-NOTFND.
. . . . .
TRATA-PF5.
. . . . .
Comando HANDLE ABEND
O comando HANDLE ABEND devolve o controle para o programa quando o CICS determina que
a transação deveria terminar de forma anormal. Dessa forma, o programa pode realizar um
“housekeeping” antes de seu término.
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
PROCEDURE DIVISION.
EXEC CICS HANDLE ABEND
[PROGRAM(name)|
LABEL(label) |
CANCEL |
RESET]
END-EXEC.
UNIDADE 5 – Startup e Shutdown
Data Sets de Startup e Shutdown
Para o seu correto funcionamento, o CICS necessita necessáriamente de alguns datasets que, com
exceção do DFHCSD, devem ser declarados na sua procedure de STARTUP.
CICS DATASETS ( DFHCSD )
CSDBUFND = number
Especifica o número de buffers a serem utilizados para a área de dados do CSD. Este valor deve ser
definido tendo como base o parâmetro CSDSTRNO mais um. É ignorado caso tenha sido especificado o
parâmetro CSDLSRNO diferente de NONE
CSDBUFNI = number
Especifica o número de buffers a serem utilizados para a área de índice do CSD. Este valor deve ser
definido tendo como base, pelo menos, o valor definido para o parâmetro CSDSTRNO. É ignorado caso
tenha sido especificado o parâmetro CSDLSRNO diferente de NONE.
CICS DATASETS ( DFHCSD – SIT parms)
CSDDISP = OLD|SHR}
Especifica a disposição do dataset. OLD significa sem compartilhamento e SHR com
compartilhamento de uso por outras Regions CICS;
CSDDSN = nome
Especifica o nome do dataset VSAM. Caso seja definido na procedure de STARTUP, este parâmetro é
ignorado;
CSDRLS = {NO|YES}
Especifica se o dataset VSAM é RLS ou não;
CSDSTRNO = number
Especifica o número de usuários concorrentes no acesso ao dataset.
CICS DATASETS (DFHxUXT)
Os datasets de Auxiliary Trace são utilizados para coletar dados de trace para possibilitar a análise e
determinação de problemas no sistema.
CICS DATASETS (DFHDMPx)
Os datasets de DUMP Trace são utilizados para armazenar dumps de transações para possibilitar a
análise e determinação de problemas nas transações.
CICS DATASETS (DFHGCD/DFHLCD)
Enquanto o CICS está em execução, várias informações referente àquela execução são gravadas no
GLOBAL CATALOG e LOCAL CATALOG.
UNIDADE 7 – CICS Control Blocks
CICS CONTROL BLOCKS (CSA)
EIB (Exec Interface Block). Este bloco de controle contém informações úteis ao programa durante a
sua execução, tais como: nome da transação, data e hora, terminal associado, número da task, última
tecla pressionada, posição do cursor, última API utilizada, etc.
CICS CONTROL BLOCKS (CWA)
Ao utilizar o VTAM, uma vez que o usuário foi autenticado, você pode
querer verificar se ele está autorizado a se conectar a uma Region CICS
específica.
Quando um servidor intermediário é usado para se conectar ao CICS,
como um outro sistema CICS, um WebSphere Application Server, ou um
front-end GUI, a autenticação pode ter sido feita a nível do sistema
intermediário. Se o servidor intermediário é confiável pelo CICS, a
informação de senha não será necessária
Segurança das Transações
SAÚDE
XX00 XX01 XX01 XX00
A01 70%
TOR A02 60%
T01 T02 T03
A03 75%
A04 50%
A05 30%
AOR A01 A02 A03 A04 A05
VSAM01 VSAM02
DB2
Roteamento das Transações
SAÚDE
XX00 XX01 XX01 XX00
A01 10%
TOR A02 80%
T01 T02 T03
A03 90%
A04 45%
A05 80%
AOR A01 A02 A03 A04 A05
VSAM01 VSAM02
DB2
Interface do CPSM
Interface do CPSM
Interface do CPSM
Interface do CPSM
Interface do CPSM
Interface do CPSM
Interface do CPSM