Apache Camel é um framework de integração de código-fonte aberto que torna a integração de sistemas bastante simples. Utilizando um integrador podemos nos concentrar mais em como interoperar com o sistema, ao invés de nos preocuparmos em como o sistema que estamos integrando realmente funciona internamente. O Apache Camel (para saber o que é o Apache Camel, clique aqui) provê simplicidade e abstrações gerenciáveis para sistemas complexos, devido a essas características o Apache Camel é considerado um excelente framework de integração. Além disso, o Apache Camel torna a integração nos projetos de software bastante produtiva. Basicamente com pouco código podemos fazer muitas coisas que precisariam de muitos códigos, bibliotecas externas, controle interno, etc.
O projeto Apache Camel iniciou em 2007 e apesar de ser um projeto jovem, o Camel é um projeto de código-fonte aberto bastante maduro, disponível sobre a licença Apache 2 e possui uma comunidade extremamente forte.
Instalando o Apache Camel
Para instalar o Apache Camel primeiramente devemos fazer o download do Apache Camel através do link: https://camel.apache.org/download/
Nesta tela encontram-se as diferentes distribuições para que possamos escolher a equivalente ao nosso sistema operacional, conforme é demonstrado na figura abaixo:
Figura 1: Downloads disponíveis para o Apache Camel.
Agora o próximo passo é descompactar o arquivo em uma pasta do sistema. No meu caso eu descompactei em: C:\apache-camel-2.11.0
Descompactado o Apache Camel agora basta colocar os jars no Eclipse. No meu caso estou usando o Eclipse KEPLER. Para fazer o download do Eclipse basta baixar o “.zip” ou o executável do eclipse em www.eclipse.org/downloads/
Vamos criar um novo projeto no Eclipse para começar a testar as funcionalidades que o Apache Camel nos disponibiliza. Para isso siga a sequencia: Clique em New -> Other, conforme demonstramos na figura abaixo.
Figura 2: Criando um novo projeto no Apache Camel.
Agora selecione Java Project e clique em Next.
Figura 3: Selecionando um projeto do tipo Java.
Digite o nome do projeto e veja se as demais opções estão conforme a figura abaixo e clique em Finish:
Figura 4: Definindo o nome do projeto e demais configurações.
Um passo importante agora é configurarmos as bibliotecas do Camel dentro do Eclipse para que possamos usá-las. Para isso clique com o botão direito do mouse em cima do nome do projeto e vá em Propriedades.
Figura 5: Configurando as bibliotecas do Apache Camel.
Por fim, selecione “Java Build Path” no menu esquerdo da janela e na aba Libraries clique no botão direito da tela em “Add External JARS...”. Agora na janela que for aberta localize onde você descompactou os JARS do Camel, localize a pasta “lib” selecione todos os JARS e clique em Abrir.
Figura 6: Selecionando as bibliotecas do Apache Camel.
Clique em Ok para fechar a janela “Java Build Path”.
Aqui cabe uma observação, apesar de selecionarmos todos os JARS não vamos usar todos, mas uma boa parte deles serão utilizados nos próximos exemplos. Quando você for desenvolver a sua própria aplicação de integração selecione os componentes que você realmente vai utilizar. Ou então, utilize o maven para declarar as dependências necessárias para um determinado projeto.
Para começar a testar o potencial do Camel vamos fazer um simples exemplo de integração que faz um roteamento entre arquivos. Por exemplo, vamos partir do pressuposto que precisamos copiar um arquivo localizado em data/inbox para data/outbox. Fazendo esse exemplo que aparentemente é simples, em Java teríamos mais ou menos 34 linhas de código, visto que seria necessário criar as pastas, copiar todo o arquivo localizado em inbox e levar para outbox, além de abrir arquivos, fechar os arquivos e ainda controlar possíveis exceções.
Usando Camel não precisamos perder tanto tempo fazendo isso, não é necessário reinventar a roda novamente. Basta o código abaixo para que a operação seja realizada. Portanto, criamos um arquivo no eclipse clicando com o botão direito do mouse em “src” e selecionando New Class.
Figura 7: Criando uma nova classe para o nosso exemplo.
Coloque o nome do pacote de “exemplocamel” e o nome da classe de “CopiandoArquivoComCamel” e clique em Finish.
Figura 8: Configurando o nome do pacote, da classe e demais configurações.
Por fim, digite o código abaixo na classe recém criada:
Listagem 1: Codificando a integração de arquivos com Apache Camel.
package exemplocamel;
import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
public class CopiandoArquivoComCamel {
public static void main(String args[]) throws Exception {
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
public void configure() {
from("file:data/inbox?noop=true")
.to("file:data/outbox");
}
});
context.start();
Thread.sleep(10000);
context.stop();
}
}
Antes de executar o código vá até o workspace do seu Eclipse onde encontra-se a pasta do seu projeto (“OlaCamel”) e crie uma pasta na raiz chamada “data” e dentro dessa pasta crie outra pasta chamada “inbox”. Nessa pasta armazenaremos um arquivo txt chamado “teste” com a mensagem “teste ola camel”.
Agora execute a classe CopiandoArquivoComCamel clicando com o botão direito em qualquer lugar desta classe e selecionando “Run As” e por fim “Java Application”.
Figura 10: Executando o projeto de integração criado.
Após isso, volte para a pasta do seu projeto e visualize que dentro da pasta “data” uma nova pasta chamada “outbox” foi criada com o arquivo “teste.txt” com a mensagem “teste ola camel”.
Figura 11: Arquivo criado na pasta outbox.
Podemos notar que a linguagem é extremamente simples de entender, por isso se torna simples utilizar o Apache CAMEL, e isso tudo se deve a DSL que ele usa. No exemplo acima temos apenas um CamelContext que é iniciado e parado, além disso adicionamos um sleep para dar tempo da aplicação copiar os arquivos.
Outro ponto interessante é o Route do Camel que estão definidos de tal maneira que eles fluem de um lado para o outro na medida em que vão sendo lidos. Esta rota pode ser lida da seguinte maneira: consuma a mensagem do arquivo localizado em data/inbox com a opção noop setada, e envie o arquivo para data/outbox. A opção noop diz ao Camel para deixar o fonte do arquivo do jeito que ele está. Se não utilizássemos essa opção o arquivo seria movido.
Agora que criamos nossa primeira integração de componentes, vamos um pouco mais adiante e ver um segundo exemplo onde contatamos um ftp externo e fazemos o upload dos arquivos para uma localização do nosso sistema de arquivos.
Crie uma nova classe conforme mostrado anteriormente e digite o código abaixo no Eclipse.
Listagem 2: Transferindo um arquivo do ftp para o disco local.
package camel;
import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
public class FileCopierWithCamel {
public static void main(String args[]) throws Exception {
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
public void configure() {
from("ftp://ftp.pucrs.br/mysql/img?delay=5s&move=done")
.to("file:target/download");
}
});
context.start();
Thread.sleep(10000);
context.stop();
}
}
Podemos verificar a pasta target/download e verificar que os arquivos do ftp externo foram facilmente baixados para a pasta de destino. Se criássemos um cliente FTP para fazer essa operação precisaríamos de várias linhas de código e diversas classes e pacotes extras para fazer a integração. Esse mesmo código poderia ser alterado para uma outra rota, como por exemplo, ao invés de enviar os arquivos do ftp externo para uma pasta poderíamos enviar para uma fila em java, alterando a rota para: from("ftp://ftp.pucpr.br/mysql/img?delay=5s&move=done").to("jms:incomingOrders");
O Apache Camel também provê diversas outras funcionalidades como integração com Web Services, além de muitos outros. Praticamente tudo pode ser integrado com Apache Camel.
Conclusão
Neste artigo estudamos o que é o Apache Camel, como podemos instalar o framework no Eclipse e por fim fizemos uma aplicação de integração com arquivos e ftp.