21
INTEGRAÇÃO DE SISTEMAS Uma visão geral sobre as tecnologias disponíveis em Java para várias formas de integração de sistemas

Integração de Sistemas e JMS Assíncrono

Embed Size (px)

Citation preview

Page 1: Integração de Sistemas e JMS Assíncrono

INTEGRAÇÃO DE SISTEMAS

Uma visão geral sobre astecnologias disponíveis emJava para várias formas deintegração de sistemas

Page 2: Integração de Sistemas e JMS Assíncrono

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)

Page 3: Integração de Sistemas e JMS Assíncrono

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

Page 4: Integração de Sistemas e JMS Assíncrono

JAVA MESSAGE SERVICE (JMS)

Desvantagens:

- Não recomendado para integração não-Java (ex: software legado)

- Requer suporte a integração message-based

Page 5: Integração de Sistemas e JMS Assíncrono

JAVA EE CONNECTOR ARCHITECTURE (JCA)

Benefícios:

- Expoem os resources de uma forma genérica/alto-nível (via API)

Page 6: Integração de Sistemas e JMS Assíncrono

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

Page 7: Integração de Sistemas e JMS Assíncrono

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

Page 8: Integração de Sistemas e JMS Assíncrono

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

Page 9: Integração de Sistemas e JMS Assíncrono

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 simplesmenterepresentar um CRUD na aplicação

- Suporta JSON para mensagens

Page 10: Integração de Sistemas e JMS Assíncrono

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

Page 11: Integração de Sistemas e JMS Assíncrono

REMOTE METHOD INVOCATION (JAVA/RMI)

Benefícios:

- Orientado a objetos. RMI pode passar objetos completos comoargumentos e retornar valores

- Objetos são passados por valor. O cliente ou servidor podereconstituir os objetos facilmente

- O tipo de dado pode ser qualquer objeto Java (Serializable)

Page 12: Integração de Sistemas e JMS Assíncrono

REMOTE METHOD INVOCATION (JAVA/RMI)

Desvantagens:

- Deve-se usar Java em objetos locais e remotos

- Argumentos devem implementar Serializable ou herdar Remote java.io.* e java.rmi.*

Page 13: Integração de Sistemas e JMS Assíncrono

O QUE VEREMOS AGORA?

Antes de partimos para um hands-on com JMS e processamentoassíncrono, veremos mais alguns detalhes sobre JMS

Page 14: Integração de Sistemas e JMS Assíncrono

[JMS] MESSAGES

- Uma mensagem é uma unnidade de dados que é enviada por umprocesso para a mesma ou diferente máquina

- Uma mensagem pode ser um texto básico (String) ou uma estruturamais complexa (HashMap, por exemplo)

- A restrição é que as mensagens devem ser Serializable

Page 15: Integração de Sistemas e JMS Assíncrono

[JMS] MESSAGE-ORIENTED MIDDLEWARE

- Message-Oriented Middleware (MOM) é uma lista de serviçosserver-based usados para suportar envio e recebimento de msgs

- É a infraestrutura do MOM que provê mecanismos para a aplicaçãocriar, enviar e receber mensagens

- ActiveMQ é um MOM

Page 16: Integração de Sistemas e JMS Assíncrono

[JMS] COMMUNICATION MODES

Synchronous:

- O requisitor tem o processo bloqueado até que a resposta (outimeout) é recebida

- Como o volume de tráfico aumenta, mais bandwidth é requerida, ea necessidade de mais hardware se torna crítica

- Quando a capacidade de processamento é excedida, a oportunidadede processar uma informação é tipicamente perdida

Page 17: Integração de Sistemas e JMS Assíncrono

[JMS] COMMUNICATION MODES

Asynchronous:

- As partes estão no mesmo nível e podem enviar e recebermensagens a vontade

- Comunicação assíncrona não requer reconhecimento de mensagensem tempo real; o requisitor pode continuar com outro processamentouma vez que ele já enviou a mensagem

Page 18: Integração de Sistemas e JMS Assíncrono

[JMS] MESSAGE-DRIVEN BEAN

- Um message-driven bean (MDB) é um componente stateless que éinvocado pelo container EJB (ou um agente do Spring) quando umamensagem JMS entra em um destino (queue ou topic) em que o beanfoi 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

Page 19: Integração de Sistemas e JMS Assíncrono
Page 20: Integração de Sistemas e JMS Assíncrono
Page 21: Integração de Sistemas e JMS Assíncrono

#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