Enviar pesquisa
Carregar
JMS 2.0: Simplificação da API
•
7 gostaram
•
1,279 visualizações
Título melhorado com IA
Bruno Borges
Seguir
Conheça as novidades da nova especificação do Java Message Service
Leia menos
Leia mais
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 59
Baixar agora
Baixar para ler offline
Recomendados
Introducao EJB 3
Introducao EJB 3
Rodrigo Cândido da Silva
EJB
EJB
Fábio Nogueira de Lucena
Tutorial EJB 3.0 (2009)
Tutorial EJB 3.0 (2009)
Helder da Rocha
JME Web Services API: um estudo de caso
JME Web Services API: um estudo de caso
Luiz Matos
ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)
mauriciopel
Visão Geral de EJB 3.0
Visão Geral de EJB 3.0
Fábio Nogueira de Lucena
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
Rodrigo Cândido da Silva
Enterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na prática
Globalcode
Recomendados
Introducao EJB 3
Introducao EJB 3
Rodrigo Cândido da Silva
EJB
EJB
Fábio Nogueira de Lucena
Tutorial EJB 3.0 (2009)
Tutorial EJB 3.0 (2009)
Helder da Rocha
JME Web Services API: um estudo de caso
JME Web Services API: um estudo de caso
Luiz Matos
ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)
mauriciopel
Visão Geral de EJB 3.0
Visão Geral de EJB 3.0
Fábio Nogueira de Lucena
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
Rodrigo Cândido da Silva
Enterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na prática
Globalcode
Maratona JBoss 2010 - JBoss-ESB
Maratona JBoss 2010 - JBoss-ESB
Dextra
Java Web 1 Introducao
Java Web 1 Introducao
Eduardo Mendes
GUJavaSC - Desenvolvendo uma Aplicação com Java EE
GUJavaSC - Desenvolvendo uma Aplicação com Java EE
Rodrigo Cândido da Silva
Bancos de dados e jdbc java para desenvolvimento web
Bancos de dados e jdbc java para desenvolvimento web
silvio_sas
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
Eduardo Mendes
Apresentação JSF
Apresentação JSF
Carlos Henrique
Flisolgo2010
Flisolgo2010
Paulo Jerônimo
Tutorial +login+mvc
Tutorial +login+mvc
Diego Feitoza
Introdução a jsf
Introdução a jsf
Jorge William Rodrigues
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer Faces
Rafael Ponte
Java OO Middleware - JEE / EJB / RMI
Java OO Middleware - JEE / EJB / RMI
Yitzhak Stone
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Adriano Teixeira de Souza
Serra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EE
Rodrigo Cândido da Silva
Aula1
Aula1
Daniel Ortega Sequesseque
Trabalho teorico de Linguagem de Programação
Trabalho teorico de Linguagem de Programação
carlosveiga
Workshop05
Workshop05
Philippe Guillaume, MBA,CISSP, COBIT
API de segurança do Java EE 8
API de segurança do Java EE 8
Helder da Rocha
JavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em Desenvolvimento
Eduardo Bregaida
ServiceMix e CXF
ServiceMix e CXF
Bruno Borges
CON22150 - The Future of JVM Performance Tuning
CON22150 - The Future of JVM Performance Tuning
Ricardo Ferreira
JUDCon Brazil 2013
JUDCon Brazil 2013
George Gastaldi
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EE
Bruno Borges
Mais conteúdo relacionado
Mais procurados
Maratona JBoss 2010 - JBoss-ESB
Maratona JBoss 2010 - JBoss-ESB
Dextra
Java Web 1 Introducao
Java Web 1 Introducao
Eduardo Mendes
GUJavaSC - Desenvolvendo uma Aplicação com Java EE
GUJavaSC - Desenvolvendo uma Aplicação com Java EE
Rodrigo Cândido da Silva
Bancos de dados e jdbc java para desenvolvimento web
Bancos de dados e jdbc java para desenvolvimento web
silvio_sas
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
Eduardo Mendes
Apresentação JSF
Apresentação JSF
Carlos Henrique
Flisolgo2010
Flisolgo2010
Paulo Jerônimo
Tutorial +login+mvc
Tutorial +login+mvc
Diego Feitoza
Introdução a jsf
Introdução a jsf
Jorge William Rodrigues
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer Faces
Rafael Ponte
Java OO Middleware - JEE / EJB / RMI
Java OO Middleware - JEE / EJB / RMI
Yitzhak Stone
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Adriano Teixeira de Souza
Serra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EE
Rodrigo Cândido da Silva
Aula1
Aula1
Daniel Ortega Sequesseque
Trabalho teorico de Linguagem de Programação
Trabalho teorico de Linguagem de Programação
carlosveiga
Workshop05
Workshop05
Philippe Guillaume, MBA,CISSP, COBIT
API de segurança do Java EE 8
API de segurança do Java EE 8
Helder da Rocha
JavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em Desenvolvimento
Eduardo Bregaida
ServiceMix e CXF
ServiceMix e CXF
Bruno Borges
CON22150 - The Future of JVM Performance Tuning
CON22150 - The Future of JVM Performance Tuning
Ricardo Ferreira
Mais procurados
(20)
Maratona JBoss 2010 - JBoss-ESB
Maratona JBoss 2010 - JBoss-ESB
Java Web 1 Introducao
Java Web 1 Introducao
GUJavaSC - Desenvolvendo uma Aplicação com Java EE
GUJavaSC - Desenvolvendo uma Aplicação com Java EE
Bancos de dados e jdbc java para desenvolvimento web
Bancos de dados e jdbc java para desenvolvimento web
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
Apresentação JSF
Apresentação JSF
Flisolgo2010
Flisolgo2010
Tutorial +login+mvc
Tutorial +login+mvc
Introdução a jsf
Introdução a jsf
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer Faces
Java OO Middleware - JEE / EJB / RMI
Java OO Middleware - JEE / EJB / RMI
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Serra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EE
Aula1
Aula1
Trabalho teorico de Linguagem de Programação
Trabalho teorico de Linguagem de Programação
Workshop05
Workshop05
API de segurança do Java EE 8
API de segurança do Java EE 8
JavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em Desenvolvimento
ServiceMix e CXF
ServiceMix e CXF
CON22150 - The Future of JVM Performance Tuning
CON22150 - The Future of JVM Performance Tuning
Semelhante a JMS 2.0: Simplificação da API
JUDCon Brazil 2013
JUDCon Brazil 2013
George Gastaldi
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EE
Bruno Borges
JSP - Java Serves Pages
JSP - Java Serves Pages
Amanda Luz
GUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EE
Rodrigo Cândido da Silva
Repensando padrões e boas práticas java ee
Repensando padrões e boas práticas java ee
Adriano Tavares
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Vinicius Pulgatti
Curso jsf
Curso jsf
jornaljava
GUJavaSC - Java EE 7 In Action
GUJavaSC - Java EE 7 In Action
Rodrigo Cândido da Silva
Tutorial Java EE
Tutorial Java EE
Rodrigo Cândido da Silva
Como Sobreviver Com Java2
Como Sobreviver Com Java2
Saulo Arruda
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
Elenilson Vieira
MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)
Rodrigo Cândido da Silva
Introdução a Plataforma Java EE
Introdução a Plataforma Java EE
Eder Magalhães
Curso de Java (Parte 5)
Curso de Java (Parte 5)
Mario Sergio
MySQL + Java - Manuel Contreras
MySQL + Java - Manuel Contreras
MySQL Brasil
TDC2012 - Implementando aplicativos Web com JSF, CDI e JPA
TDC2012 - Implementando aplicativos Web com JSF, CDI e JPA
Rodrigo Cândido da Silva
Apache e Java
Apache e Java
Glaucio Scheibel
Java EE no ambiente corporativo: primeiros passos WebLogic 12c
Java EE no ambiente corporativo: primeiros passos WebLogic 12c
Bruno Borges
Java ee 5
Java ee 5
Juarez Junior
Javaone2010
Javaone2010
Wende Mendes
Semelhante a JMS 2.0: Simplificação da API
(20)
JUDCon Brazil 2013
JUDCon Brazil 2013
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EE
JSP - Java Serves Pages
JSP - Java Serves Pages
GUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EE
Repensando padrões e boas práticas java ee
Repensando padrões e boas práticas java ee
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Curso jsf
Curso jsf
GUJavaSC - Java EE 7 In Action
GUJavaSC - Java EE 7 In Action
Tutorial Java EE
Tutorial Java EE
Como Sobreviver Com Java2
Como Sobreviver Com Java2
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)
Introdução a Plataforma Java EE
Introdução a Plataforma Java EE
Curso de Java (Parte 5)
Curso de Java (Parte 5)
MySQL + Java - Manuel Contreras
MySQL + Java - Manuel Contreras
TDC2012 - Implementando aplicativos Web com JSF, CDI e JPA
TDC2012 - Implementando aplicativos Web com JSF, CDI e JPA
Apache e Java
Apache e Java
Java EE no ambiente corporativo: primeiros passos WebLogic 12c
Java EE no ambiente corporativo: primeiros passos WebLogic 12c
Java ee 5
Java ee 5
Javaone2010
Javaone2010
Mais de Bruno Borges
Secrets of Performance Tuning Java on Kubernetes
Secrets of Performance Tuning Java on Kubernetes
Bruno Borges
[Outdated] Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on Kubernetes
Bruno Borges
From GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX Apps
From GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX Apps
Bruno Borges
Making Sense of Serverless Computing
Making Sense of Serverless Computing
Bruno Borges
Visual Studio Code for Java and Spring Developers
Visual Studio Code for Java and Spring Developers
Bruno Borges
Taking Spring Apps for a Spin on Microsoft Azure Cloud
Taking Spring Apps for a Spin on Microsoft Azure Cloud
Bruno Borges
A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...
A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...
Bruno Borges
Melhore o Desenvolvimento do Time com DevOps na Nuvem
Melhore o Desenvolvimento do Time com DevOps na Nuvem
Bruno Borges
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Bruno Borges
Java EE Arquillian Testing with Docker & The Cloud
Java EE Arquillian Testing with Docker & The Cloud
Bruno Borges
Migrating From Applets to Java Desktop Apps in JavaFX
Migrating From Applets to Java Desktop Apps in JavaFX
Bruno Borges
Servidores de Aplicação: Por quê ainda precisamos deles?
Servidores de Aplicação: Por quê ainda precisamos deles?
Bruno Borges
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
Bruno Borges
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
Bruno Borges
Booting Up Spring Apps on Lightweight Cloud Services [CON10258]
Booting Up Spring Apps on Lightweight Cloud Services [CON10258]
Bruno Borges
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
Bruno Borges
Running Oracle WebLogic on Docker Containers [BOF7537]
Running Oracle WebLogic on Docker Containers [BOF7537]
Bruno Borges
Lightweight Java in the Cloud
Lightweight Java in the Cloud
Bruno Borges
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
Bruno Borges
Integrando Oracle BPM com Java EE e WebSockets
Integrando Oracle BPM com Java EE e WebSockets
Bruno Borges
Mais de Bruno Borges
(20)
Secrets of Performance Tuning Java on Kubernetes
Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on Kubernetes
From GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX Apps
From GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX Apps
Making Sense of Serverless Computing
Making Sense of Serverless Computing
Visual Studio Code for Java and Spring Developers
Visual Studio Code for Java and Spring Developers
Taking Spring Apps for a Spin on Microsoft Azure Cloud
Taking Spring Apps for a Spin on Microsoft Azure Cloud
A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...
A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...
Melhore o Desenvolvimento do Time com DevOps na Nuvem
Melhore o Desenvolvimento do Time com DevOps na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Java EE Arquillian Testing with Docker & The Cloud
Java EE Arquillian Testing with Docker & The Cloud
Migrating From Applets to Java Desktop Apps in JavaFX
Migrating From Applets to Java Desktop Apps in JavaFX
Servidores de Aplicação: Por quê ainda precisamos deles?
Servidores de Aplicação: Por quê ainda precisamos deles?
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
Booting Up Spring Apps on Lightweight Cloud Services [CON10258]
Booting Up Spring Apps on Lightweight Cloud Services [CON10258]
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
Running Oracle WebLogic on Docker Containers [BOF7537]
Running Oracle WebLogic on Docker Containers [BOF7537]
Lightweight Java in the Cloud
Lightweight Java in the Cloud
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
Integrando Oracle BPM com Java EE e WebSockets
Integrando Oracle BPM com Java EE e WebSockets
JMS 2.0: Simplificação da API
1.
1
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
2.
As novidades do Java
Message Service 2.0 Bruno Borges Java EE Evangelist, Product Manager 2 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
3.
The following is
intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle. 3 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
4.
JMS
API java para enviar e receber mensagens Diversas implementações no mercado Duas variações distintas – Aplicações Java SE – Aplicações Java EE (web, EJB, client) suporta JTA e MDBs remove funcionalidades consideradas inapropriadas em um ambiente de servidor de aplicação gerenciado 4 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
5.
O que o
JMS é e não é Uma API padronizada – Não é um sistema de mensagens pronto para ser utilizado – Não é um protocolo de comunicação Define somente uma API Java – Não define uma API para clientes de outras linguagens (C++, HTTP, C#, etc) Uma API para aplicações – Não é (ainda) uma API para administrar, gerenciar ou monitorar 5 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
6.
JMS 2.0
JMS 1.1: última atualização em 2002 JMS 2.0 proposto em 2011 pela JSR 343 – EG possui 20 membros: FuseSource, IBM, Oracle, Pramati, Red Hat, TIBCO – Public Review aprovado em 18 de Fevereiro de 2013 20 a favor, 4 abstenções – Participação do SouJava – Será lançado como parte do Java EE 7 6 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
7.
Simplicidade e
facilidade de uso Novas funcionalidades de mensageria Objetivos Melhor integração com o Java EE JMS 2.0 – API c/ maior clareza de acordo com a especificação – Configuração simplificada de recursos – Padronização de configuração de MDBs – Melhor plugabilidade entre servidores de aplicação Pequenas correções Cloud / PaaS postergadas p/ Java EE 8 7 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
8.
JMS 2.0:
Simplificação da API 8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
9.
Qual o problema
da versão 1.1 da API? 9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
10.
JMS 1.1: Enviando
uma mensagem @Resource(lookup = "java:global/jms/demoConnectionFactory") ConnectionFactory connectionFactory; @Resource(lookup = "java:global/jms/demoQueue") Queue demoQueue; public void sendMessage(String payload) { try { Connection connection = connectionFactory.createConnection(); try { Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer(demoQueue); TextMessage textMessage = session.createTextMessage(payload); messageProducer.send(textMessage); 13 linhas } finally { de código connection.close(); pra enviar } } catch (JMSException ex) { 1 msg Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } } 10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
11.
Simplificação da JMS
1.1 API Estratégia Simplificar a API 1.1 existente sem quebrar compatibilidade Definir a nova API de forma mais simplificada exigindo poucos objetos – JMSContext, JMSProducer, JMSConsumer No Java EE, permitir que o JMSContext seja injetado e gerenciado pelo container 16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
12.
Simplificação da JMS
1.1 API API mais simples para criar uma Session Precisa manter compatibilidade e limitar escopo de mudanças Novos métodos javax.jms.Connection para criar Session: – Método atual (será mantido) connection.createSession(transacted,deliveryMode) – Novo método (para usar em ambiente Java SE) connection.createSession(sessionMode) – Novo método (para usar em ambiente Java EE) connection.createSession() 17 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
13.
Simplificação da JMS
1.1 API API mais simples para criar uma Session connection.createSession(transacted,sessionMode) Java EE – com JTA: argumentos são ignorados. Sessão participa da tx – sem JTA: ‘transacted’ é ignorado, sempre local-tx. ‘sessionMode’ é propcessado (AUTO_ACK ou DUPS_OK) Java SE – ‘transacted’ = true: sessão usa local-tx. ‘sessionMode’ é ignorado – ‘transacted’ = false: sessão non-tx. ‘sessionMode’ será lido e interpretado de acordo com a documentação 18 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
14.
Simplificação da JMS
1.1 API API mais simples para criar uma Session connection.createSession(sessionMode) Java EE – com JTA: ‘sessionMode’ é ignorado – sem JTA: sessão non-tx. ‘sessionMode’ = AUTO ou DUPS_OK Java SE – ‘sessionMode’ = SESSION_TRANSACTED: possui local-tx – ‘sessionMode’ = CLIENT, AUTO, DUPS_OK: non-tx, mensagens será ACK pelo modo definido. 19 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
15.
Simplificação da JMS
1.1 API API simplificada para criar uma Session connection.createSession() Java EE – com JTA: participate da TX – sem JTA: sessão non-tx. AUTO_ACK é usado Java SE – Sessão non-tx. AUTO_ACK é usado 20 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
16.
Simplificação da JMS
1.1 API API simplificada para fechar os objetos JMS Definir objetos JMS como java.jang.AutoCloseable – Connection – Session – MessageProducer – MessageConsumer – QueueBrowser Requer Java SE 7 21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
17.
Simplificação da JMS
1.1 API API simplificada para fechar os objetos JMS @Resource(lookup = "jms/connFactory") Fecha recursos ConnectionFactory cf; Make JMS objects implement java.jang.AutoCloseable dentro do bloco @Resource(lookup="jms/inboundQueue") try-with-resources – Connection, Session, MessageProducer, MessageConsumer, Destination dest; QueueBrowser public void sendMessage (String payload) throws JMSException { try ( Connection conn = connectionFactory.createConnection(); Session session = conn.createSession(); MessageProducer producer = session.createProducer(dest); ){ Message mess = sess.createTextMessage(payload); producer.send(mess); close() é chamado } catch(JMSException e){ automaticamente // exception handling no final do bloco } } 22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
18.
Nova API simplificada
para o JMS 2.0 Introdução ao JMSContext e JMSProducer @Resource(lookup = "java:global/jms/demoConnectionFactory") ConnectionFactory connectionFactory; @Resource(lookup = "java:global/jms/demoQueue") 13 linhas Queue demoQueue; reduzido para 5 public void sendMessageNew(String payload) { try (JMSContext context = connectionFactory.createContext();){ context.createProducer().send(demoQueue, payload); } catch (JMSRuntimeException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } } 23 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
19.
JMSContext (1/2)
Novo objeto que encapsula Connection, Session e MessageProducer Criado através de um ConnectionFactory JMSContext context = connectionFactory.createContext(sessionMode); Chamar close() depois de usar, ou colocar em um bloco try-with- resources Pode ser injetado (numa aplicação EJB ou Java EE Web) 25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
20.
JMSContext (2/2)
Pode ser criado a partir de outro JMSContext (para reutilizar conexão – Java SE somente) JMSContext context2 = context1.createContext(sessionMode); Usado para criar objetos JMSProducer Usado para criar JMSConsumer Métodos do JMSContext, JMSProducer e JMSConsumer só disparam unchecked exceptions 26 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
21.
JMSProducer
JMS 1.1 MessageProducer producer = session.createProducer(); producer.send(destination,message); JMS 2.0 JMSProducer producer = context.createProducer(); producer.send(destination,message); 27 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
22.
JMSProducer
Configuração de delivery com Fluent API ou method chaining JMS 1.1 MessageProducer producer = session.createProducer(); producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); producer.setPriority(1); producer.setTimeToLive(1000); producer.send(destination,message); JMS 2.0 context.createProducer().setDeliveryMode(DeliveryMode.NON_PERSISTENT). setPriority(1).setTimeToLive(1000).send(destination,message); 28 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
23.
JMSProducer
Configuração de headers e propriedades de mensagens JMS 1.1 MessageProducer producer = session.createProducer(); TextMessage textMessage = session.createTextMessage("Hello); textMessage.setStringProperty("foo","bar"); producer.send(destination,message); JMS 2.0 context.createProducer().setProperty("foo","bar").send(destination,"Hello"); 29 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
24.
JMSProducer
Envio de mensagens diretas Métodos do JMSProducer para enviar a Message – send(Destination dest, Message message) Não precisa criar um Message – send(Destination dest, Map<String,Object> payload) – send(Destination dest, Serializable payload) – send(Destination dest, String payload) – send(Destination dest, byte[] payload) 30 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
25.
JMSConsumer
Mensagens são consumidas criando um objeto JMSConsumer – Encapsula um MessageConsumer – Funcionalidade e API similar do MessageConsumer Synchronous JMSConsumer consumer = context.createConsumer(destination); Message message = consumer.receive(1000); Asynchronous JMSConsumer consumer = context.createConsumer(destination); consumer.setMessageListener(messageListener); Connection is automatically started (configurable) 31 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
26.
JMSConsumer
Recebendo conteúdo de mensagens diretamente Métodos do JMSConsumer que retornam a Message – Message receive(); – Message receive(long timeout); – Message receiveNoWait(); Métodos do JMSConsumer que retornam o conteúdo da mensagem diretamente – <T> T receivePayload(Class<T> c); – <T> T receivePayload(Class<T> c, long timeout); – <T> T receivePayloadNoWait(Class<T> c); 32 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
27.
JMSConsumer
Recebendo conteúdo de mensagens diretamente public String receiveMessage() throws NamingException { InitialContext initialContext = getInitialContext(); ConnectionFactory connectionFactory = (ConnectionFactory) initialContext.lookup("jms/connectionFactory"); Queue inboundQueue = (Queue)initialContext.lookup("jms/inboundQueue"); try (JMSContext context = connectionFactory.createContext();) { JMSConsumer consumer = context.createConsumer(inboundQueue); return consumer.receivePayload(String.class); } } 33 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
28.
Injeção de objetos
JMSContext Em um container EJB ou Java EE Web @Inject @JMSConnectionFactory("jms/connectionFactory") private JMSContext context; @Resource(mappedName = "jms/inboundQueue") private Queue inboundQueue; public void sendMessage (String payload) { context.createProducer().send(inboundQueue, payload); } 34 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
29.
Injeção de objetos
JMSContext Em um container EJB ou Java EE Web Use @Inject para injetar o @Inject JMSContext, @JMSConnectionFactory("jms/connectionFactory") especificando private JMSContext context; connection factory @Resource(mappedName = "jms/inboundQueue") private Queue inboundQueue; public void sendMessage (String payload) { context.createProducer().send(inboundQueue, payload); } Container se responsabiliza em fechar o objeto 35 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
30.
Injeção de objetos
JMSContext Em um container EJB ou Java EE Web Connection factory padrão do container @Inject private JMSContext context; Com definição de Session Mode @Inject @JMSConnectionFactory("jms/connectionFactory") @JMSSessionMode(JMSContext.AUTO_ACKNOWLEDGE) private JMSContext context; Com definição de user e password @Inject @JMSConnectionFactory("jms/connectionFactory") @JMSPasswordCredential(userName="admin",password="mypassword") private JMSContext context; 36 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
31.
Injeção de objetos
JMSContext Em um container EJB ou Java EE Web Objetos JMSContext injetados possuem escopo – Com JTA transaction, escopo é a transação – Sem JTA transaction, escopo é o request JMSContext é automaticamente fechado quando o escopo termina Injete dois objetos JMSContext com mesmo escopo e terá o mesmo objeto – se valores de @JMSConnectionFactory, @JMSPasswordCredential e @JMSSessionMode são idênticos – Torna mais fácil usar a mesma sessão dentro de uma transação 37 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
32.
JMS 2.0:
Novas features da API 38 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
33.
Mais fácil criar
Durable Subscribers Durable subscriptions são identificados por {clientId, subscriptionName} ClientId não é mais obrigatório quando usar durable subscriptions Para MDBs, o container vai gerar um nome padrão (EJB 3.2) 39 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
34.
Delivery delay
Permite um cliente JMS agendar entrega futura de mensagem Novo método no MessageProducer public void setDeliveryDelay(long deliveryDelay) Novo método no JMSProducer public JMSProducer setDeliveryDelay(long deliveryDelay) Configure tempo minimo em ms para quem uma mensagem deve ser retida no sistema até ser enviada 40 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
35.
Envio Assíncrono
Envia uma mensagem e retorna imediatamente sem bloquear até o ACK de que foi recebida pelo servidor Uso de callback quando tiver o ACK do servidor Novo método do MessageProducer messageProducer.send(message,completionListener) Disponível também no JMSProducer 41 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
36.
Envio Assíncrono
Aplicação define um CompletionListener public interface CompletionListener { void onCompletion(Message message); void onException(Message message, Exception exception); } 42 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
37.
Melhor tratamento de
mensagens ruins Torna a propriedade JMSMXDeliveryCount obrigatória JMS 1.1 define uma propriedade de mensagem opcional JMSXDeliveryCount. – Quando usado, é setado pelo provedor JMS quando a mensagem é recebida, e indica o número de vezes que esta mensagem foi entrege (incluindo a primeira vez). JMS 2.0 torna esta propriedade obrigatória pelas implementações 43 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
38.
Múltiplos consumidores numa
subscrição de tópico Permite consumo escalável de mensagems a partir de um Topic Subscription – Múltiplas threads, multiplas JVMs Novos métodos para non-durable subscriptions MessageConsumer messageConsumer= session.createSharedConsumer(topic,sharedSubscriptionName); Métodos existentes para durable subscriptions MessageConsumer messageConsumer= session.createDurableConsumer(topic,durableSubscriptionName); Disponível também no JMSContext 44 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
39.
Definição de recursos
JMS simplificada no Java EE Em conjunto com JSR 342 (Java EE 7 platform) 45 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
40.
Definição de recursos
JMS simplificada no Java EE O problema Java EE e JMS recomenda que aplicações devem obter o ConnectionFactory e a Destination via JNDI @Resource(lookupName = "jms/inboundQueue") private Queue inboundQueue; Mantém o código portável Criar estes recursos é um incômodo para os desenvolvedores 46 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
41.
Connection Factory default
na plataforma Simplifica o uso de JMS na maioria dos casos Se você quiser somente usar o serviço JMS do servidor de aplicação @Resource(lookup="java:comp/defaultJMSConnectionFactory") ConnectionFactory myJMScf; 47 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
42.
Definição de recursos
JMS simplificada no Java EE Funções novas e opcionais no Java EE 7 Aplicação pode especificar os JMS connection factories e JMS destinations que precisa via anotações Deployer pode então definir requerimentos com os deployment descriptors Servidor de aplicação pode usar esta informação para criar automaticamente os recursos quando a aplicação for instalada Equivalente às anotações referentes a @DataSourceDefinition É opcional suportar estes recursos 48 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
43.
Definição de recursos
JMS simplificada no Java EE Uso de anotações para definir recursos @JMSConnectionFactoryDefinition( name="java:global/jms/demoConnectionFactory", className= "javax.jms.ConnectionFactory", description="ConnectionFactory to use in demonstration") @JMSDestinationDefinition( name = "java:global/jms/demoQueue", description = "Queue to use in demonstration", className = "javax.jms.Queue", destinationName="demoQueue") 49 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
44.
Definição de recursos
JMS simplificada no Java EE Deployer configura informações específicas posteriormente <jms-destination> <name>"java:global/jms/demoQueue</name> <class-name>javax.jms.Queue</class-name> <resource-adapter-name>jmsra</resource-adapter-name> <destination-name>demoQueue</destination-name> </jms-destination> <jms-connection-factory> <name>java:global/jms/demoConnectionFactory</name> Pode definir <property> propriedades <name>addressList</name> específicas <value>mq://localhost:7676</value> do provedor JMS </property> <max-pool-size>30</max-pool-size> <min-pool-size>20</min-pool-size> <max-idle-time>5</max-idle-time> </jms-connection-factory> 50 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
45.
Configuração padronizada
de MDBs Em conjunto com JSR 345 (EJB 3.2) 51 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
46.
Configuração padronizada de
MDBs Configuração de MDBs não é padronizada EJB 3.1 não define como especificar – Nome JNDI da queue or topic (usando annotation) – Nome JNDI da connection factory – clientID – durableSubscriptionName EJB 3.1 não define como que mensagens de tópicos devem ser entregues para MDBs clusterizados 52 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
47.
Configuração padronizada de
MDBs Novas propriedades de ativação para Queue ou Topic @MessageDriven(activationConfig = { @ActivationConfigProperty( propertyName = "destinationLookup", propertyValue = "jms/myTopic"), . . . }) Também pode ser definido no ejb-jar.xml 53 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
48.
Configuração padronizada de
MDBs Novas propriedades de ativação para Queue ou Topic @MessageDriven(activationConfig = { @ActivationConfigProperty( propertyName = "connectionFactoryLookup", propertyValue = "jms/myCF"), . . . }) Também pode ser definido no ejb-jar.xml 54 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
49.
Configuração padronizada de
MDBs Novas propriedades de ativação para Queue ou Topic @MessageDriven(activationConfig = { @ActivationConfigProperty( propertyName = "subscriptionDurability", propertyValue = "Durable"), @ActivationConfigProperty( propertyName = "clientId", propertyValue = "myClientID"), @ActivationConfigProperty( propertyName = "subscriptionName", propertyValue = "MySub"), . . . }) Estas propriedades nunca tinham sido padronizadas 55 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
50.
Topic delivery para
MDBs em cluster Uma mensagem por instância ou uma por cluster? Topic ? MDB MDB MDB MDB MDB MDB MDB MDB MDB Application server instance Application server instance Application server instance Application server cluster 57 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
51.
Topic delivery para
MDBs em cluster Se subscriptionName e clientId não estão definidos – cada mensagem será entregue uma vez, por cluster – instâncias do cluster compartilharão o mesmo nome de subscrição Para desligar configure sharedSubscriptions para false – cada mensagem será entregue uma por instância de MDB – cada instância do servidor de aplicação terá uma subscription separada Aplica-se a durable e non-durable subscriptions 58 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
52.
Melhor plugabilidade com
Java EE 59 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
53.
Melhor plugabilidade com
Java EE Objetivo – Facilitar o uso de um provedor JMS em outros servidores de aplicação – e.g. aplicação GlassFish enviando mensagens para o WebLogic JMS Solução – Obrigar provedores JMS a oferecer um adaptador JCA 60 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
54.
Melhor plugabilidade com
Java EE usando a especificação Java Connector Architecture (JCA) Java Connector Architecture é desenhado para: – Integrar recursos transacionais com o servidor de aplicação – processamento assíncrono de MDBs Suporte ao JCA é obrigatório no Java EE Muitos vendors de JMS vendors já oferecem adaptadores JMS 2.0 obriga o provisionamento de adaptador JCA Deve ser transparente para as aplicações! 61 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
55.
Simplicidade e
facilidade de uso Novas features Novidades – multi-threaded Topic Subscribers do JMS 2.0 – delivery delay – envio async Melhor integração com Java EE – configuração de recursos simplificada – Padronização na configuração de MDBs – melhor plugabilidade entre servidores de aplicação Muitas outras melhorias e correções 62 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
56.
Experimente o Java
EE 7 JMS 2.0, EJB 3.2 and Java EE GlassFish 4.0 – http://glassfish.java.net/ – http://dlc.sun.com.edgesuite.net/glassfish/4.0/promoted/ Open Message Queue 5.0 – http://mq.java.net/ – http://mq.java.net/5.0.html 64 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
57.
Perguntas? 65
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
58.
Graphic Section Divider 66
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
59.
67
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Baixar agora