Padrão Builder: Como construir objetos complexos em Java (Effective Java’s Builder pattern)

Classes com muitos atributos opcionais em seus métodos construtores podem trazer bastante sujeira para o código, além de aumentar a probabilidade de erros quanto mais atributos forem necessários para instanciar um objeto da classe em questão. Considere o exemplo a seguir da classe Produto, que possui 8 atributos. import java.math.BigDecimal; public class Produto { private…

Como as linguagens modernas tratam valores null

Valores null podem (e com certeza vão), em algum momento, resultar em uma NullPointerException. Negligenciar aspectos que podem resultar essas exceptions podem trazer problemas difíceis de serem encontrados e resolvidos. Pense em uma cadeia de objetos que formam uma hierarquia de objetos dependentes. Se qualquer desses objetos permitir um valor null e em algum momento…

Réplicas de leitura MySQL usando Docker

Há algum tempo atrás a implementação de replicação de banco de dados era uma tarefa trabalhosa, particularmente em termos de configuração e instalação de servidores de banco de dados. Graças ao Docker, essa tarefa que antes levava no mínimo algumas horas, agora pode ser concluída em menos de uma hora. Vejamos os passos necessários para…

HTTP/2 Server Push no Java EE 8

O Java EE 8 chegou e com ele muitas novidades. Há atualizações nas APIs JAX-RS, Bean Validation, JSF, CDI, JSONP e Servlet. Uma das maiores atualizações está na API Servlet, que está agora na versão 4.0. A maior novidade na API Servlet é o suporte ao protocolo HTTP/2 que traz consigo muitas melhorias, como request/response…

Leitura de arquivos em Java: padrões

A leitura de arquivos sempre foi uma tarefa corriqueira na programação, desde pequenos experimentos para simulação de bancos de dados até o uso de arquivos para troca de informações entre diferentes sistemas. Por muito tempo, em Java, houveram alguns padrões dominantes para a leitura de arquivos, como o uso de BufferedReader, Java NIO ou Apache…

Java EE CDI: Como e quando utilizar Interceptors e Decorators

A Revista Java Magazine 156 traz um artigo meu sobre CDI. CDI é a especificação do Java EE para lidar com contextos (diferentes estados da aplicação e seus objetos relacionados) e injeção de dependências. Essa especificação se integra tão bem e de forma tão natural ao restante da plataforma Java que, muitas vezes, seus recursos…

Manifesto Reativo para Sistemas Reativos

Os requisitos não funcionais mudaram muito nos últimos anos. Até pouco tempo  atrás, aplicações rodavam em dezenas de servidores, o tempo de resposta era na casa de alguns segundos, algumas horas de tolerância offline e dados na casa dos gigabytes. Atualmente, em compasso com a evolução tecnológica, esses mesmos requisitos não funcionais desenvolveram-se para aplicações…

Microservices

A definição mais simplória de microservices seria a de uma abordagem para desenvolvimento de aplicações compostas por uma série de pequenos serviços. Ao pensar rapidamente sobre essa descrição, a arquitetura SOA ressurge na mente como uma arquitetura intimamente ligada a abordagem de microservices. De fato, microservices é uma evolução do pensamento orientado a serviço tradicional…

Modelagem ágil com AMDD

A revista Engenharia de Software magazine deste mês traz um artigo meu sobre agilidade na modelagem arquitetural. A AMDD pode desempenhar um papel fundamental para melhorar o cenário atual de produtividade no desenvolvimento e na manutenção do software. Esse artigo é útil, uma vez que a AMDD possibilita, durante a implementação do software, além de…