UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO Migrador Universal de Dados Filipe Ferreira Florianópolis - SC 2007/1 Filipe Ferreira Migrador Universal de Dados Orientador: Prof. João Bosco Mangueira Sobral Banca Examinadora: Márcio Clemes Guilherme Arthur Geronimo Índice Índice ..................................................................................................................... 3 1. Introdução ........................................................................................................ 5 2. Objetivos .......................................................................................................... 6 2.1 Objetivos Gerais ............................................................................................ 6 2.2 Objetivos Específicos..................................................................................... 6 3. Visão Geral do Sistema ................................................................................... 6 4. Primeiro Protótipo ............................................................................................ 7 4.1 Casos de Uso ................................................................................................ 7 4.1.1 Adicionar parâmetros conversor ................................................................. 7 4.1.2 Editar parâmetros conversor....................................................................... 8 4.1.3 Remover parâmetros conversor ................................................................. 8 4.1.4 Adicionar configuração conversor ............................................................... 9 4.1.5 Editar configuração conversor .................................................................. 10 4.1.6 Remover configuração conversor ............................................................. 11 4.1.7 Configurar Conversor................................................................................ 11 4.1.8 Executar migração .................................................................................... 12 4.1.9 Executando migração ............................................................................... 12 4.1.10 Extrair Dados da Base ............................................................................ 13 4.1.11 Inserir Dados na Base ............................................................................ 13 4.2 Diagrama de Classes................................................................................... 14 5. Tecnologias Utilizadas ................................................................................... 16 5.1 Java ............................................................................................................. 16 5.2 JDOM........................................................................................................... 18 5.3 XML ............................................................................................................. 19 6. Referências.................................................................................................... 21 Lista de Figuras Figura 4.1 – Controle da Migração.........................................................................14 Figura 4.2 – Inicialização dos Conversores............................................................15 Figura 4.3 – Manipulação dos Conversores...........................................................16 1. Introdução Bancos de dados são conjuntos de dados com uma estrutura regular que organizam informação. Um banco de dados normalmente agrupa informações utilizadas para um mesmo fim. Um banco de dados é usualmente mantido e acessado por meio de um software conhecido como Sistema Gerenciador de Banco de Dados (SGBD). Normalmente um SGBD adota um modelo de dados, de forma pura, reduzida ou estendida. Muitas vezes o termo banco de dados é usado como sinônimo de SGDB. O modelo de dados mais adotado hoje em dia é o modelo relacional, onde as estruturas têm a forma de tabelas, compostas por linhas e colunas. Com o aumento do uso dos computadores e aplicativos nas últimas décadas, foram criados um grande número de diferentes tecnologias para gerenciamento de dados. Essas tecnologias vão desde sistemas com arquivos de texto até sistemas relacionais ou não relacionais de banco de dados de grande porte. Independente do tipo de armazenamento de dados existente, o que na época era a melhor solução, hoje está desatualizado. Nestes casos, é tomada a decisão de migrar os dados de um sistema para outro. A tecnologia desatualizada não é o único motivo para a migração dos dados. Outros motivos incluem um menor custo total de propriedade, melhor desempenho, consolidação de diferentes tecnologias e permitir o acesso multiusuário aos dados. A UFSC possui uma quantidade de dados significativa em sistemas obsoletos. Atualmente a universidade possui uma base de dados integrada que precisa ser alimentada com os dados dos sistemas antigos. Para realizar a migração destes dados, este projeto propõe a criação de um software migrador de dados visando à automatização do processo de migração dos dados. 2. Objetivos 2.1 Objetivos Gerais O Migrador de Dados tem como objetivo a extração dos dados de uma base de dados de entrada qualquer e a inserção destes dados em uma base de dados de saída qualquer, ambas definidas pelo usuário. 2.2 Objetivos Específicos O software possuirá interfaces de fácil utilização, de modo que o usuário alcance suas metas de interação com o sistema. Os dados serão extraídos da base de dados de entrada por um conversor de dados de entrada e inseridos em uma estrutura de dados. A estrutura de dados será utilizada pelo conversor de saída para a inserção dos dados na base de dados destino. A migração será feita por um módulo controlador que solicitará aos conversores a extração dos dados da base de entrada e inserção destes dados na base destino. As bases de dados de entrada e saída devem ser previamente selecionadas pelo usuário. 3. Visão Geral do Sistema O Migrador está sendo implementado com o objetivo de solucionar problemas com a migração das informações das bases de dados antigas utilizadas pelos sistemas da UFSC para a base de integração dos sistemas. Porém o Migrador será implementado com um objetivo maior. A idéia do software é abstrair as bases de dados de modo que a migração seja feita de uma base de entrada qualquer para uma base de dados destino qualquer. Para isso o software deverá ser genérico, extensível e de fácil utilização. Genérico, pois a migração poderá ser feita usando bases de dados qualquer. Extensível, pois o usuário poderá incluir tantas bases de dados quanto necessárias para realizar a migração. Fácil utilização utilizando interfaces amigáveis e fáceis de serem manuseadas. 4. Primeiro Protótipo 4.1 Casos de Uso 4.1.1 Adicionar parâmetros conversor Fluxo Básico 1. O sistema apresenta a tela Inserir Parâmetro 2. O usuário preenche os campos (Nome, Regex) 3. O usuário confirma a operação 4. O sistema realiza a validação dos campos 4.1 O sistema verifica se o campo nome está preenchido 5. O sistema armazena o parâmetro 6. O sistema finaliza a operação. Fluxo Alternativo 1 No passo 4, caso o usuário não tenha preenchido o campo nome, o sistema emitirá uma mensagem de erro. Fluxo Alternativo 2 Do passo 1 ao 4, o usuário pode cancelar a operação. 4.1.2 Editar parâmetros conversor Fluxo Básico 1. O sistema apresenta a tela Editar Parâmetro 2. O sistema preenche os campos (Nome, Regex) 3. O usuário altera os campos (Nome, Regex) 4. O sistema realiza a validação dos campos 4.1 O sistema verifica se o campo nome está preenchido 5. O sistema armazena o parâmetro 6. O sistema finaliza a operação Fluxo Alternativo 1 No passo 4, caso o usuário não tenha preenchido o campo nome, o sistema emitirá uma mensagem de erro. Fluxo Alternativo 2 Do passo 1 ao 4, o usuário pode cancelar a operação. 4.1.3 Remover parâmetros conversor Fluxo Básico 1. O usuário seleciona o parâmetro desejado 2. O usuário confirma a operação 3. O sistema remove o parâmetro selecionado. 4.1.4 Adicionar configuração conversor Fluxo Básico 1. O sistema apresenta a tela Inserir Configuração Conversor 2. O usuário preenche os campos (Nome, Classe) 3. O usuário adiciona os parâmetros do conversor (ver Caso de Uso Adicionar parâmetros conversor) 4. O usuário confirma a operação 5. O sistema realiza a validação dos campos 5.1 O sistema verifica se o campo nome está preenchido 5.2 O sistema verifica se o campo classe está preenchido 6. O sistema armazena a configuração 7. O sistema finaliza a operação Fluxo Alternativo 1 Antes de realizar o passo 4, o usuário poderá editar parâmetros (ver Caso de Uso Editar parâmetros conversor) ou remover parâmetros (ver Caso de Uso Remover parâmetros conversor) Fluxo Alternativo 2 Do passo 1 ao 4, o usuário pode cancelar a operação. Fluxo Alternativo 3 No passo 5, caso o usuário não tenha preenchido um dos campos, nome ou classe, o sistema emitirá uma mensagem de erro. 4.1.5 Editar configuração conversor Fluxo Básico 1. O sistema apresenta a tela Editar Configuração Conversor 2. O sistema preenche os campos(Nome, Classe) 3. O sistema preenche a tabela de parâmetros 4. O usuário edita os os campos(Nome, Classe) 5. O usuário edita os parâmetros do conversor 5.1 O usuário adiciona parâmetros (ver Caso de Uso Adicionar parâmetros conversor) 5.2 O usuário edita parâmetros (ver Caso de Uso Adicionar editar conversor) 5.3 O usuário remove parâmetros (ver Caso de Uso Adicionar remover conversor) 6. O usuário confirma a operação 7. O sistema realiza a validação dos campos 7.1 O sistema verifica se o campo nome está preenchido 7.2 O sistema verifica se o campo classe está preenchido 8. O sistema armazena a configuração 9. O sistema finaliza a operação Fluxo Alternativo 1 Antes de realizar o passo 6, o usuário poderá retornar ao passo 5 Fluxo Alternativo 2 Do passo 1 ao 5, o usuário pode cancelar a operação. 4.1.6 Remover configuração conversor Fluxo Básico 1. O usuário seleciona a configuração que deseja remover 2. O usuário confirma a operação 3. O sistema remove a configuração selecionada. 4.1.7 Configurar Conversor Fluxo Básico 1. O usuário seleciona o conversor que deseja configurar 2. O usuário solicita ao sistema a configuração do conversor 3. O sistema apresenta a tela Configurar Conversor 4. O sistema insere os parâmetros do conversor 5. O usuário fornece os valores dos parâmetros do conversor 6. O usuário confirma a operação 7. O sistema finaliza a operação. Fluxo Alternativo 1 No passo 5, se o usuário não preencher os valores dos parâmetros o sistema emitirá uma mensagem de erro. 4.1.8 Executar migração Fluxo Básico 1. O usuário executa a configuração do conversor de entrada (ver Caso de Uso Configurar Conversor) 2. O usuário executa a configuração do conversor de saída (ver Caso de Uso Configurar Conversor) 3. O usuário confirma a operação 4. O sistema executa a migração (ver Caso de Uso Executando migração) 5. O sistema finaliza a operação. Fluxo Alternativo Nos passos 1 e 2, caso o usuário não selecione os conversores ou um deles o sistema emitirá uma mensagem de erro. 4.1.9 Executando migração Fluxo Básico 1. O sistema solicita ao conversor de entrada a extração dos dados da base de dados de entrada (ver Caso de Uso Extrair Dados da Base) 2. O conversor de entrada retorna os dados extraídos ao sistema 3. O sistema solicita ao conversor de saída a inserção dos dados na base de dados de saída (ver Caso de Uso Inserir Dados na Base) 4. O conversor de saída insere os dados na base destino. 5. O sistema finaliza a operação. Fluxo Alternativo Nos passos 1, 2, 3 e 4, caso haja falha em algum dos processos o sistema retornará uma mensagem de erro. 4.1.10 Extrair Dados da Base Fluxo Básico 1. O conversor conecta-se ao banco de dados 2. O conversor executa uma consulta no banco de dados 3. O conversor retorna os dados da consulta 4. O sistema finaliza a operação. Fluxo Alternativo Nos passos 1, 2 e 3, caso haja falha em algum dos processos o sistema retornará uma mensagem de erro. 4.1.11 Inserir Dados na Base Fluxo Básico 1. O conversor conecta-se ao banco de dados 2. O conversor executa uma inserção no banco de dados 3. O sistema finaliza a operação. Fluxo Alternativo Nos passos 1 e 2, caso haja falha em algum dos processos o sistema retornará uma mensagem de erro. 4.2 Diagrama de Classes Figura 4.1: Controle da Migração Nesta primeira figura do diagrama de classes temos a classe MigraçãoController que é responsável pelo controle da migração. A migração é feita através do método executaMigracao() que solicita ao conversor de entrada a extração dos dados e envia estes dados ao conversor de saída que realiza a inserção destes dados no banco destino. O controlador agrega duas classes abstratas: a classe ConversorEntrada e a Conversor Saída. Estas duas classes possuem dois métodos que devem ser implementados pelos conversores de entrada e saída. O método configura recebe os parâmetros para realizar a conexão com o banco de dados e o método converte realiza a conexão com o banco de dados de origem e extrai os dados no caso de um conversor de entrada. Sendo um conversor de saída, o método converte conecta-se ao banco de dados de destino e realiza a inserção dos dados extraídos. Figura 4.1: Inicialização dos Conversores Estas duas classes realizam a extração de todos os conversores de entrada e saída já existentes no sistema e são colocados em uma estrutura de dados HashMap.1 A chave para acessar um valor do HashMap é o nome do conversor. Logo na inicialização do sistema estes HashMap conversoresMap é alimentado para que o sistema tenha todos os conversores com suas respectivas configurações em memória.Isto melhora o desempenho do programa pois não é necessário acessar a estrutura de armazenamento dos conversores a medida que conversores são solicitados. O acesso a um determinado conversor é feito pela chamada getConversorEntrada ou getConversorSaida. 1 HashMap é uma estrutura de dados que possui dois parâmetros. O primeiro é uma chave utilizada para realizar o acesso ao segundo parâmetro que é o valor armazenado nessa estrutura. Figura 4.2: Manipulação dos Conversores Os conversores são armazenados em um documento XML Este documento é um atributo da classe ConfiguradorXML. Esta classe é responsável pela manipulação do arquivo XML. Já a classe ConfiguradorConversor manipula os conversores, realizando a inserção, edição ou remoção dos conversores no sistema e no documento XML. 5. Tecnologias Utilizadas 5.1 Java Java é uma linguagem de programação de alto-nível simples, robusta, orientada a objetos, multiplataforma e que utiliza uma máquina virtual para a geração de código de máquina. Na linguagem de programação Java, todo o código é primeiro escrito em arquivos com a extensão .java. Estes arquivos são compilados em arquivos .class pelo compilador javac. O arquivo .class não possui a linguagem nativa dos computadores, em vez disso possuem bytecodes – a linguagem da Java Virtual Machine que compila para a linguagem de máquina. A plataforma Java é composta por 2 componentes: Java Virtual Machine (JVM) Java Application Programming Interface (API) Já mencionamos a JVM. A API nada mais é que um conjunto de classes que fornecem uma enorme quantidade de funcionalidades aos programadores. São agrupadas em bibliotecas de classes relacionadas, conhecidas como pacotes (packages). Java se divide em três grandes edições. Java 2 Standard Edition (J2SE): É a tecnologia Java para computadores pessoais, notebooks. Várias APIs acompanham esta versão e outras podem ser baixadas opcionalmente no site da Sun. É com elas que a maioria das aplicações são construídas e executadas. O J2SE possui duas divisões: o Java Development Kit (JDK) ou Standard Development Kit (SDK): um conjunto para desenvolvimento em Java. o Java Runtime Edition JRE: uma versão mais leve da JDK esta versão que executará os sistemas construídos com a SDK. Java 2 Mobile Edition (J2ME): É a tecnologia Java para dispositivos móveis. Possui APIs bem simples e leves para economizar espaço, memória e processamento. São utilizadas para sistemas em celulares, palm tops, pocket pcs, smartphones, javacards e demais dispositivos. O J2ME se divide em dois grupos de bibliotecas. É dividida em dois grupos: o Connected Limited Device Configuration (CLDC): Para celulares e smartphones, que são mais limitados o Connected Device Configuration (CDC): Para Palmtops e Pocket pcs e alguns dispositívos mais poderosos. Java 2 Enterprise Edition (J2EE): É a tecnologia Java para aplicações corporativas que podem estar na internet ou não. Possui um grande número de APIs onde a segurança é a principal preocupação. É ideal para a construção de servidores de aplicação, integração de sistemas ou distribuição de serviços para terceiros. 5.2 JDOM JDOM é uma API Java, open source (Application Programming Interface) desenvolvida visando o acesso, a manipulação e produção de dados XML a partir do código Java gerado. A biblioteca JDOM possui seis pacotes. O primeiro é o org.jdom que contém as classes representando um documento XML e seus componentes: atributos, CDATA, comment, DocType, Document, Element, EntityRef, Namespace, ProcessingInstruction, e Text. O segundo pacote é o org.jdom.input que fornece classes para a construção de um documento XML. A principal e mais importante classe é a SAXBuilder. SAXBuilder constrói documento através dos eventos SAX (Simple Api for XML) emitidos e formulando assim o documento XML correspondente. Outro construtor utilizado para documentos XML é o DOMBuilder que cria um documento a partir de uma árvore DOM (Document Object Model). O pacote org.jdom.output que provê classes para a saída de documentos XML. A principal classe é a XMLOutputter que converte documentos XML para uma seqüência de bytes que pode ser utilizado para a criação de um arquivo XML, por exemplo. Outros exemplos para a criação de um documento de saída: SAXOutputter que gera eventos SAX baseados no conteúdo do documento XML. Existem outras alternativas também como DOMOutputter, que cria uma representação do documento em uma árvore DOM. Outro pacote é o org.jdom.transform que permite incorporar transformações XSLT (eXtensible Stylesheet Language for Transformation – linguagem de folhas de estilo extensível para transformação). XSLT é uma linguagem de marcação usada para transformar documentos XML através do uso de folhas de estilos. Uma transformação XML é um processo que reorganiza partes de um documento para um novo formato. Por exemplo: suponha um documento em uma aplicação XML. Este documento não pode ser visto nos navegadores mais antigos, que entendem apenas HTML, mas você pode transformá-lo em XHTML permitindo assim a visualização do documento em navegadores HTML. O org.jdom.xpath que contém classes para a busca de informações em um documento XML. O XPATH é uma linguagem de consultas usada para navegar através dos elementos e atributos em um documento XML. E o pacote org.jdom.adapters que contém classes que auxiliam a biblioteca a interagir com o DOM. 5.3 XML XML é uma linguagem de marcação desenvolvida por um grupo de empresas e organizações denominado World Wide Web Consortium (W3C). Uma linguagem de marcação é um conjunto de símbolos que pode ser colocado no texto de um documento para demarcar e rotular as partes desse documento. A marcação é determinada pelas tags delimitadas pelos símbolos de início (<) e fim (/>). Um documento XML é a unidade básica de informação XML. É composto por elementos que se distribuem de forma hierárquica, sendo o elemento mais alto da hierarquia denominado de elemento raiz (root) e os elementos abaixo da raiz constituem os elementos-filhos. A linguagem XML vem sendo muito utilizada para realizar troca de informações entre sistemas que possuem arquitetura fechada. Isto devido a sua característica independente da plataforma que os sistemas utilizam. Algumas pessoas confundem XML com HTML que são duas linguagens bem diferentes: XML foi projetado para descrever os dados enquanto que a HTML realiza a exibição dos dados. XML não possui tags pré-definidas, você define suas tags de acordo com a sua aplicação. Para um documento XML ser bem formado ele passa por uma validação feita por um analisador (parser) que basicamente verifica a sintaxe e a estrutura do documento. A estruturação de um documento define quais os elementos aceitos em um documento XML. É definido através de um DTD (Document Type Definition) ou por XSD (XML Schema Definition). 6. Referências W3C – Extensible Markup Language (XML). Disponível em: <http://www.w3.org/XML/> JDOM – Disponível em http://www.jdom.org/index.html Deitel M. H., Deitel J. P. Java Como Programar. 6. ed. São Paulo, 2005. 1152 p. Sun – The Java Sun <http://java.sun.com/docs/books/tutorial/ > Tutorials. Disponível em: