Por que eu devo ler este artigo:Este artigo é útil por apresentar um tutorial sobre a construção de um micro blog com agilidade e facilidade. Para isso, veremos como utilizar o framework Spark, perfeito para criar aplicações web em Java que estarão rodando em minutos e que não precisam escalar horizontalmente e verticalmente. Além disso, como solução para persistência dos dados, adotaremos o MongoDB, também abordado neste artigo.

Não é sempre que temos a necessidade de construir uma aplicação de nível empresarial, que requer um maior esforço e mais tempo para se construir. Em alguns casos, queremos desenvolver algo simples como, por exemplo, um micro blog pessoal, sem precisar se preocupar em ter que escalar a aplicação em todas as direções.

Muitas vezes queremos apenas algo rodando em produção em poucos minutos. Entretanto, depender de um servidor web Java, como o Tomcat, requer um trabalho nas partes de configuração, manutenção e deployment do projeto. Nestes casos, usar um servidor Jetty embutido facilita bastante a vida do desenvolvedor, principalmente na hora da execução da aplicação.

Outra parte do projeto que também costumamos investir bastante tempo é na camada de acesso ao banco de dados. Neste contexto, o MongoDB é uma solução que se destaca quando buscamos produtividade e performance. Um dos seus principais objetivos é manter o foco do desenvolvedor nos objetos da aplicação. Outro diferencial do MongoDB é que sua estrutura segue o modelo Schemaless, ou seja, o banco de dados não tem controle sobre a estrutura dos dados como, por exemplo, o nome das colunas e/ou a quantidade de colunas que um documento pode ter.

Além disso, para permitir uma maior performance, principalmente em ambientes distribuídos, o MongoDB não oferece algumas das principais funcionalidades encontradas no mundo SQL, como joins e transactions. Sendo assim, quando necessário, é de responsabilidade da aplicação viabilizar e controlar essas funcionalidades.

Com base nestas informações, veremos neste artigo como utilizar o Spark Framework para construir um micro blog completo. Para isso, adotaremos, além do framework Spark, o MongoDB, que, juntos, possibilitam criar aplicações web com o menor esforço possível, trocando funcionalidades empresarias, como controle de transações, por facilidade e agilidade. Neste cenário, como um importante complemento, veremos também como adotar o FreeMarker para gerar templates HTML.

Conhecendo o MongoDB

O MongoDB é um banco de dados NoSQL orientado a documentos que armazena arquivos no formato BSON, que de forma simples pode ser definido como uma versão binaria de um arquivo JSON.

No MongoDB chamamos de collection as estruturas que são parecidas com as tabelas dos bancos relacionais. Já os dados que são inseridos nestas coleções são chamados de documentos. Estes documentos, por sua vez, são formados por um mapa de chave/valor, onde cada chave seria como se fosse uma coluna de uma tabela.

Além disso, cada documento contido em uma coleção deve possuir obrigatoriamente uma chave única chamada _id, que funciona da mesma forma que uma primary key de um banco relacional. Por padrão, a chave _id é gerada automaticamente pelo MongoDB. No banco de dados MySQL, uma situação similar ocorre quando selecionamos a opção AUTO_INCREMENT na criação de uma PK.

Assim como em uma tabela, uma coleção serve para guardar documentos que são comuns entre si, como uma tabela Usuarios, que possui colunas referentes à entidade Usuario, como nome, email e senha. Contudo, o MongoDB não possui um Schema para os dados que estão sendo inseridos nas coleções. Isso significa que é possível, por exemplo, guardar documentos referentes a posts de um blog em uma coleção de Usuarios. Porém, isso é uma péssima prática e apenas dificultará a recuperação dos dados do banco.

Deste modo, normalmente precisamos ter diversas coleções em uma aplicação. Este conjunto de coleções é mantido por um container físico denominado database que, por sua vez, é análogo a um também chamado de database do mundo relacional. Na maior parte dos casos, em um banco MongoDB temos um database para cada aplicação.

Contudo, as duas principais qualidades do MongoDB são a alta produtividade e a possibilidade de lidar com Big Data, pois assim como a maioria dos bancos NoSQL, este já foi criado com o intuito de ser facilmente configurado em um ambiente distribuído.

Introdução ao framework Spark

De acordo com a própria descrição do site do Spark, este framework foi fortemente inspirado no Sinatra, uma DSL (vide BOX 1) que permite criar aplicações web em Ruby com o mínimo esforço, sem ter que se preocupar muito com configurações e boilerplate code (vide BOX 2), como quando utilizamos o Spring MVC.

BOX 1. DSL

DSL, ou Domain-Specific-Language, é um tipo de linguagem de programação dedicada a um domínio de problema particular, especifico para um cenário. O SQL, por exemplo, é uma DSL para consultas em bancos de dados relacionais. Neste caso, o problema seria a consulta e o domínio do banco de dados relacional.

BOX 2. Boilerplate code

São códigos que sempre temos que escrever quando desenvolvemos alguma coisa. Por exemplo: no Spring MVC, temos que escrever uma configuração padrão no arquivo web.xml, sendo que na maioria das vezes, é exatamente o mesmo código, exceto por algumas pequenas diferenciações.

O Spark é um framework de código aberto que serve como uma alternativa aos diversos frameworks de desenvolvimento de aplicações web em Java, como JSF, Spring MVC, Play Framework, entre outros. Por padrão, ele roda em um servidor Jetty embutido, mas pode ser configurado para ser executado em qualquer servidor web como, por exemplo, no Tomcat.

A arquitetura de um software feito com o Spark Framework segue o padrão MVC, onde separamos a aplicação em no mínimo três camadas (Modelo, Visão e Controle). Seu principal objetivo é separar a informação e as regras de negócio da interface com a qual o usuário interage.

Um dos poucos códigos boilerplate de uma aplicação desenvolvida com Spark é a configuração das rotas. A rota é um componente responsável por transformar cada entrada HTTP, que chamamos de request, em uma ação, a qual pode ou não retornar uma resposta. Cada rota é constituída de três partes principais, a saber:

  • Verbo: Um verbo definido pela especificação HTTP, como GET, POST, PUST, DELETE;
  • Callback: Uma função que recebe uma request e uma response e retorna uma String que pode ser utilizada por engines de templates para renderizar páginas HTML;
  • Caminho: O caminho se refere ao endereço de rede que, quando acessado, ir ...
    Quer ler esse conteúdo completo? Tenha acesso completo