Java 8 – Converting dates between different time zones

The simplest way that I found to convert between different time zones using only Java 8 APIs.

ZonedDateTime targetDate = ZonedDateTime
    .parse("2016-11-20T11:00:00-05:00")
    .withZoneSameInstant(ZoneId.of("America/Argentina/Buenos_Aires"));
Original date 2016-11-20T11:00:00-05:00
America/Argentina/Buenos_Aires 2016-11-20T13:00:00-03:00
America/Sao_Paulo 2016-11-20T14:00:00-02:00

Do you have a simpler way? Please comment here. 🙂

Bytecode Java

Introdução à arquitetura e design de software

Todo desenvolvedor Java logo aprende que o código-fonte Java é compilado e gera bytecodes que formam o executável Java. Mas o que são exatamente esses bytecodes e o que fazem já é um ponto que muitos desenvolvedores ignoram.

Quando trabalhamos com uma tecnologia é sempre útil entender melhor sua base, seus fundamentos. Com o Java, conhecer um pouco mais dos bytecodes pode ajudar em alguns momentos.

Por isso, segue abaixo uma explicação sobre o bytecode Java e exemplo comentado.

Continuar lendo

Iniciando no Git

Livro Pro GitGit é uma ferramenta de controle de versão distribuída (Distributed Version Control System ou DVCS) criada por Linus Torvalds (sim, o mesmo criador do Linux), tem uma arquitetura diferenciada que cria cópias completas do repositório em cada máquina de trabalho, ao contrário da maioria das outras ferramentas que criam um único repositóriocentralizado. Dessa forma o Git ganha uma velocidade incrível, visto que quase toda operação é local. Daí, de tempos em tempos, basta sincronizar seu repositório local com o centralizado e todos verão suas alterações.

Outro diferencial da arquitetura do Git é que ele guarda versões completas dos arquivos de cada commit ao invés de apenas as alterações de um commit para outro, como a maioria das ferramentas de controle de versões o fazem, o que o permite ter uma flexibilidade (e poder) maiores e faz com que ele se porte como um mini-sistema de arquivos.

Abaixo estão algumas dicas para iniciar no Git e um guia de referência que lista os principais comandos utilizados com uma breve descrição.

Continuar lendo

Tradução – Modelo de Maturidade de Richardson

O conceituado computeiro Martin Fowler escreveu um interessante e esclarecedor artigo em seu website martinfowler.com baseado no modelo de maturidade RESTful desenvolvido por Leonard Richardson.

Este artigo foi escrito em 18 de março  de 2010 por Martin Fowler e postado como Richardson Maturity Model.

Por considerá-lo muito pertinente em relação ao desenvolvimento de aplicações RESTful, achei que poderia ser útil traduzí-lo.

Continuar lendo

Resumo de estudo para certificação Java Business Component Developer 5 (SCBCD/OCPJBCD 5 – 1Z0-860)

Enterprise JavaBeans 3.0Em meus estudos para a certificação Java Business Component Developer (antiga SCBDC 5 na Sun e nova OCPJBCD 5 na Oracle), acabei criando um resumo a partir do meu livro guia de estudo Enterprise Java Beans 3.0 (Bill Burke, Richard Monson-Haefel) – 5a. edição.

A fim de me ajudar a revisar para o exame e pensando em disponibilizar este conteúdo para o público interessado, segue abaixo transcrito meu resumo. Bom proveito. 😉

Continuar lendo

JPA standalone (fora do servidor, container ou da IDE)

Neste post vou mostrar o exemplo mais básico de utilização de JPA, sem a utilização de qualquer servidor (de aplicação ou não) e sem os pulos do gato de uma IDE como o Eclipse.

Acredito que para qualquer iniciante no estudo de uma tecnologia é sempre bom ter contato com a tecnologia em seu formato mais cru, a fim de entender os cernes da questão e evitar as armadilhas da abstração no completo entendimento.

Para este post pegue apenas seu Java SE e vamos brincar.

Continuar lendo

Exemplo Spring JMS: envio de e-mail assíncrono

Ao desenvolver nossos sistemas, nos deparamos as vezes com um problema: alguma funcionalidade é muito pesada em termos de processamento e não precisa necessariamente ser feita de forma sincronizada com o resto da lógica de negócio, por exemplo, envio de e-mails, envio de SMS, etc.

Nestes casos, para diminuir o tempo que o usuário espera pela resposta do sistema, é conveniente tornar assíncrono o processamento destas tarefas em relação ao resto da lógica. Uma estratégia comumente usada é utilizar filas de mensagens. Nestes casos a lógica principal de negócio em vez de chamar a rotina que envia o e-mail, só chama uma rotina que insere uma mensagem na fila específica de envio de e-mails. Enquanto isso, temos uma rotina “consumidora” desta fila, desatrealada da lógica principal, que “consumirá” as mensagens, tratando-as de forma adequada conforme sua disponibilidade, de forma assíncrona ao resto da aplicação.

Spring provê um framework que abstrai e simplifica o uso da API JMS (Java Message Service). Particularmente para este post, utilizaremos este mecanismo do Spring em conjunto com o suporte do Spring para POJOs dirigidos a mensagens (um modo de receber mensagens que se parece com beans orientado a mensagens Message-Driven BeansMDBs da especificação EJB). mas, que ao contrário do MDB nos permite utilizar um servidor web comum, como Tomcat, por exemplo.

Continuar lendo

“Sanitizando” strings para URLs seguras

Neste post estou disponibilizando uma classe simples de referência para “sanitizarStrings a fim de torná-las url safe, por exemplo. Esta característica é desejável em URLs Rewrite, por exemplo, onde queremos que nosso artigo “Caminhão na contra-mão!” seja apresentado na URL como algo assim:

http://www.nessauepapost.com.br/artigo/7/caminhao-na-contra-mao

As características desejáveis neste caso são:

1– Somente letras minúsculas

2– Letras acentuadas substituídas pela mesma letra sem acento

3espaços substituídos por hífen “-”

4caracteres especiais removidos

Continuar lendo

Exemplo de CRUD em JSF – Versão 1.0

Há muita confusão em JSF sobre como fazer a navegação da aplicação, o tratamento de requisições, etc, principalmente daqueles que migram de tecnologias diferentes, como Struts, por exemplo. Portanto, resolvi postar um projeto básico em JSF com um esquema de navegação simples de um CRUD (Create Read Update Delete).

Num próximo post pretendo fazer um exemplo de CRUD JSF um pouco mais incrementado, constituindo um framework simples para lidar com CRUDs.

Continuar lendo