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…

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…

Como executar comandos no Linux a partir do Java

Há muito tempo o sistema operacional Linux se tornou o principal SO rodando em servidores corporativos. Considerando a importância dessa plataforma e o número elevado de soluções rodando sob o Linux, é comum aparecerem diversas necessidades em termos de integração para execução de comandos no Linux a partir de alguma ferramenta de implementação. Recentemente fui…

Conformação arquitetural: sincronizando o código e a arquitetura do projeto

A edição de abril de 2015 da Revista Java Magazine trás um artigo meu sobre Conformação Arquitetural. Ao longo do tempo a arquitetura planejada para um software tende a se distanciar do que foi inicialmente projetado. A representação do projeto por meio de diagramas UML em documentos de arquitetura de software perdem total conexão com o código fonte…

Streams API: trabalhando de forma flexível com coleções em Java

A edição de janeiro de 2015 da Revista Java Magazine trás um artigo meu sobre a Streams API e novas formas para lidar com coleções no Java 8. Esse artigo apresenta a Streams API, uma das novidades do Java 8 que traz facilidades e melhorias para o processamento de elementos em coleções. O ponto de partida para esse…

Java Reflection: um exemplo prático

Reflexão (reflection) é uma característica que permite a um programa observar e até modificar a sua estrutura e o seu comportamento interno. Os termos comumente utilizados são reflexão e introspecção. Na reflexão, um programa observa e modifica seu comportamento enquanto que na introspecção ele apenas observa e obtém informações dele mesmo. A linguagem Java possui…

Replicação de sessão e balanceamento de carga em ambientes distribuídos (Tomcat, NGinx e Java)

A edição de outubro de 2014 da Revista easy Java Magazine trás um artigo meu sobre cluster e replicação de sessão com Tomcat, NGinx e Java, abordando diversos conceitos relacionados à computação distribuída e oferecendo uma introdução aos principais tópicos da disciplina como base para a aplicação prática de um cluster, implementado com o servidor HTTP NGinx como…