Este é um post disponível para assinantes MVPIntroduçã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.
[Artigo já está disponível no Leitor Digital DevMedia®. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da Java Magazine 80
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
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
13 COMENTÁRIOS
não conseguimos verificar o problema. por favor, verifique suas configurações de video.

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.
propertyValue = "symbol = ''^BVSP'' AND volume >= 50"

O que eu preciso configurar e onde?
Agradeço muito a quem puder me ajudar.
Obrigado.

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.
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.
Por favor atualize para a a 3.1 beta e teste...

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
Valeu :)
Space do autor



0
0
