Artigo do tipo Teórico
Recursos especiais neste artigo:
Conteúdo sobre Novidades
JMS 2.0: A renovação do Java Message Service:
Este artigo explora as principais novidades da nova versão da API do Java Message Service (JMS 2.0). Serão apresentados exemplos de código construídos com as versões em desenvolvimento do GlassFish 4 e da IDE NetBeans, que já oferecem suporte à maioria das funcionalidades da Java EE 7.

Em que situação o tema é útil:
Este tema é útil para arquitetos e desenvolvedores que implementam soluções de mensageria baseadas em JMS e que têm interesse em conhecer e se adaptar às características e funcionalidades que estão sendo trazidas pela nova versão da especificação JMS.

Após alguns atrasos, o lançamento oficial da Java EE 7 está muito próximo de acontecer. No momento em que este artigo é escrito, as especificações que definem o conjunto de APIs sob a especificação “guarda-chuva” da Java EE 7 (JSR 342) acabam de passar pelo estágio “Final Approval Ballot”, no qual o Comitê Executivo do JCP (Java Community Process) votou pela aprovação das propostas das especificações. Segundo um comunicado no blog da Oracle, o lançamento da implementação de referência da Java EE 7, o GlassFish 4.0, deverá acontecer nas próximas semanas.

A Java EE 7 é a primeira versão da plataforma sob a gestão da Oracle. O lançamento contempla um total de 14 JSRs, que inclui a atualização de algumas especificações e a introdução de outras, como WebSocket, Batch, JSON API e Concurrency Utilities. Neste cenário, um dos lançamentos mais aguardados e comentados é a nova versão da especificação JMS (Java Message Service).

A existência da tecnologia JMS na plataforma Java precede o lançamento da Java EE. Desde sua concepção houve apenas uma atualização de versão, a JMS 1.1 na Java EE 1.4 em 2002. Nesse meio tempo houve muitas evoluções no stack de tecnologias da Java EE e na própria linguagem Java. Devido ao fato de a especificação não ter acompanhado o mesmo ritmo das demais tecnologias, muitos fornecedores passaram a adicionar melhorias e novas funcionalidades em seus respectivos produtos para suprir novas demandas, mas que fogem do padrão definido pela especificação.

Visando atualizar a tecnologia frente às evoluções da plataforma Java/Java EE e atender as demandas do mercado, em março de 2011 a JSR 343 foi proposta e aprovada no JCP, formando-se então um Expert Group, liderado por Nigel Deakin da Oracle, para dar início aos trabalhos de definição da nova versão da especificação.

O JMS é uma tecnologia de muito sucesso no meio corporativo e amplamente utilizada desde sua concepção. Entretanto, as versões anteriores da API são bastante verbosas por exigirem a criação de diversos objetos intermediários para fazer um simples envio de mensagem, além de possuírem métodos que lançam exceções verificadas (checked exceptions) e forçam o tratamento das chamadas dentro de blocos try/catch. Um dos principais objetivos desta nova versão é justamente simplificar e facilitar o desenvolvimento de aplicações que utilizam a tecnologia. Além disso, a nova versão aproveita bastante as últimas features da linguagem Java, como anotações, generics e autocloseable, assim como da Java EE, como injeção de dependências com CDI.

Enquanto as versões finais da especificação e da implementação de referência da Java EE 7 não são lançadas, é possível já começar a experimentar as mudanças que vêm por aí. O GlassFish 4 ainda está em fase de desenvolvimento, mas já está disponível para download em versões em estágio promoted e nightly builds, contendo muitas das novas funcionalidades, não apenas do JMS 2.0, mas também da maioria das demais especificações. Cabe ressaltar que, como se trata de uma versão que está em pleno desenvolvimento, ela ainda é considerada instável e sujeita a bugs. Outra boa notícia é que a IDE NetBeans também já oferece suporte parcial às novas funcionalidades da Java EE 7 em suas versões early builds da branch javaee7. É possível, entre outras coisas, criar aplicações Java EE 7, utilizar wizards para geração de componentes ou trechos de código aderentes às novas APIs da Java EE 7 e integrar o servidor GlassFish 4 para realizar a implantação de aplicações diretamente pela IDE.

O GlassFish 4 e a IDE NetBeans foram utilizados para construir e testar os exemplos apresentados neste artigo. Se o leitor preferir acompanhar e realizar seus próprios testes, baixe os arquivos de instalação utilizando os links de download disponíveis no final deste artigo. Para instalação de ambos, apenas descompacte os respectivos arquivos “.zip” em algum diretório da máquina. Em seguida, abra o NetBeans e configure o servidor GlassFish na aba Services utilizando o wizard da IDE.

JMS: O que é e para que serve?

Antes de entrarmos nos detalhes das mudanças na API JMS 2.0, cabe aqui uma contextualização para os leitores que ainda não conhecem ou nunca trabalharam com soluções de mensageria ou com a própria tecnologia JMS.

Os middlewares de mensageria são soluções consolidadas há bastante tempo no mercado corporativo que fornecem um meio alternativo à comunicação síncrona entre aplicações distribuídas e multiplataforma. Essa camada intermediária de software desacopla os clientes dos provedores de serviços ao fornecer um modelo de comunicação assíncrono por meio da troca de mensagens (veja a Figura 1). Em vez de invocar uma operação síncrona na API do serviço desejado, a aplicação cliente constrói uma mensagem contendo os dados necessários para a chamada (payload) e a envia para o middleware. Este, por sua vez, cuida do armazenamento temporário da mensagem em destinos específicos, que podem ser filas ou tópicos, e da entrega final da mensagem ao provedor do serviço. Se a operação requisitada gerar uma resposta, uma fila adicional pode ser utilizada para que o provedor do serviço encaminhe o resultado do processamento e a aplicação cliente possa consumi-lo.

...

Quer ler esse conteúdo completo? Tenha acesso completo