Java 8: Construindo aplicações web em Java

Veja nesse artigo os novos recursos do Java 8 durante o desenvolvimento de uma aplicação web em Java.

Fique por dentro
Demonstraremos neste artigo, através de uma aplicação web, algumas das novas funcionalidades trazidas pelo Java 8. Dentre os diversos recursos desta versão, nos aprofundaremos na Stream API e como ela se integra às coleções do Java, e na nova API de manipulação de datas, algo que até então demandava várias linhas de código para operações simples.

Além disso, apresentaremos as Expressões Lambda, que sem dúvida é uma das principais e maiores atualizações desta versão, bem como abordaremos os conceitos de Default Methods e Interfaces Funcionais. A partir disso o leitor terá uma base sólida para iniciar o desenvolvimento de suas aplicações com o Java 8.

A Oracle acaba de lançar a nova versão do Java SE, trazendo mudanças profundas na linguagem de programação. Além de disponibilizar novas APIs, temos também alterações importantes na sintaxe da linguagem, o que influencia diretamente na forma como escrevemos nossos códigos em Java.

Dentre essas mudanças, podemos citar as Expressões Lambda como a maior atualização da versão 8 do Java e sem dúvida um dos recursos mais significativos desde o início da criação da plataforma Java. O grande impacto deste recurso se deve ao fato de trazer conceitos da programação funcional encontrados em linguagens como Scala e LISP, por exemplo, para dentro da linguagem Java.

As Expressões Lambda foram incluídas na plataforma através da JSR 335 e devido à sua importância, exploraremos essa novidade em detalhes no decorrer do artigo.

Com relação a mudanças, uma das mais esperadas para essa versão e que analisaremos aqui é a nova API para manipulação de datas, especificada na JSR 310 e que tem como implementação de referência o Projeto ThreeTen. Essa especificação foi liderada pelo mesmo autor da API Joda-Time, Stephen Colebourne.

Manipular datas em Java sempre foi algo trabalhoso. Muitos desenvolvedores criticavam a API relacionada pela maneira pouco trivial de realizar operações simples como somar ou subtrair dias ou horas de uma data.

Até mesmo formatar uma data provocava um número considerável de linhas de código, além de muitas vezes dar origem a um módulo de difícil manutenção.

Outros dois conceitos interessantes que estão presentes no Java 8 são o de Interfaces Funcionais, que são interfaces com apenas um método a ser implementado, e também os chamados Default Methods (Métodos Padrão), os quais permitem que tenhamos métodos concretos implementados em uma interface, possibilitando que esta seja alterada sem que perca sua compatibilidade com as classes que a implementam.

Durante o artigo apresentaremos também a Stream API, solução que fornece um estilo de programação funcional para a manipulação de coleções em Java. Veremos como é feita sua integração com as coleções do Java e demonstrar as facilidades que essa API oferece para realizar diferentes operações envolvendo coleções.

Todas essas atualizações trazidas pela versão 8 do Java serão discutidas de forma prática por meio da criação de uma aplicação web de Controle de Contas a Pagar. O objeto dessa aplicação será demonstrar como os novos paradigmas do Java 8 podem ser aplicados em um sistema real.

Visando facilitar o aprendizado, em algumas situações estabeleceremos algumas comparações de como certa funcionalidade é desenvolvida com Java 7 e como iremos desenvolvê-la a partir dos novos recursos do Java 8. Sem mais, vamos ao desenvolvimento!

Preparando o ambiente de desenvolvimento

Antes de iniciarmos o desenvolvimento da aplicação, é necessário ter o Java 8 instalado (veja na seção Links o endereço para download). Na página de download do Java 8, temos versões específicas do JDK para vários sistemas operacionais. Escolha a compatível com o seu ambiente de trabalho.

Após o download do JDK, basta executar sua instalação para que possamos iniciar os estudos das mudanças e novos recursos do Java 8.

Com o intuito de aumentar a produtividade, utilizaremos como IDE o NetBeans 7.4. Como servidor de aplicação, optamos pelo GlassFish 4, que pode ser instalado juntamente com o NetBeans. E para o armazenamento dos dados de nossa aplicação, vamos empregar o SGBD MySQL.

A aplicação Contas a Pagar

Para estudarmos as novidades e mudanças trazidas com o Java 8, criaremos uma pequena aplicação web de cadastro de contas a pagar, demonstrando os novos recursos dessa versão de forma prática. O código fonte completo desta aplicação pode ser baixado no site desta edição da Java Magazine.

Criando a aplicação no NetBeans

A fim de iniciamos o desenvolvimento, criaremos uma aplicação web no NetBeans clicando no botão Novo Projeto, selecionando a categoria Java Web, a opção Aplicação Web e clicando em Próximo.

Na tela seguinte, no campo Nome do Projeto, informe “ContasPagar”. Para escolher o servidor de aplicação GlassFish, na tela seguinte, deixe selecionada a opção correspondente e clique no botão Próximo.

O último passo do wizard é selecionar o framework web sobre o qual a parte web de nossa aplicação será construída. Como faremos uso do JSF 2.2, marque o checkbox JavaServer Faces e clique em Finalizar para confirmar a criação do projeto.

Criando as entidades de acesso ao Banco de Dados

Com a estrutura do projeto pronta, vamos criar as entidades de nossa aplicação, as quais deverão ser salvas no pacote br.com.jm.model. As entidades que devemos criar são: ContasAPagar, Fornecedor e TipoDocumento. As Listagens 1, 2 e 3 apresentam o código dessas entidades.

Listagem 1. Código da entidade ContasPagar.

package br.com.jm.model; //imports omitidos... @Entity @Table(name = "contas_pagar") public class ContasAPagar implements Serializable { @Id @Basic(optional = false) @NotNull @Column(name = "ID") private Integer id; @Size(max = 45) @Column(name = "DESCRICAO") private String descricao; @Column(name = "DATA_VENC") @Temporal(TemporalType.TIMESTAMP) private Date dataVenc; @Column(name = "VALOR") private Double valor; @JoinColumn(name = "FORNECEDOR_ID", referencedColumnName = "ID") @ManyToOne(optional = false) private Fornecedor fornecedor; @JoinColumn(name = "TP_DOC_ID", referencedColumnName = "ID") @ManyToOne(optional = false) private TipoDocumento tpDoc; public ContasPagar() { } public ContasPagar(Integer id) { this.id = id; } //Getters e setters omitidos... } " [...] continue lendo...

Artigos relacionados