Capitulo 2 - JCL
Job control Language
O JCL (Job control Language) é um bicho de 7 cabeças e isso não apenas para quem nunca teve contato com ele.
A "linguagem" não é necessariamente difícil, o problema é o copia e cola que é utilizado indiscriminadamente sendo por vezes utilizados parametros e comandos que o programador sequer tem a noção do porque ! O JCL não se parece com nada, um analogo - forçando a barra - na microinformatica seria um config.sys acoplado ao autoexec.bat (arquivos de configuração essenciais para inicializacao de versoes antigas do MS DOS, antecessor do windows para quem é muito novo).
O JCL existe desde 1960 e devido a compatibilidade que os mainframes apresentam continuará existindo por muitos e muitos anos. Nossa tarefa é entende-lo para poder doma-lo. Nunca duvide de um erro de JCL, com certeza você esta vendo algo errado!
Praticamente tudo que acontece no mainframe foi solicitado via JCL, o JCL precisa informar ao mainframe todos os dados essenciais para realização de uma determinada tarefa. Não se programa em JCL. JCL não é uma linguagem de programação é um coadjuvante realizando o meio de campo entre um programa, o sistema operacional e o hardware do mainframe.
O mainframe executa programas via JCL. Entenda-se aqui por programa:
programa simples (em Cobol, Assembler, PL1, C, Fortran)
um produto como o TSO, CICS, DB2, NATURAL, ROSCOE etc
uma aplicação como o sistema de gerenciamento de estoque de um grande supermercado
Digamos que seu programa simples citado acima foi escrito em cobol (COmmon Business Oriented Language - Linguagem Orientada aos Negócios) e é um simples "hello world" , algo como o codigo (fonte) abaixo
12345678901234567890123456789012345678901234567890123456789012345678901234567890
000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. HELLO000.
000030 ENVIRONMENT DIVISION.
000040 DATA DIVISION.
000050 PROCEDURE DIVISION.
000060 DISPLAY 'Hello World em COBOL !'.
000070 STOP RUN.
000080Colunas de 1 a 7 -> padrão COBOL explicacao detalhada no capitulo sobre essa linguagem.
Entry point - é onde se inicia a execucao de um programa, isto significa que após a chamada, quando o controle é passado do chamador para o chamado o processamento se inicia nesse ponto. O mainframe possui regras rigidas de controle de chamada entre chamadores e chamados, mas não se preocupe no momento com isso, em momento oportuno exemplos surgirão.
ou em C
1 definicao da funcao inicial/principal do programa (entry point). 2 e 4 delimitam a função. 3 Comando para enviar mensagem nem precisa do #include <stdio.h>, tem um lance de trigraphs que era o demonio, mas ja devem ter arrumado isso hoje em dia! Enfim, se precisar o } é ??< e o } é ??>, ta aqui uma tabelinha se precisar
ou em HLASM (High Level Assembler)
1 identifica o início ou a continuação de uma Control Sect 2 indica que o registrador base é o 15 registrador 15 contem o endereço do entry point 3 "comando" para enviar mensagem pro operador WTO - write to operator é uma "macro" 4 Retorna pro registrador 14, isto é, volta pro chamador 5 Fim da CSECT (do nosso programa propriament dito. Especifica o entry point para o link editor ou loader
ou mesmo em PL/1
1 Identificação do programa, procedimento principal (entry point). 2 "Escreve" o que esta contido no argumento 3 Encerra o programa
Ou ainda em REXX
1 - "Cabeçalho" - obrigatorio conter a palavra REXX 2 - Say é o comando para emitir mensagens 3 - Encerra bonito
Para executar seu programa você precisa antes, basicamente, compila-lo e linkedita-lo. Mas como ? Se você acabou de dizer que o JCL precisa dizer tudo que o mainframe precisa saber para realizar isso, esqueceu que não sei JCL ainda ? Boa pergunta !
Mas como aqui em cima eu dei um exemplo de hello world em REXX, vou aproveitar e ensinar você a rodar programas REXX direto do TSO, é extremamente simples, na tela de edição de datasets por exemplo, você só precisa colocar um EX do lado do dataset que ele executara o seu programa em REXX!
Na tela aparece ----------------------------- ISPF/PDF -----------------------------
você tambem pode executar via comando (geralmente tela 6 do TSO) ou prompt mesmo, mais ou menos assim:
TSO EXEC ‘BUGA.HELLO.REXX’
E também pode rodar via JCL sem nenhum problema chamando o utilitário IRXJCL ou mesmo chamando o IKJ e executando o comando igual na tela 6, ja ja quando montarmos um JCL vai dar pra entender.
No sistema que você estiver acessando existem procedures padrão que realizam muitas das tarefas que deparamos no dia-a-dia. Compilar um programa, linkedita-lo e executa-lo é uma delas ! Essas procedures ficam em bibliotecas do proprio sistema operacional, em sua empresa devem existir procedures especificas para esse mesmo fim porém customizadas para as suas necessidades.
Para executar essas procedures você também precisa utilizar o JCL ! Em termos simplistas quando utilizamos o JCL com poucas instruções chamamos o conjunto da obra de JOB, o que causa confusao num primeiro momento porque o "cabeçalho de um" job é tecnicamente conhecido como JOB, ao longo do texto tentaremos utilizar cabeçalho a job, mas não garanto que não passe algum job com sentido de cabeçalho. Se a parada for mais aprimorada costuma-se chamar de procedure, procedimento catalogado ou simplesmente PROC.
Mas fica a gosto do fregues como chamar o conjunto de instruções JCL, sugiro seguir o padrão de nome que sua empresa utiliza.
O processo de como um codigo fonte se torna um programa executável ocorre em etapas e isso se faz necessário pois, todas as linguagens dos nossos hello wold são linguagens do tipo compilada e é necessário - minimalisticamente falando - primeiro compilar seu codigo fonte do programa e na sequencia linkedita-lo gerando um carga (executavel) e depois executar esse carga.
Um JOB consiste de parâmetros individuais com utilizacao, exemplos e sintaxe descritas com detalhamento impar nos manuais de JCL da IBM. O JCL é chato, tudo deve ser dito exatamente como manda o figurino, o posicionamento de espaços, virgulas, segue um padrao, onde deve ficar cada elemento também e caso algo não esteja conforme o esperado um erro será apresentado na submissão desse JOB.
Vamos supor, apenas supor que você já tem o codigo executavel (carga) de nosso hello world em COBOL e deseja executa-lo, com o JOB abaixo isso é possivel
você foi formalmente apresentado ao JCL !
Recaptulando e tentando nao deixar nada pra trás nessa introdução.
O JCL informa pro sistema operacional um monte de 'coisas' que sao necessárias pra execução da tarefa que esta sendo submetida, temos por exemplo, o nome do programa ou mesmo de outro JCL , o DD Name (8 bytes internos ao programa e linka com o jcl) além do arquivo em si com todos seus qualificadores, que é o DS name (até 44 caracteres), informa o tamanho dos registros, se o arquivo é novo, se já existe, o que fazer em caso de erro anormal no processamento, quanto tempo deve ser o maximo pra rodar o job, se é pra avisar alguem quando terminar a execução, se deleta os arquivos temporarios, se começa o processamento do começo ou à partir de algum outro ponto, enfim, um mar de 'coisas' devem ser repassadas pra tudo rodar redondinho. A parte do sistema operacional que faz o bem bolado dos JCLs é o JES (Job Entry System) , falaremos dele ainda nesse capitulo.
Last updated