cobol query 1 -...

28
COBOL Query 1.0 Ferramenta para extração de dados em arquivos COBOL Aluno: André Luiz Jacinto Orientador: Adilson Vahldick

Upload: ledieu

Post on 10-Jul-2018

258 views

Category:

Documents


3 download

TRANSCRIPT

COBOL Query 1.0

Ferramenta para extração de dados em arquivos COBOL

Aluno: André Luiz JacintoOrientador: Adilson Vahldick

Roteiro

• Introdução• Objetivos do trabalho• Fundamentação teórica• Desenvolvimento do trabalho• Implementação da geração de código• Conclusões• Extensões

Introdução

• Utilização do COBOL– Transações em mainframes– Dados financeiros e de seguros– Grande relevânica

• Deficiência na visualização de informações– Não visualiza-se diretamente as informações

• Motivação e utilidade– Desenvolvimento da ferramenta (SQL)– Foco nas empresas de desenvolvimento e clientes de

aplicações COBOL

• Escolha da linguagem Java

Objetivos do trabalho

• Desenvolvimento de uma ferramenta para extração de informações em bases de dados COBOL

– Cadastro do metadados• Características sobre os arquivos

– Digitação de comandos• Comandos DML (pertencente a SQL) de consulta

– Analises• Léxica, sintática e semântica

– Geração de código• Acesso aos arquivos• Utilização de templates

– Compilador COBOL• Configuração de um compilador externo

Fundamentação teórica

• Acesso e organização de arquivos de dados COBOL

– Formas de acesso• Acesso seqüencial• Acesso direto ou randômico

– Formas de organização• Organização seqüencial• Organização indexada• Organização relativa

Fundamentação teórica

• Motores de templates– Código dinâmico e estático

• Funcionamento

Fundamentação teórica

• Velocity e VTL– Referências

– Diretivas

– Comentários

O meu nome eh $meuNome!!!

$usuario.setNome("Fulano de tal")

#set ($idade = 21)

#if ($v1 == $v2) sao iguais #else ...

#end

#foreach ($nome in $nomesList)

Olá $nome

#end

#include (“meuarquivo.txt”)

#macro (criaLinha $nome) <tr><td>$nome</td></tr>

#end

<table> #foreach ($nome in $nomes)

#criaLinha($nome) #end</table>

## Em uma única linha#*Em váriaslinhas*#

Fundamentação teórica

• Geração de código– Passos para geração (Herrington)

• Possuir o código de testes• Projetar o gerador• Implementar a análise dos dados de entrada• Desenvolver os templates• Verificar a saída

– Problemas (Moreira e Mrack)• Funcionamento em uma única via• Padrão e qualidade do código

Fundamentação teórica

• Trabalhos correlatos– ConnectWare

• Driver ODBC para conexão em bases de dados COBOL

– Totem• Pacote de ferramentas para geração de código COBOL

– Delphi2Java-II (Extensão)• Converte aplicações Delphi para aplicações Java

(componentes de tela e de banco de dados)• Analisadores

Desenvolvimento do trabalho

• Requisitos funcionais

– Cadastro do metadados– Análises léxica, sintática e semântica, informando ao usuário

possíveis erros– Somente o comando DML select com conceitos de projeção,

junção e seleção– Acessar arquivos seqüenciais e indexados– Gerar código COBOL em tempo de execução– Utilizar templates para geração do código COBOL– Compilar o código de saída, construindo um programa

executável para acesso aos arquivos– Saída da execução do programa gerado em arquivo temporário,

efetuando a leitura do mesmo pela ferramenta

• Requisitos não-funcionais

– Dar suporte a diferentes fabricantes de compiladores COBOL

– Gravar o metadados em arquivo do tipo XML

Desenvolvimento do trabalho

Desenvolvimento do trabalho

• Técnicas e ferramentas utilizadas na especificação

– Diagramas pertencentes a UML• Ferramenta Enterprise Architect

– Divisão do sistema em camadas• Modelo, visão e controle (padrão MVC)

Desenvolvimento do trabalho

• Modelo de casos de uso• UC01 – Cadastrar banco de dados:

– o usuário da ferramenta cadastra um banco de dados.

• UC02 – Cadastrar layout:– o usuário da ferramenta cadastra

um layout;– tem-se como precondição o

cadastro de pelo menos um banco de dados;

– no cadastro de layout o usuário pode optar por cadastrar um campo (<<extend>> UC03 – Cadastrar campo) ou cadastrar uma chave (<<extend>> UC04 – Cadastrar chave);

– um layout significa uma referência lógica a um arquivo de dados COBOL.

• UC03 – Cadastrar campo:– o usuário da ferramenta cadastra

um campo;– tem-se como precondição um

layout cadastrado ou em processo de cadastramento.

• UC04 – Cadastrar chave:– o usuário da ferramenta cadastra

uma chave;– tem-se como precondição um

layout cadastrado ou em processo de cadastramento.

• UC05 – Parametrizar sistema:– o usuário parametriza a ferramenta;– informa-se o banco de dados

padrão, o caminho do arquivo de compilação e o tempo para time out;

– o arquivo de compilação deve conter comandos para:

• Compilação do código COBOL;• Geração do arquivo binário;• Execução do arquivo binário.

– o tempo para time out é o tempo limite entre geração do código COBOL e finalização da execução do arquivo binário, simbolizada pela geração do arquivo de resultado;

– tem-se como precondição um banco de dados cadastrado e o arquivo de compilação configurado.

• UC06 – Executar consulta (query):– o usuário executa uma consulta

SQL;– tem-se como precondição o

cadastro de pelo menos um layout e o sistema parametrizado;

– a ferramenta poderá gerar código e invocar a compilação do código gerado (<<extend>> UC07 –Compilar código gerado).

• UC07 – Compilar código gerado:– o compilador (parametrizado no

arquivo de compilação) trata o código gerado e o executa, gerando o arquivo de resultado.

Desenvolvimento do trabalho

Desenvolvimento do trabalho

• Modelo de pacotes

Desenvolvimento do trabalho

• BNF

– Escolha• Trabalho final da disciplina de Banco de Dados II

– Alterações• Excluídas cláusulas para agrupamento• Excluídas cláusulas para ordenação• Excluídos comandos: insert, update e delete• Inserção de novas ações semânticas

Desenvolvimento do trabalho

• Técnicas e ferramentas utilizadas na implementação

– Linguagem de programação e bibliotecas• Java com o JDK versão 1.5.0• Biblioteca SWT• Biblioteca Velocity 1.4

– Ferramentas• Ambiente de desenvolvimento Eclipse, juntamente com o

plug-in Visual Editor• Ferramenta GALS• Ferramenta Micro Focus NetExpress

Implementação da geração de código

• Fase 1 – Possuir o código de testes

– Implementação do código COBOL de testes• Utilizada a ferramenta Micro Focus

NetExpress• Leitura de arquivos seqüenciais e

indexados• Grava arquivo de resultado

• Fase 2 – Projetar o gerador

Implementação da geração de código

• Fase 3 – Implementar a análise dos dados de entrada

– Implementação das classes• controller.codegenerate.SqlToCobol

• controller.codegenerate.CobolGenerate

Implementação da geração de código

• Fase 4 – Desenvolver os templatesidentification division.

program-id. $identificationDivision.getProgramId()....0000-control section.0000-begin.

perform 1000-initperform 2000-processperform 3000-finish.

0000-exit.exit program.stop run....1000-init section.1000-begin.

#foreach($selectFile in $environmentDivision.getSele ctFileList())#if (!$selectFile.getType().equalsIgnoreCase("CTRL_ SF"))move "$selectFile.getFilePath()" to wid-$selectFile .getFdId().open $selectFile.getOpenType() $selectFile.getFdId( ).#end#end 1

000-exit.exit....

Implementação da geração de código

• Fase 5 – Verificação da saída

– Equivalência entre o código gerado e o código de testes

– Equivalência entre o código gerado e o comando informado

Implementação da geração de código

Resultados e discussão

• Comparativo com ConnectWare

– Por que CobolQuery?

Resultados e discussão

• Desempenho (2,4 GHz e 512 Mb)

– Análises• 0,4 segundos

– Geração de código• 0,6 segundos

– Compilação• 1 segundo

– Execução do arquivo binário e leitura do arquivo de resultado

• 1 segundo (exponencial ao número de registros)

Conclusões

• SQL– Linguagem de acesso a banco de dados mais utilizada

• Flexibilidade– Utilização de templates– Compilador externo a ferramenta

• Geração de código– Recursos do COBOL

• MVC– Proporciona fácil extensão, adaptação e manutenção

Conclusões

• Desafios– Geração de código– Velocity, VTL e SWT– MVC– COBOL

• Relevância Pessoal– Conhecimento de novas tecnologias

(MVC, geração de código,...)

Extensões

• Comandos, operações e funções

– Comandos order by, group by, having e join– Operações agregadas (AVG, MIN, MAX,...) e operações

matemáticas– Função like

• Arquivo de resultados– Leitura do arquivo de resultados em XML

• COBOL– Função redefines

• IDE– Geração de código

Fim

Obrigado pela atenção

COBOL

Query