Apresentação sobre tecnologias para integração de sistemas em Java e JMS assíncrono.
Além de descrição, benefícios, desvantagens e cenário aplicável para cada tecnologia, no final há links para o código-fonte da implementação de JMS assíncrono.
2. O QUE VEREMOS POR AQUI
O que é, benefícios e desvantagens para:
- Java Message Service (JMS)
- Java EE Connector Architecture (JCA)
- Java API for XML-based Web Services (JAX-WS)
- Java API for RESTful Web Services (JAX-RS)
- Remote Method Invocation (Java/RMI)
3. JAVA MESSAGE SERVICE (JMS)
Benefícios:
- Fácil integração de sistemas incompatíveis
- Mensagens síncronas:
Suporta reconhecimento de mensagens (entrega garantida)
Suporte para transações (via JTA)
- Mensagens assíncronas:
Como o volume de transações aumenta, asynchronous messaging is better
Mensagem assíncrona é menos afetada por falhas em hardware, software e network
Quando a capacidade de processamento é excedida, informações não são perdidas
4. JAVA MESSAGE SERVICE (JMS)
Desvantagens:
- Não recomendado para integração não-Java (ex: software legado)
- Requer suporte a integração message-based
5. JAVA EE CONNECTOR ARCHITECTURE (JCA)
Benefícios:
- Expoem os resources de uma forma genérica/alto-nível (via API)
6. JAVA EE CONNECTOR ARCHITECTURE (JCA)
Desvantagens:
- Requer uma implementação de um resource vendor’s connector
- Aumenta o acoplamento entre a aplicação e o sistema legado
7. JAVA API FOR XML-BASED WEB SERVICES
(JAX-WS)
Benefícios:
- Endereça os requisitos de enterprise QoS para segurança
WS-Security
Reliability
- Suporte para as camadas de transporte HTTP/HTTPS e SMTP
8. JAVA API FOR XML-BASED WEB SERVICES
(JAX-WS)
Desvantagens:
- Somente XML (alguns workarounds disponíveis, mas nada oficial)
- Overhead do envelope SOAP/wrapper (caro para transportar)
- Sem suporte direto em Java EE para comunicação assíncrona
9. JAVA API FOR RESTFUL WEB SERVICES
(JAX-RS)
Benefícios:
- Não é necessário configurações quando usado container Java EE 6+
- Usa anotações (no lugar dos tradicionais XMLs)
- Métodos HTTP (POST, GET, PUT, DELETE) podem simplesmente
representar um CRUD na aplicação
- Suporta JSON para mensagens
10. JAVA API FOR RESTFUL WEB SERVICES
(JAX-RS)
Desvantagens:
- Suporte somente para transporte via HTTP/HTTPS
- Não suporta WS-Security automaticamente
- Sem suporte direto em Java EE para comunicação assíncrona
11. REMOTE METHOD INVOCATION
(JAVA/RMI)
Benefícios:
- Orientado a objetos. RMI pode passar objetos completos como
argumentos e retornar valores
- Objetos são passados por valor. O cliente ou servidor pode
reconstituir os objetos facilmente
- O tipo de dado pode ser qualquer objeto Java (Serializable)
13. O QUE VEREMOS AGORA?
Antes de partimos para um hands-on com JMS e processamento
assíncrono, veremos mais alguns detalhes sobre JMS
14. [JMS] MESSAGES
- Uma mensagem é uma unnidade de dados que é enviada por um
processo para a mesma ou diferente máquina
- Uma mensagem pode ser um texto básico (String) ou uma estrutura
mais complexa (HashMap, por exemplo)
- A restrição é que as mensagens devem ser Serializable
15. [JMS] MESSAGE-ORIENTED MIDDLEWARE
- Message-Oriented Middleware (MOM) é uma lista de serviços
server-based usados para suportar envio e recebimento de msgs
- É a infraestrutura do MOM que provê mecanismos para a aplicação
criar, enviar e receber mensagens
- ActiveMQ é um MOM
16. [JMS] COMMUNICATION MODES
Synchronous:
- O requisitor tem o processo bloqueado até que a resposta (ou
timeout) é recebida
- Como o volume de tráfico aumenta, mais bandwidth é requerida, e
a necessidade de mais hardware se torna crítica
- Quando a capacidade de processamento é excedida, a oportunidade
de processar uma informação é tipicamente perdida
17. [JMS] COMMUNICATION MODES
Asynchronous:
- As partes estão no mesmo nível e podem enviar e receber
mensagens a vontade
- Comunicação assíncrona não requer reconhecimento de mensagens
em tempo real; o requisitor pode continuar com outro processamento
uma vez que ele já enviou a mensagem
18. [JMS] MESSAGE-DRIVEN BEAN
- Um message-driven bean (MDB) é um componente stateless que é
invocado pelo container EJB (ou um agente do Spring) quando uma
mensagem JMS entra em um destino (queue ou topic) em que o bean
foi registrado
- Um MDB é um message consumer (consumidor)
- Um MDB deve implementar a interface javax.jms.MessageListener
- O processamento assíncrono é feito através de MDBs
- O método onMessage( ) de um bean é invocado quando o mesmo é
invocado pelo container (ou Spring) para processar a mensagem
19.
20.
21. #PARTIU #HANDS-ON #JMS #ASYNC
Todos os códigos estão disponíveis no GitHub:
- JMS Assíncrono usando recursos de um Java EE server:
https://github.com/atilla8huno/jms-async-javaee
- JMS Assíncrono usando Spring em um container server:
https://github.com/atilla8huno/jms-async-spring
- JMS Assíncrono usando Spring em um ambiente desktop (Java SE):
https://github.com/atilla8huno/jms-async-spring-javase
Notas do Editor
JMS provê uma Interface Java padronizada para produtos message-oriented middleware (MOM)
JCA provê um mecanismo de acesso padronizado para enterprise information system (EIS) da plataforma Java EE
JCA é uma arquitetura genérica para conectar sistemas legados (wraps legados que provê valor para um negócio expondo suas funcionalidades via API)
JAX-WS é a tecnologia usada para construir Web Services e clientes que se comunicam usando XML
Para isto, a invocação de uma operação Web Service é representada por um protocolo XML-based (ex: SOAP)
QoS são requisitos não-funcionais (performance, escalabilidade, confiança, etc
Metro – Implementação de JAX-WS do glassfish que invlui várias extensibilidades e easy-to-use features
JAX-RS provê suporte a Web Services que atende o padrão arquitetural Representational State Transfer (REST)
JAX-RS faz o uso extensido de anotações para simplificar o desenvolvimento de WS clientes e endpoints
Java/JMI é uma tecnologia Java em que os métodos de objetos remotos podem ser invocados de outras JVMs (via protocolo JRMP) e usa serialização.
Um exemplo de processamento sincrono é autorização de cartão de crédito/débito (reader and card)
Um exemplo de processamento assíncrono é a comunicação via e-mail (vc recebe e-mails de várias pessoas mesmo estando offline)
Um MDB não é instanciado diretamente.
A interação com esses beans são feitas enviando mensagens para a fila ou tópico que o bean foi registrado.
O processamento de um bean pode participar de transações no servidor