JasperETL

Propaganda
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ȱŽȱȃ¢¢¢¢ȬȬȱ
DZ––DZœœǯȄȱ—˜ȱ
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.
Download