Upload
ledieu
View
259
Download
3
Embed Size (px)
Citation preview
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
• 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
• 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 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
• 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