DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


Introdução à JMS com Java EE 6 - Java Magazine 80

Uma “introdução moderna” à JMS (inclusive MDB), escrita principalmente para o leitor que ainda não se aventurou com a API de mensageria da plataforma Java EE. Mostramos como programar a JMS com a versão mais recente do Java EE, o que deve tornar o artigo interessante também como atualização para quem já o fez em versões anteriores da plataforma.






Introdução à JMS com Java EE 6

Aprenda a usar a JMS, ou atualize-se com as facilidades do Java EE 6

A Java Message API não sofreu alterações no Java EE 6, mas também se beneficia de melhorias da nova plataforma como CDI. Nunca foi tão fácil criar sistemas com mensageria assíncrona em Java

De que se trata o artigo:

Uma “introdução moderna” à JMS (inclusive MDB), escrita principalmente para o leitor que ainda não se aventurou com a API de mensageria da plataforma Java EE. Mostramos como programar a JMS com a versão mais recente do Java EE, o que deve tornar o artigo interessante também como atualização para quem já o fez em versões anteriores da plataforma.

Para que serve:

A JMS (Java Message Service) permite a comunicação assíncrona entre aplicações, utilizando dois modelos básicos de conectividade:

1)   Filas ponto-a-ponto (queues), onde mensagens submetidas por uma aplicação “produtora” são entregues a uma única aplicação “consumidora”. Pode haver vários consumidores conectados à mesma fila, neste caso somente um deles receberá cada mensagem;

2)   Canais publish/subscribe (topics), onde cada mensagem pode ser recebida simultaneamente por diversas aplicações consumidoras.

Em que situação o tema é útil:

Para o leitor que está dando seus primeiros passos com mensageria assíncrona / JMS, ou interessado em novidades da plataforma Java EE 6 (por exemplo, Contexts and Dependency Injection). Para quem ainda não se interessou por mensageria JMS, procuramos apresentar uma motivação. Finalmente, abordamos também as últimas atualizações sobre o status das tecnologias da Sun após a aquisição pela Oracle.

 

Em comparação com middlewares síncronos (como EJB), a JMS proporciona baixo acoplamento entre produtores e consumidores, pois estes não precisam estar diretamente conectados, nem precisam estar executando ao mesmo tempo – mensagens podem ser armazenadas nas filas/topics por algum tempo (indefinido ou limitado) enquanto não são lidas por alguém. A comunicação assíncrona tem vantagens bem conhecidas; facilita criar aplicações com características como:

·      Alta concorrência: a comunicação síncrona A®B implica que a aplicação A não precisa ficar parada enquanto B recebe uma mensagem e executa algum processamento; portanto, há maior potencial de paralelismo, especialmente no lado do produtor;

·      Tolerância a falhas: se a aplicação B ficar temporariamente indisponível ou talvez sobrecarregada, isso não impede A de funcionar, nem mesmo deixa A com alguns recursos importantes (como um thread, conexão com database etc.) bloqueados inutilmente enquanto aguarda B – o que tende a reduzir a carga e o risco de falhas também no servidor de A;

·      Escalabilidade e balanceamento: transações complexas que envolvem vários sistemas são naturalmente divididas em fatias pequenas e independentes, permitindo à infraestrutura (containers Java EE, JMS, monitor de transações, software de clustering) conseguir melhor paralelismo e ocupação eficiente de recursos.

 

Existem ainda outras características interessantes, como facilidade de monitoração (é fácil capturar e analisar as mensagens trocadas entre as aplicações), e interoperabilidade com web services (mensagens XML podem ser encapsuladas em mensagens JMS). Na comparação com os web services, a mensageria JMS tem maior desempenho (permite trafegar dados binários entre outras vantagens) e permite implementar transações distribuídas (operações de envio e recepção de mensagens podem participar de uma transação XA, sendo passíveis de rollback).

Este artigo tem uma abordagem totalmente prática; para mais detalhes sobre a API e mensageria, bem como uma abordagem alternativa de programação, veja o artigo online de Fábio Augusto Falavinha na Edição 76: “JMS na prática com Spring e ActiveMQ”.

 

Transação XA:"



ATENÇÃO! A exibição deste artigo foi interrompida.


  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!






    13 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Bruno Mendes
Está impossível de ler coisas no vídeo. Fullscreen pior ainda...
[há +1 ano] - Responder

 

Devmedia - Equipe De Moderação
Bruno,
não conseguimos verificar o problema. por favor, verifique suas configurações de video.
[há +1 ano] - Responder
 

Cassio Cunha Noronha
To encontrando o seguinte erro depois que coloquei o filtro para recepção de mensagem.

INFO: endpoint.determine.destinationtype
GRAVE: createConsumer on JMSService:jmsdirect failed for connectionId:5931288506789607936 and sessionId:5931288506789608448 due to invalid selector=symbol = ^BVSP AND volume >= 50
AVISO: Exception during endpoint activation for ra [ jmsra ], activationSpecClass [ com.sun.messaging.jms.ra.ActivationSpec ] : javax.resource.NotSupportedException: MQRA:EC:Error creating Direct Message Consumer:
createConsumer on JMSService:jmsdirect failed for connectionId:5931288506789607936 and sessionId:5931288506789608448 due to invalid selector=symbol = ^BVSP AND volume >= 50
GRAVE: MDB00017: [QuotesConsumerBean]: Exception in creating message-driven bean container: [java.lang.Exception]
GRAVE: java.lang.Exception
java.lang.Exception
        at com.sun.enterprise.connectors.inbound.ConnectorMessageBeanClient.setup(ConnectorMessageBeanClient.java:229)
...
...
...
Caused by: javax.resource.NotSupportedException: MQRA:EC:Error creating Direct Message Consumer:
createConsumer on JMSService:jmsdirect failed for connectionId:5931288506789607936 and sessionId:5931288506789608448 due to invalid selector=symbol = ^BVSP AND volume >= 50

Tem alguma sugestão do que pode estar acontecendo?

Obrigado.
[há +1 ano] - Responder

 

Cassio Cunha Noronha
resolvi.. faltava colocar aspas simples logo após symbol, ficando deste jeito

propertyValue = "symbol = ''^BVSP'' AND volume >= 50"
[há +1 ano] - Responder
 

Cassio Cunha Noronha
Se eu criar uma fila em um outro servidor, diferente de onde está meu servidor de aplicação, como faço pra configurar o ip dessa fila pra onde desejo enviar/receber mensagens?Obrigado
[há +1 ano] - Responder

 

Luiz Daniel Soares
Ola Cassio, voce precisa configurar o jndi da fila que voce criou nesse servidor, no servidor da sua aplicação, para acessar as filas/topicos nas aplicações que irao enviar/receber as mensagens. 
[há +1 ano] - Responder
 

Cassio Cunha Noronha
Gostaria de saber como fazer se a minha fila JMS estiver em um outro servidor, não entendi a resposta acima.
O que eu preciso configurar e onde?

Agradeço muito a quem puder me ajudar.

Obrigado.
[há +1 ano] - Responder
 

Ythalo Rossy Saldanha Lira
Olá Luiz,

Ao adicionar a propriedade messageSelector, com o intuito de filtrar a mensagem, o MDB parou de consumir as mensagem da fila. Segui o conselho do colega Cassio e adicionei as aspas simples, mas mesmo assim não funcionou

@MessageDriven(mappedName = "jms/Quotes",
activationConfig = {
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "messageSelector", propertyValue = "symbol=''^BVSP'' AND volume>=50")
})

Atenciosamente.
[há +1 ano] - Responder

 

Dyego Souza Do Carmo
Poderia saber qual o servidor de aplicacoes que voce está utilizado ?
[há +1 ano] - Responder
 

Ythalo Rossy Saldanha Lira
Olá Dyego,

Estou utilizando o Oracle Glassfish 3, a versão que vem na instalação do Netbeans 6.9.1.

Ao utilizar o código abaixo para filtrar apenas as mensagem com volume maior ou igual a 50, o Consumer retirou varias mensagens com volume menor que 50.

@MessageDriven(mappedName = "jms/Quotes",
activationConfig = {
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "messageSelector", propertyValue = "volume >= 50")
})


No mais, o artigo foi muito esclarecedor e objetivo, consegui atigir um bom conhecimento prático sobre JMS.

Obrigado.
[há +1 ano] - Responder
 

Dyego Souza Do Carmo
O Glassfish V3 está com um bug bem complicado no JMS e versão 3.0.1,

Por favor atualize para a a 3.1 beta e teste...

[há +1 ano] - Responder
 

Luiz Carlos Freitas Flores Junior
ola so iniciante em java estou como uma duvida:
uma vez instalado o NetBeans com suporte a Java EE e Glassfish, está tudo configurado. Só precisamos criar os recursos de JMS que serão usados pela aplicação.
Comece entrando no console de administração do Glassfish, que por default fica em localhost:4848.

bom imagino q é só isntalar o netbeans com glassfish e depois entra no browser e difitar uma vez instalado o NetBeans com suporte a Java EE e Glassfish, está tudo configurado. Só precisamos criar os recursos de JMS que serão usados pela aplicação.
Comece entrando no console de administração do Glassfish, que por default fica em localhost:4848 e deu teria q abrir o glassfish????

Ou tem q fazer alguma coisa tipo abilitar o serviço do glassfish pra q ele fique funcionando???? ou ainda se uso o windws seven tem q instalar o netbeans como administrador ??? ou o q tenho q fazer pra funcionar aqui??? bahh estava lendo a revista bem faceiro e tranquei nesta parte e agora??? se alguem puder ajudar agradeço procurei no google + parece q nenguem fala nisso pq todo munco conhece q é só abrir o navegador e deu rsrsrs achei estranho q só eu no mundo nao faço nem idéia de como é o glassfish kkk t++ galera e de um help ai rsrsr
[há +1 mês] - Responder

 

Dyego Souza Do Carmo
Adicione um novo recurso do JMS em sua app (ex: Message Driven Bean) e você vai ver que tudo vai ser automagicamente configurado quando voce rodar sua aplicação pela primeira vez.


Valeu :)
[há +1 mês] - Responder
 



Publicidade
Autor
Osvaldo Pinali Doederlein

é Mestre em Engenharia de Software Orientado a Objetos e Arquiteto de Tecnologia da Visionnaire Informática, trabalhando em projetos de software e prospecção tecnológica.


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
0   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03