SEÇÃO JAVA: NESTA SEÇÃO VOCÊ ENCONTRA ARTIGOS INTERMEDIÁRIOS E AVANÇADOS SOBRE JAVA JasperETL A plataforma de integração de dados da A pesar de todos os avanços que arquiteturas com SOA trazem para a integração entre sistemas corporativos, a integração via transferência de dados ainda é amplamente utilizada nas corporações. Pensando nisto, e para incrementar a sua plataforma de BI (que inclui o popular JasperReports), em Janeiro de 2007 a JasperSoft assinou uma parceria com a Talend SA. A Talend é uma companhia francesa com produtos de código aberto na área de integração de dados, entre eles o Open Studio, que passou a fazer parte da solução Jasper BI Suite como JasperETL. O que é ETL? Extract, Transform and Load, em inglês captura, transformação e carga. É a expressão que denomina ferramentas que facilitam a integração de sistemas via integração de dados. Estas ferramentas geram aplicações para tratamento de dados em lote (batch), que podem usar várias fontes de dados diferentes: arquivos nos mais diversos formatos (por exemplo, XML, CSV, posicional, etc.), bases de dados, web services, e-mail, e LDAP; realizar transformações nestes dados, como join, lookup, eliminação de duplicados, cálculos e outros; e por ultimo enviar os resultados para outro sistema. O JasperETL permite a geração de aplicações que efetuam estas transformações utilizando um ambiente gráfico, definindo a seqüência de passos necessária como um conjunto de componentes ligados entre si, sem ser necessário escrever código. Isto facilita a adoção da ferramenta em ambientes onde os profissionais possuem conhecimento da lógica de negócio e da estrutura dos dados a serem manipulados, porém, não têm intimidade com a linguagem Java. Dentro da área em questão, a de integrar sistemas via transferência de dados, este é um fator importante que todas as ferramentas acompanham. Inclusive, o JasperETL tem uma seção específica, o Business Modeler, para gerar diagramas de negócio Resumo DevMan De que se trata o artigo: O artigo apresenta a ferramenta JasperETL, que permite a geração de aplicações para tratamento de dados em lote, apresentando os seus conceitos e ilustrando com a construção de um exemplo completo. Para que serve: Este artigo serve para poder assimilar mais rapidamente os elementos desta ferramenta e o seu correto uso. Ele acelera o aprendizado apresentando conceitos que não são óbvios na documentação existente e passando por um exemplo que exercita rapidamente os mesmos. Em que situação o tema é útil: Focado especialmente em ambientes de produção, a ferramenta facilita a automação de tarefas rotineiras e ajuda na integração de sistemas heterogêneos via importação e exportação de dados. Pode ser usada por pessoas familiares com ambientes de programação e com linguagens de scripts, porém não necessariamente especialistas Nota do DevMan Veja o que você vai aprender adicionalmente neste artigo: • O conceito de BPEL; • A definição de LDAP. em Java. Permite a elaboração rápida de rotinas de transferência e carga de dados, mantendo uma plataforma mais homogênea de aplicações auxiliares sem precisar sair da linguagem Java. JasperETL: Use a ferramenta no lugar de scripts para automatizar processos e tarefas comuns num ambiente de produção como importar e exportar dados. Configure as fontes de dados e as estruturas no Repositório para poder reutilizar rapidamente. Arrastre e solte os elementos do repositório diretamente na área de trabalho, eles serão substituídos pelos componentes necessários automaticamente. Complemente com elementos da paleta de componentes e ligue os mesmos através das opções de Row e Trigger. Com prática, o exemplo do artigo pode ser montado em 10 minutos. 26 Java Magazine • Edição 62 J $POIFÎBBGFSSBNFOUBRVF QFSNJUFJOUFHSBSEBEPTEBT NBJTEJWFSTBTGPOUFTDPN TJNQMJDJEBEF +BTQFS4PGU PABLO JORGE MADRIL ȱȱȱȱȱȱȱ melhor o problema, separada do Job Deǰȱȱȱȱàǯ Instalação do JasperETL ȱȱȱȱ·ȱ¤ȱȱ previamente instalada uma versão da Java ȱȱǻǼȱŗǯśȱȱǯȱ ȱ¹ȱ·ȱ¤ȱȱ ȱŘŖŖŖǰȱ¤ȱ ¤ȱȱȱȱƸȱȱȱ ȱ ȱ ȱ ȱ ȱ ǯȱ äȱ ȱ ȱŘŖŖřȱȱȱȱǻȱȱ Ǽȱ¤ȱ£ȱȱȱǯ ¡ȱȱ¨ȱȱȱȱȬ TL Community EditionȱǻŘǯřǯŘȱȱȱ ȱȱȱǼȱȱȱȱ àȱ ȱ ȱ ¹ǯȱ ȱ ȱ ȱȬȬŗŘŝŖŝȬŘǯřǯŘȱ¹ȱȬ ȱȱ¡¤ȱȬ řŘȬ¡ŞŜǯ ¡ȱǻȱȱ¨ȱÇȱȱȱȱ ǯǯǼȱȱ¤ȱȱȱǯ ȱȱ³äȱȱȱȱȱ Jasper ou também o site do Talend, que possui tutoriais e um eco-sistema de comȱ Çȱ ȱ ȱ ǯȱ ȱǰȱȱȱȱȱDZȱ ȱȱȱȱȱȱȱȱ DZȱ ǯȱ ȱ ȱ ¥ȱ ȱȱûȱȱ¨ȱȱȱ ³¨ȱȱȱȱȱǯ ȱǻȱȱquadroȱȃȱȱǵȄǼȱȱ ȱȱ¤ȱ¡ǯȱ·ȱȱ ȱ³¨ȱȱȱȱȱȃȄǯȱ ȱȱȱȱ·ȱȱȱǯȱ ȱǰȱȱ¤Ȭȱȱȱ ¨ȱǯ ȱ£ȱȱȱȱȱǰȱ ȱ ȱ £ȱ ȱ ȱ , ȱȱȱŜȱȱȱȱȱRun Job e aperte o botão Runȱȱȱȱȱȱ ȱ¤ȱȱǯȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȃ ȱ Ȅȱ ǻȱ ȱȱ quadroȱȃȱ£³¨ȱȱ¡ȄǼǯ A ferramenta ȱȱȱ·ȱÇȱ£ȱȱ ȱȱȱǰȱȱȱ ȱȱȱȱȱȱȱȱȱȱ¡ȱ ȱȱȱàǯȱȱǰȱȱȱȱ ȱȱȱȱȱȬ ³¨ǰȱȱȱ·ȱǯȱȱȱ¨ȱ¤ȱ "PSHBOJ[BÎÍPEPTFYFNQMPT Q uando executar pela primeira vez o JasperETL, solicite para importar o projeto Demo, que possui demonstrações de todos os componentes. Várias das tarefas dos exemplos precisam de arquivos de entrada. Crie um diretório chamado talend_ files (por exemplo: c:\talend_files), na janela do repositório expanda o item Contexts e clique duas vezes no globalContext. Na janela que aparece, clique no botão Next e escolha a aba Values as table. Verifique se o valor da variável “defaultDir” corresponde ao diretório que foi criado e ajuste caso contrário. Após fazer isto, abra a tarefa beforeRunJobs clicando duas vezes nela, e execute a tarefa com a tecla F6. Esta tarefa prepara o ambiente para rodar os demos. Os exemplos do projeto Demo estão organizados da seguinte forma: xt01_Compo Diversos jobs que mostram como usar todos os componentes. A documentação do Help faz referência a eles para apresentar o uso de cada componente; xt02_Concatening Exemplos do uso de “Run if” e tratamentos de erro, tDie, tWarn, OnComponentError, OnSubjobError; xt03_DemoRoutines Exemplos do uso de Java no JasperETL; x t04_Context Exemplos do uso de contextos, incluindo um exemplo de carga dinâmica desde um arquivo. Conectando ȱ do JasperETL começa pela sua tela ȱ ¡¨ȱ ǻǼǯȱ ȱ ȱ ȱ ȱ ¡¨ǰȱȱȱ¨ȱ¥ȱȱȱȱ ȃȄȱȱȱȱȬǯȱȱȬ ¨ȱǰȱȱȬȱ·ȱȱȱȱȱ ¤ȱȱ¨ȱ·ȱǰȱȱȱȱ ȱȱȱǻ¡ȓ¢ǯ£Ǽǯȱȱȱ·ȱȬ ȱȱ¡äȱǰȱȱ·ȱȱøȱȱ ȱ¡¨ȱȱȱȱǯȱȱFigura 1, ȱȱȱȱàȱȱ¡¨ǯ àȱȱ³¨ȱȱȱ¡¨ǰȱȱ os botões que nos permitem criar um novo Figura 1. Tela após criar uma conexão local e importar o projeto “Demos”. Edição 62 tJava Magazine 27 +BTQFS&5- acostumado com o desenvolvimento em Java, ȱȱȱȱȃȄȱȱ ¤ǰȱȱȱȱȱȱ¤ȱȱ ³¨ȱȱȱǯ O que é gerado? ȱȱȱȱȱȱÇDZȱ Ȋȱȱ<projeto>.jar: contendo todas ȱ¹ǰȱȱȱȱ¡ȱ via linha de comando simplesmente escreȱȃȱȬȱǯȄȱȱȱ o script .batȱǻȱ.shȱȱȱ¡Ǽȱ ȱȱ¤ȱ¡ȱDz Ȋȱȱ<projeto>.war: uma aplicação ȱȱȱȱ ȱȱȱ ȱøȱ·ȱȃ¡Ȅǰȱȱȱ ser instalado em um servlet container ȱȱȱȱǯ 1FSMPV+BWB T oda vez que você cria um novo projeto usando o botão Create na tela de login, aparece uma janela para colocar o nome do projeto e uma opção para escolher a linguagem que será usada no mesmo, Perl ou Java. O Talend Open Studio originalmente era um produto que gerava código Perl, sendo a geração de código Java uma evolução posterior. Atualmente a maior parte dos componentes existentes são suportados nas duas plataformas, porém a evolução das próximas versões do produto só é garantida para a linguagem Java. Figura 2. Perspectiva do JasperETL. 28 Java Magazine t Edição 62 ȱȱ³¨ȱȱȱȱÇȱȱ ȱȱȱȱtas do tipo BPELǰȱȱȱ¡ȱ de integração de processos onde os serviços gerados pelo JasperETL implementam ³äȱ Çȱ ȱ ȱ ¡ǰȱ ȱ ȱȱȱǯ Entendendo o ambiente ȱFigura 2 vemos a perspectiva normal do Job Designerȱ¤ȱȱȱȱȱȱ¡ȱǯȱȱȱȱ ȱȱǰȱȱȱ ȱ ȱ³¨DZ Ȋȱ¢:ȱȱȱàǰȱ ȱ ȱ ȱ ¥ȱ ȱ ȱ ǻjobsǼȱȱäȱȱDz Ȋȱ: Área de desenho, onde aparece ȱȱȱȱȱȱȱȱDz Ȋȱ: Paleta de componentes, onde podemos escolher os mais diversos eleȱȱȱȱDz Ȋȱ : Tela de resumo, que lista ȱȱȱȱȱ¡ȱȱ ȱȱȱ¤ȱȱȱ a navegação no caso do desenho não caber ȱȱDz Ȋȱ: Detalhes ȱ³¨ȱ ȱȱȱÇDz Ȋȱ ¡:ȱ ³¨ȱ ȱ ȱ ȱ ¤ȱȱ¡ȱȱȱDz Ȋȱ:ȱ¡³¨ȱȱ³¨ȱȱȱDz Ȋȱ DZ Preparação do comando ȱȱ¡³¨ȱȱȱǯ O Repositório Este nos apresenta todos os elementos ȱȱǰȱ£ȱȱȱDZ ȊȱȱDZȱȱȱȱȱ·ȱǯȱȱȱ ȱȱȱȱ¡ȱȱ ȱȱȱȱȱȱȱȱÇǯȱȱÇȱȱ ȱȱȱȱȱȱ ȱȱȱ¡ȱȱû¹ȱ de operações que represente o processo que ¤ȱȱȱǯȱȱ·ȱ ¡ȱȱȱȱȱȱȱ ȱȱȱȱDz ȊȱȱDZȱȱ¨ȱȱ ȱ ȱ ȱ ǻǼǯȱ ȱ ȱ ȱȱȱ£¤ȬDz Ȋȱ ¡DZȱȱȱȱȱ constantes e seus respectivos valores agrupanȬȱȱȱ¡ǰȱȱ¡DZȱ ǰȱ³¨ǰȱ³¨ǰȱǯȱ ȱȱȱȱȱ¥ȱȱȱȱȱȱ¡ȱȱȱȱ ȱ¡ȱȱȱǰȱȱȱȱ ȱȱȱȱȱDz ȊȱDZȱȱȱ³äȱȱ podemos escrever código Java em classes ȱ¨ȱȱȱǯȱȱȱ melhor organização podemos separar as rotinas em pastas, porém estas pastas não reȱȱ£³¨ȱȱȱȱDzȱ todas as classes criadas serão armazenadas no mesmo pacote routinesǯȱȱȱ¤ȱ ȱȱȱȱȱǻȱȱǰȱ äǰȱ³¨ȱȱȱȱǰȱǯǼȱ ·ȱȱȱȱȱȱDz Ȋȱ DZȱ ȱ ȱ ȱ ȱ ǰȱȱȱȱȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ¡ǰȱ ȱ ¡äȱ com o banco de dados, arquivos dos mais ȱ ǰȱ àȱ ǰȱ ȱ services, estruturas de dados genéricas ǻGeneric schemasǼǰȱȱǰȱȱȱ³¨ȱȱǰȱ£ȱ¹ȱ ȱȱȱȱDz ȊȱDZȱȱ£ȱ ȱ ȱ ȱ ³¨ȱ ȱ ȱ ȱDz Ȋȱ¢ȱDZȱȱȱȱȱ são apagados acabam aqui, de onde podem ȱǯ Princípios de funcionamento de um componente Todos os componentes seguem um modelo ȱǯȱȱȱȱȱȱ ȱDZȱȱȱȱ³ȱȱ ¡ȱȱȱȱǰȱȱȱ ȱ àȱ ȱ £ȱ ȱ ȱ ȱ ¡ȱ ¤ȱ criado processando um registro ou uma linha ǻ Ǽǯȱȱ£ȱȱȱ¤ȱȱǰȱ aqueles componentes que podem começar ȱȱȱȱȱȱǯ Para cada componente, clicando com o botão direito do mouse sobre o mesmo, apaȱȱȱȱ¡ȱȱȱ ȱǻFigura 3Ǽȱȱ³äDZȱȱǻRowǼȱȱ ȱ ǻTriggerǼǯȱ ȱ ³äȱ ȱ ȱȱȱȱǯȱ ȊȱDZȱȱȱȱ³¨ȱ DZȱ ȱ ȱ ȱ àǰȱ ȱ ȱȱȱȱȱȱǯȱ ȱ³¨ȱ·ȱȱȱȱȱȱȱȱ¡ȱȱȱǻȱȱȱȱǼǯ ȱ³äȱȱÇȱȱ¡¨ȱȱȱ¨DZ ȊȱDZȱȱȱȱȱ ȱ³¨ȱȱȱȱȱ¡ȱȱDz ȊȱDZȱȱȱȱȱ ȱȱ Dz ȊȱDZȱȱȱȱÇȱȱȱ ȱȱȱȱȱÇDz ȊȱȦDZȱȱȱÇȱ ȱȱȱ ǯ ȱFigura 4ȱȱȱȱÇȱȱȱȱȃ¡Ȅȱȱȱȱȱ do componente, o que indica alguma condi³¨ȱ ȱ ǯȱ ȱ ȱ ȱ ȱ ȱȱȱȱȱȱȃ¡Ȅǯȱȱ ȱȱȱȱÇȱȱȱǻ Ǽȱȱȱȱȱȱ ȱ ǻǼȱ ȱ ȱ ǻǼǯȱ ȱ ȱ ȱȱȱȱȱȱ Çȱ ȱ ³¨ǰȱ ȱ ȱ ȱ ȱ ȱ ³¨ȱȱȱǰȱȱȱ¨ȱ ȱȱ³¨ȱȱȱǻǼǯ A Figura 5ȱȱȱàȱȱȱ¡ȱ de processo onde os componentes são conectados usando a opção Mainǯ Se acrescentarmos algum componente ȱ³ȱȱ³¨ȱȱ, como por ¡ǰȱȱ que lista os arquivos ȱȱàǰȱȱ¡ȱȱȱȱ a Figura 6ǯ Gatilhos (Triggers) As opções do gatilho nos permitem controȱȱ¡ȱȱ¡³¨ȱȱ£ȱȱȱ ȱȱȱȱǯȱȱȱȱ código gerado pelo JasperETL veremos que O JasperETL cuida da semântica de tal forma que apenas podemos conectar componentes que são compatíveis. Linha (Row) ȱȱǻ Ǽȱȱȱȱȱǯȱȱȱȱȱȱȱ ȱȱǰȱ·ȱȱȱȱDzȱȱ ȱȱȱȱ¡ǰȱȱȱȱȱǯȱȱȱ ȱȱȱȱ·ȱȱȱ ȱȱ·ȱȱȱȱȱȱ Çȱǻȱȱǰȱȱȱ ǰȱǯǼȱȱȱȱȱȱȱ äȱȱȱȱǯ ȱ³äȱȱ¡¨ȱȱȱǻRowǼǰȱ ȱ ȱ ¡ȱ ȱ ǰȱ ȱȱȱDZ ȊȱDZȱȱȱ¡ȱȱȱ ȱȱȱȱȱǰȱȱȱȱȱȱȱȱȱǻvos ou tabelas de um banco de dados, por ¡ǼǯȱȱȱȱȱǻǼȱ ·ȱ ȱ ȱ ȱ ȱ ȱȱȱ¡ȱȱȱȱȱȱ ȱȱȱȱǯȱ1ȱ ȱȱ¡äȱȱDz ȊȱDZȱȱȱ¡ȱȱȱȱ ¨ȱ£ȱȱȱ·ǯȱȱ ¡ǰȱȱȱȱǰȱȱÇȱȱ ¤ȱȱȱȱnãoȱ£ȱȱDz Figura 3. Menu de contexto, opções para a Linha (Row) e para Gatilho (Trigger). Figura 4. Componentes com erros e warnings. Figura 5. Fluxo de processamento de dados mais usado. Edição 62 tJava Magazine 29 +BTQFS&5- Figura 6. Adicionando um componente que oferece a opção Iterate. Figura 7. Concatenando sub-tarefas com OnSubjobOk. ȱȱ³äȱȱȱȱ¡³äǰȱ blocos try..catchȱ¨ȱȱǯȱ ȱ ȱ ȱ £ȱ ȱ ȱ ȱ³äǯȱȱFigura 7ȱȱȱ¡ȱ ȱȱȬȱ¨ȱȱȱ a opção ǯ As opções e OnComponentError nos permitem tratar os casos ȱ ¡³¨ǯȱ ȱ ³¨ȱ OnComponentError ȱ ȱ ȱ ȱ ¡³¨ȱ ȱ ȱ Çǰȱȱ¡ǰȱȱȱȱȱ ȱȱȱȱȱǯȱȱ³¨ȱOnSub intercepta qualquer erro que possa acontecer na linha do processo, mesmo que ȱ¨ȱȱȱȱȱǯȱȱ Figura 8ȱȱ¡ȱȱ¡ǯ ȱȱ·ȱȱ, que nos permite ¡ȱ ¡ȱ ȱ ȱ ȱ ȱ ȱȱ³¨ȱȱȱȬ ȱ·ȱǯȱȱȱȱ ¡ȱȱȱ¡ǰȱȬ ȱȱȱȱ³äȱȱ¡¨ȱ ȱǯ Porém, devemos lembrar que o principal ȱ ȱ ȱ ·ȱ ȱ ³¨ȱ ȱ aplicações para processamento em lote, onde registros são tratados um a um em ȱû¹ȱǰȱ¨ȱȱ³¨ȱ ȱ³äȱ¡ǰȱȱȱ ¡ȱȱȱȱ£¹Ȭǯ Erros e logs Figura 8. Gatilhos (Trigger) - Tratamento de erros. 30 Java Magazine t Edição 62 ȱ ³¨ȱ ¡ȱ ȱ em um processamento em lote é o trataȱȱȱȱȱ³¨ȱȱȱȱ ȱȱȱȱȱȱȱ ȱȱ¡³¨ȱȱȱǻǼǯȱ ȱ ȱ ȱ ȱ ȱ ¤ȱ DZȱtWarn, tDie, tLogCatcher, tLogRow e outros componentes da paleta Log & Errorsǯȱȱȱ³¨DZ Ȋȱ DZȱ ȱ ȱ ȱ ȱ ȱ componente do tipo tCatcherȱ ǻtLogCatcherǰȱȱ¡Ǽȱȱȱȱ¡ȱ ȱDz ȊȱDZȱȱȱȱȱȱȬ nente do tipo tCatcherȱȱȱȱ¡³¨ȱ ȱȱȱȱȱȱtCatcher £ȱȱȱȱDz ȊȱDZȱȱȱȱ ȱȱȱȱÇȱ¨ȱȱǯȱ ȱȱ¨ȱ£ȱȱȱȱ¡ǰȱ ȱ ȱ ȱ ȱ ȱ ȱ ǯȱ ȱ ȱ ȱ ȱ ǰȱ ·ȱ ȱ ȱ ȱ ȱ ¡ȱ ȱDz Ȋȱ DZȱȱȱȱȱȱ¡ȱ ȱȱȱȱȱ¡³¨ȱȱǯȱȱȱȱȱȱ¤ȱȱ ȱȱ³¨ȱȱǰȱȱȱ ȱȱȱȱ¡ȱȱǯ ȱȱȱȱȱȱ³¨ȱȱȱàǰȱȱȱȱȱ¤ȱ ȱ¡¹ȱȱǰȱȱȱǯȱȱȱȱȱȱȱ ȱȱ·ȱȱ¡ȱȱȬȱ ȱȱ³äȱÇȱȱȱȱǯȱǰȱȱȱȱ site da Talend, dois componentes ideais para ȱȱȱDZȱŚ e tLog4Jǯȱ ȱȱȱȱȱ¥ȱnhecida biblioteca Apache Log4J com todas ȱ³äȱȱȱȱǯ Transformações: tMap ȱ ȱ ȱ ȱ ȱ ȱ ȱ ·ȱ ȱ ³äȱ ¡ȱ ȱ ³¨ȱ ȱ ȱ Ȭ ǰȱ³äȱȱȱǻȱȱ ³¨ȱȱȱàȱȱȬǼȱȱ ³¨ȱȱ³¨ȱȱǯȱȱnente do JasperETL que implementa esta ȱ·ȱȱtMapǯȱȱ·ȱȱȱ¡ȱȱȱȱȱ por si próprio, então apresentaremos um ȱȱȱǯȱȱȱȱȱȱ³äDZ Ȋȱ ¡³¨ȱ ȱ ¡³¨ȱ ȱ dados:ȱǰȱȱȱȱȱȱ ǰȱȱȱȱȱȱȱ uma só, ou separar uma única linha em duas ȱȱÇȱDz Ȋȱ³äȱȱȱȱquer tipo de campo: Permite mudar os ȱȱȱǻȱȱȱǰȱȱ ¡Ǽȱ £ȱ ȱ äȱ ȱ ȱ¤Dz Ȋȱ ³¨ȱ ȱ ¦ȱ ȱ campos: Permite concatenar o conteúdo ȱȱȱȱȱȱȱȱ ȱȱȱȱDz Ȋȱ ȱ ȱ ȱ ȱ ³¨ȱ ȱ restrições:ȱ ȱ ȱ ȱ ȱ øȱȱDz Ȋȱ³¨ȱȱDZ Permite tratar os regisȱȱȱÇȱǯ ȱȱȱȱ¤ȱ¡ȱȱǰȱȱȱȱ ǻMainǼȱȱȱȱ¤ȱǻLookupǼȱ·ȱ ȱ ȱ ȱ ȱ ¤ȱ ȱ ȱ ȱ ³äǯȱ ȱ ȱ ȱȱȱ¤ȱÇǰȱȱȱ ȱȱȱȱ³äǯ Montando uma tarefa ȱȱȱȱǰȱȱ ǰȱȱȱȱǯȱȱȱ·ȱȱȱȱ ȱǯȱǻȱȱȱȱ ȱȱȱǼȱÇȱȱàǰȱȱȱȱ ȱȱȱȱȱ¢ǯȱ ȱ ȱ ȱ àȱ ȱ ¤ȱ ȱȱȱȱȱǻc:\talend_files\in\in\csvȱǼȱȱȱ·ȱȱȱ DZȱcustomer1.csv e customer2.csvǯȱ ȱ ȱ ȱ ȱ ȱ ȱȱȱ¤ȱȱȱȱ ȱ ǰȱ ȱ ȱ ¨ȱ ¡ǰȱ ¡ȱ a cargo do próprio processo a criação da ȱȱȱȱǯȱ ǰȱȱ¨DZȱȱȱȱ ȱȱǯȱȱàǰȱȱȱ arquivo da lista ler todas as linhas e para cada linha importar um registro na tabela ȱȱȱǯȱȱȱȱ¨ȱ¡ȱ ȱǰȱȱȱ¤ȱȱȱȱ ǯȱȱȱȱǰȱȱ ler a tabela que acabamos de importar e imprimir no console os registros da ǯȱ ȱ ȱ ȱ ³ǰȱ ¤ȱ ȱȱȬȱȱ³¨ǯ Para isto vamos precisar dos seguintes DZ Ȋȱ DZȱ ȱ ȱ ȱ ȱ ȱ àǯȱȱȱȱȱȱFile/ ManagementȱȱȱȱDz ȊȱDZȱ¹ȱȱǰȱ linha a linha, com campos separados por ÇȱǻȱFile/InputǼDz Ȋȱ ¡DZȱ ȱ ȱ ȱ ȱ ȱǻȱMiscǼDz Ȋȱ¢DZȱȱȱ£ȱȱȱȱ¢ȱǻȱDatabases/ MySQLǼǯȱȱȱȱ¹ȱȱ componentes para a maior parte dos gerenȱȱȱȱȱǯȱ Caso você use outro banco, substitua o ȱȱȱȱȱDz Ȋȱ¢DZȱ¹ȱȱȱȱ¡ȱȱȱ³¨ȱȱȱȱǯȱȱȱ ȱ³¨ȱȱȱDz Ȋȱ DZȱȱȱȱȱȱȱȱǻȱLog & ErrorsǼDz Ȋȱ DZȱ ȱ ȱ Ȭȱ ǻȱ InternetǼǯ ·ȱ ǰȱ ȱ ȱ ȱ ¡¨ȱȱȱȱȱǯȱȱȱ ȱàȱȱȱȱȱ ȱ¡¨ȱȱȱȱ£ȱȱ ȱȱȱǯ Configurando a conexão com o banco de dados ȱȱȱàǰȱȱȱȱMe tadata>DbConnections>demoMysql e clique nele ȱ£ȱȱȱȱǯȱȱ ȱȱǰȱȱȱ¨ȱNext para aceȱ¥ȱȱȱ¡¨ȱȱȱǯȱ Ȭȱȱȱȱ³¨ȱǻȱ Figura 9Ǽǯȱȱ¡ǰȱȱ¢ȱ¤ȱȱȱ¤ȱȱȱȱ¡ȱ·ȱ¡ȱ ȱ¤ȱȱ£ȱȱ¦ȱtest, criada ȱ¨ȱȱ³¨ȱȱ¢ǯȱȱ ȱ ȱ ȱ ǰȱ ȱ àȱ ¡ȱ¡ȱȱȱȱǰȱ ȱȱȱȱȱȱǯ Conectando os componentes ȱȱ³äȱȱȱǻRowǼȱȱȱǻTriggerǼȱȱȱȱȱ acordo com a Figura 10ǯ Configurando os componentes A aba ComponentȱǻȱFigura 10Ǽȱȱȱȱȱȱȱȱ ǯȱ ȱ ȱ ³¨ȱ ȱȱȱȱǯȱȱǰȱȱ ȱȱȱmitedȱȱȱȱȱȃȄȱȱ ¤ȱȱȱȱȱȱ ȱȱȱȱǯ Componente tFileList Este componente lista os arquivos de um àǯȱȱȱȱDirectoryȱȱȱȱàȱȱ£ȱȱ instalação dos arquivos demo, procurando a pasta csv que contém os arquivos que ȱȱȱȱȱǯȱȱ estrutura padrão este diretório corresponde a c:\talend_files\in\in\csvǯȱȱȱ propriedade FilemaskȱȱȃȘǯȄǯ Edição 62 tJava Magazine 31 +BTQFS&5- Componente tFileInputDelimited – Definindo uma estrutura de dados (schema) Figura 9. Exemplo da configuração da conexão com o banco. Figura 10. Conectando os componentes. 32 Java Magazine t Edição 62 Este componente introduz duas noviǯȱȱǰȱȱȱȱȬ priedade FileNameȱȱȱȱÇȱȱ componente anterior, tFileListǯȱ ȱ ǰȱ podemos observar no OutlineȱǻFigura 11Ǽǰȱ que o componente tFileListȱ ȱ ȱ ¤DZȱCURRENT_FILE e CURRENT_FILEPATH, que ¨ȱ£ȱȱ¡ȱȱȱǻȱ por Flowȱȱȱȱ¤ǼǯȱȱȬ lar, CURRENT_FILEPATHȱ¤ȱȱȱȱ ·ȱȱȱȱȱǯ ȱ£ȱȱ¤ǰȱȱ o cursor no campo da propriedade FileName do componente ǻȱȱøȱȱȱ¤ǼȱȱȬ ȱȱȱȱƸȱ,ǯȱȬ ȱ¨ȱȱȱȱȱȱ¤ȱ Çȱȱȱǯȱȱȱ lista até achar a que nos interessa, como mostra a Figura 12ǯ A Figura 13 mostra o resultado após ȱ³¨ǯ ȱà¡ȱȱ·ȱȱ³¨ȱȱȱ ȱ ȱ ȱ ǻǼǯȱ ȱ ȱ ȱ ȱ ¨ȱ ȱ esta propriedade, o componente Ȭ tDelimitedȱ ¤ȱ ȱ ǯȱ ȱ ȱ ȱ ȱ ȱ ȱȱȬ ȱȱàǯȱǰȱȱȱ³¨ȱ Metadata>File Delimited>customerǯȱȱȱ vezes na opção customerȱȱȱȱȬ guração e clique no botão Nextȱȱȱȱ ǯȱȱȱ·ȱȱȱȱFile ¤ȱȱȱȱȱǯȱȱ com o botão Browse até o arquivo certo, no caso, customer1.csvȱǻȱcustomer2.csv tem a mesȱǼȱȱȱ³¨ȱ¨ȱ ¤ȱȱc:\talend_files\in\in\csvǯȱȱFigura 14 ȱȱȱȱȱȱǯ Passando com o botão Nextȱȱȱà¡ȱ ǰȱȱȱȱȱȱ¨ȱȃȬ ¤Ȅȱȱȱȱȱ ȱȱǻȱFigura 15Ǽǯ ȱ£ȱȱǰȱȱȱȬ ȱȱ³¨ȱȱȱȱȱ ȱȱȱȱȱȱȱȱ ȱȱȱǯȱȱȱȱȬ ra metadataȱȱ¡ȱȱȱ customer, veremos que não corresponde ao ȱȱȱȱȱȱǯȱ ȱ ȱ ȱ ȱ ¤ȱ ȱ ǻȱ Figura 11. Imagem da view Outline mostrando as variáveis do U'JMF-JTU. Figura 16Ǽǯȱȱ£¤Ȭǰȱȱȱ¨ȱ Guessǯȱȱȱȱȱȱȱ estrutura precisa ser atualizada, clique em OKȱȱȱȱȱǯ ·ǰȱ ȱ ¤ȱ ¨ȱ ·ȱ ȱ ȱ ȱ ȱ ȱȱȱǯȱȱȱ ȱȱȱȱȱÇȱȱ ȱȱȱȱȱ³¨ȱȱȱ da primeira linha, porém despreza as restanȱȱȱȱȱøȱǯȱ ȱȱȱǰȱȱȱȱȱȱ¤ȱ ȱ¨ȱ·ȱȱȱǯȱȱ ȱȱȱid como chave não nula de ȱřǰȱȱȱȱȱȱCustomerAddressȱȱśŖǰȱȱȱȱȱȱȱ ǻȱȱDate PatternǼȱȱȱȱȱ ȱ ȃȦȦ¢¢ȱ DZȄȱ ȱ ȱ RegTimeȱȱȃ¢¢¢¢ȬȬȱ DZDZǯȄȱȱ campo RegisterTime, como indica a Figura 17ǯ Muito bem, depois de todo este trabalho temos uma estrutura de dados pronta e de acordo com a estrutura dos arquivos que ȱǯȱȱȱȱ ȱ ȱ ȃȄȱ ȱ ȱ ǯȱȱǰȱȬ lha a opção Repository no lugar do padrão Built inǯȱ¤ȱȱȱȱ se as alterações precisam ser propagadas ǻFigura 18Ǽǯȱ ¨ǰȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ȱ ¤ȱ propagada a todos os outros componentes ȱ¡ǯȱ£ȱȱȱ³¨ȱ do componente ǯ Figura 12. Escolhendo a variável da lista. Figura 13. A propriedade File Name, já definida. Figura 14. O arquivo customer1.csv. Edição 62 tJava Magazine 33 +BTQFS&5- ȱ¤ȱȱȱȱȱȱȱ ȱàǰȱȱȱȱǯȱ Ao escolher a opção Repository no campo Schema, aparece um novo campo com o nome da estrutura e do lado um botão com três pontos ǻǯǯǯǼȱȱȱȱȱȱàȱ ȱȱȱȱǯȱȱFigura 19 ȱ ȱ ³¨ȱ ȱ ȱ ǯȱȱȱȱȱȱ componentes é a descrita no quadroȱȃȱ ȱàȱȱȱȱȄǯ Componente tMysqlOutput – Importando o arquivo no banco de dados Figura 15. “Mágica” do assistente de CSV. ȱ³¨ȱȱȱ·ȱǯȱ ȱ¤ȱȱȱȱȱȱȱȱ ȱȱ³ȱȱ¡ǰȱȱ ȱȱȱ¡¨ȱȱȱȱȱ dados e as opções de criação da tabela e de im³¨ȱȱǯȱȱȱProperty Type ȱȱȱ¡¨ȱȱȱǰȱȱ Repository no lugar de Built Inǯȱȱàȱ¡ȱ ȱ¡¨ȱȱȱ¢ǰȱȱȱȱ ¤ȱȱǯȱ¹ȱ¤ȱȱȱ ȱȱ¡¨ȱ¨ȱȱȱȱ ³äȱȱ¡¨ȱȱàǯȱàȱ precisamos completar o nome da tabela, para ȱȱȱȃȄǯȱȱȱ ȱ¨ȱ¡ȱȱȱȱǰȱȱȱȱ ȱ¥ȱ³¨ȱȱà¡ȱ³¨ǯ ȱ ³¨ȱ Action on Table escolha Create table if not existsDzȱȱȱ³¨ȱAction on data escolha Insert or updateǯȱȱFigura 20 mostra ȱ³¨ȱǯȱ Componente tMsgBox_1 e tMsgBox_2 Figura 16. Estrutura original que não corresponde ao arquivo. 6TBOEPPSFQPTJUØSJPDPNPQBMFUBEFDPNQPOFOUFT O JasperETL oferece um poderoso recurso que agiliza ainda mais o desenvolvimento de aplicações. Você pode usar diretamente um elemento do repositório, como uma definição de banco de dados, e arrastar o mesmo para a área de trabalho. O componente certo é escolhido automaticamente, no caso um U.ZTRM*OQVU, e configurado numa única operação. Usando Retrive Schema no menu de contexto podemos por exemplo, importar a estrutura do banco de dados no repositório. As tabelas do banco ficam então disponíveis para serem usadas como componentes U.ZTRM*OQVU ou (usando a tecla <Ctrl>) U.ZTRM0VUQVU ao arrastar até a área de trabalho. A mesma coisa acontece com as definições de layouts de arquivos que se transformam em componentes U'JMF*OQVU%FMJNJUFE. Podemos então, deixar o repositório pronto com os elementos mais usados, acelerando o desenvolvimento de novas aplicações. 34 Java Magazine t Edição 62 Como em qualquer programa, o tratamento ȱȱ·ȱȱȱ¤ǰȱȱȱȱȱ de tratamento em lote, que normalmente ȱȱ³¨ȱȱ¤ǰȱȱȱ ǯȱ ȱ ¡ȱ ȱ ȱ para tratamento de erros, vamos apresentar a mensagem de erro dos respectivos compoȱȱȱȱ¡ȱȱ¤ȱ ǻ¡ǼǯȱȱFigura 21 mostra um dos comȱȱȱ¡ǯȱȱ ǀǁȱƸȱǀ,ǁȱȱȱȱȱ ȱȱȱȱǯ Componente tMySqlInput – Lendo a tabela resultante ȱ ȱ ȱ ȱ àȱ ·ȱ ¤ȱ ȱ ȱ ¡¨ȱ ȱ ȱ banco de dados, a estrutura dos dados ǻǼǰȱ ȱ ȱ ȱ ȱ ¥ȱ ȱ ȱ ǰȱ ȱ ȱ ȱ ǻ¢Ǽǯȱ ȱ ȱ ³¨ȱ ȱ ¡¨ȱ ȱ ȱ ȱ ¤ȱ ¡ȱ ȱ àǰȱ selecionando a opção Repository no campo Property Type e no campo Schemaǯȱȱ øǰȱȱȱ¢ȱȱȃȱȘȱ ȱȄǯȱȱFigura 22 apresenta a ³¨ȱǯ Componentes tLogRow e tSendMail ȱȱtLogRow não precisa de ³¨ǯȱ ȱ ³¨ȱ ȱ Ȭ ponente tSendMailȱ ·ȱ Ȭ¡ȱ bastando indicar os dados para envio de e-mail e os dados de acesso ao servidor ǯȱȱ¨ȱȱȱȬȱ·ȱ tudo estar testado, desabilite o componente clicando com o botão da direita nele e escolhendo a opção Deactivate tSendMailǯ Figura 18. Propagando a nova estrutura de dados (schema). Figura 17. Estrutura nova já corrigida. Figura 19. Configuração final do tFileInputDelimited. !<A.1<2C .; LDAP: Ou Lightweight Directory Access Protocol, é um protocolo para atualizar e pesquisar diretórios rodando sobre TCP/IP. Um diretório LDAP geralmente segue o modelo X.500, que é uma árvore de nós, cada um consistindo de um conjunto de atributos com seus respectivos valores. O JasperETL pode usar um servidor LDAP como fonte de dados. Edição 62 tJava Magazine 35 +BTQFS&5- Executando e depurando o job Figura 20. Configuração do tMysqlOutput. ȱ¡ȱȱȱ·ȱȱȱȱ ȱŜȱȱȱRun em Run jobǯȱȬ mos depurar e colocar pontos de controle ǻǼǯȱȱȱ·ȱǰȱȱ a perspectiva de depuração do Eclipse para Java, o que nos permite ter total controle ȱàȱȱ¡³¨ǯ A Figura 23ȱȱȱ¡³¨ȱǯȱ Vemos que aparecem mensagens de erro em vermelho e a continuação, a listagem ȱȱȱȱȱ¥ȱȬ ȱȃȄǯȱȱȱȱȱǻȱ ǼȱȱȱȱȱȬ tão propositadamente errados nos arquivos ȱǯȱȱȱȱȱȱȱ ¡ȱȱ¡ȱȱȱȱȱȱ ȱ³äȱȱ³¨ȱȱǯ ȱǰȱȱȱȱ ȱȱȱȱ¡ȱ£ȱ o botão Debug no lugar de RunǯȱȱFigura 24 mostra a perspectiva de depuração que apareǰȱȱȱ¡ȱȱȱǯ Gerando os executáveis Figura 21. Configuração do tMsgBox. 36 Java Magazine t Edição 62 ȱ £ȱ ȱ ȱ ǰȱ ȱ ¤Ȭȱȱȱȱ£ȱȱ ȱ ¡ȱ ȱ ǯȱ ȱ ǰȱ ȱ ȱ ȱ àǰȱ ȱ ȱ ¨ȱ ȱ ǰȱ ȱ ȱ ȱ ȱ ¡ȱ ȱ selecionamos a opção Export Job Scripts, como mostra a Figura 25ǯȱ ȱǰȱȱȱȱȱ¡Ȭ ³¨ȱǻȱFigura 26Ǽȱȱȱȱȱ ȱ ȱ ȱ Çȱ ǰȱ ȱ ȱ ³¨DZȱȃȄȱǻPlain Old Java ObjectǼȱȱȃ¡ȱ ȱȄȱǻ.war ou .zipǼǯȱȱȱȱȬ ȱȃȄȱȱ³äȱȱȱ ȱ³¨ȱȱȱȱȱȱȱ ȱȱȱȱǻ ȱȱ ¡Ǽȱȱȱȱȱǯȱȱ ǰȱ¨ȱȱȱ.bat ou .sh que ¡ȱȱȱǯ ȱ¡ȱȱȱȱȱȱǰȱ descompacte o arquivo .zip criado e na pasta JM_Exemploȱ ¡ȱ ȱ ȱ JM_Exemplo_run.batȱǻȱJM_Exemplo_run.shǼǯ ȱȱȱȱȃ¡ȱȱȄǰȱ ·ȱȱȱȱȱǻȱǼȱ pronto para ser instalado em um servlet ȱȱȱǯȱȱǰȱȱ ȱȱǯ ȱȱȱȱȱwebappsȱȱȱ³¨ȱȱǯ ȱǰȱȱȱȱDZȱ DZȦȦDZŞŖŞŖȦǀȱȱ ȱȱȱ ¡¨ȱǯ ǁȦȦǀȱȱȱȱ ȱ¨ǁǵƽǯȱ ȱ ȱ ¡ǰȱ ȱ ȱ ȱ ȏ¡ȏŖǯŗǯ ǰȱDZ Figura 22. Configuração do tMysqlInput. DZȦȦDZŞŖŞŖȦȏ¡ȏŖǯŗȦ Ȧȏ¡ǵƽ ȱȱȱȱ³ȱȱ¡ȱ ǰȱȱȱDZ DZȦȦDZŞŖŞŖȦȏ¡ȏŖǯŗȦ Ȧ¡ ȱǰȱȱȱȱȱȱFigura 27ǯ Figura 23. Execução normal da tarefa. Figura 25. Gerando os executáveis. !<A.1<2C .; Figura 24. Depurando. BPEL: Estas são as siglas para “Business Process Execution Language” ou linguagem para descrição de execução de processos de negócio, um padrão definido pelo grupo OASIS. Ela permite especificar uma seqüência de processos baseados em Web Services. O JasperETL permite implementar um destes processos como um Web Service e ferramentas de BPEL como o Oracle BPEL, podem fazer uso do processo criado pelo JasperETL. Veja mais a respeito do Oracle BPEL na Java Magazine 57. Edição 62 tJava Magazine 37 +BTQFS&5- 38 Java Magazine t Edição 62 www.jasperforge.org Página de entrada para os projetos do conjunto de soluções de BI da JasperSoft, entre eles, o JasperETL. Siga o link do JasperETL e da documentação. www.talendforge.org O site do projeto open source da Talend apresenta um excelente resumo dos links mais importantes com destaque para os tutorais em Flash. Pablo Jorge Madril [email protected] é consultor senior pela Summa Technologies do Brasil, sendo um dos fundadores do SouJava, grupo de usuários Java e tendo representado a UNIFESP na OMG no segmento CORBA Healthcare. É Engenheiro Eletrônico formado pela Universidade de Buenos Aires e atua no mercado de aplicações corporativas há mais de 20 anos. Dê seu feedback sobre esta edição! http://www.manageability.org/blog/stuff/ open-source-etl Um resumo de links para outras ferramentas de ETL Open Source. Dê seu voto sobre este artigo, através do link: A Java Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que você, leitor, acha da revista! Dê s www.talend.com/resources/documentation.php Outra excelente fonte de documentação é o próprio site da Talend, em particular, leia o User Guide e o Installation Guide. Feedback eu www.devmedia.com.br/esmag/feedback sobre e s ȱȱ·ȱȱȱȱ ȱ ȱ ȱ ȱ ǰȱ ȱ ȱ ȱ ¤ȱ de aplicações para processo de dados em ǯȱ ȱ ȱ ȱ ¡³¨ȱ ȱ ȱ ȱ ǰȱȱȱȱȱȱȱ um arquivo cronǰȱȱȱ ȱǰȱȱ ȱȱȱȱȱȱȱȱȱ ¡ȱǰȱȱȱ³¨ȱȱȬ grações de dados essenciais em ambientes ȱ³¨ǯ ȱ¨ȱàȱȱȱȱ¡ȱȱ componentes como um modelo aberto para ȱ³¨ȱȱȱȱ£³¨ȱȱ¤ȱ ¡ǯȱ¡ȱȱȱȬȱȱ componentes de código aberto que tende a crescer com o tempo, semelhante a linha ȱȱȱǯ ȱàȱȱ·ȱȱ¤ȱȱȱ depuração para quem domina a linguagem ǰȱÇȱȱȱȱȱȬ ȱȱ¤ȱȱȱ³¨ȱȱ ·ȱȱȱȱǯ ȱȱȱǰȱȱȱȱ limitações e não é recomendado o uso para ȱȱ·ȱȱǯȱ ·ǰȱȱȱȱ¤ȱȱ³¨ǰȱȱ apresenta como uma solução robusta e ǰȱȱȱȱȱȱȬ ȱȱǯ Combinado com os outros produtos da ȱȱȱȱǰȱȱȱ¨ȱ ȱȱȱȱȱȱ ȱ ȱ ȱ ³¨ȱ ȱ ¤ȱȱȱǯ d i çã o Conclusões Figura 27. Verificando a exportação do serviço. e ta Figura 26. Assistente de exportação.