INTEGRAÇÃO DE
SISTEMAS
Uma visão geral sobre as
tecnologias disponíveis em
Java para várias formas de
integração de sistemas
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)
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
JAVA MESSAGE SERVICE (JMS)
Desvantagens:
- Não recomendado para integração não-Java (ex: software legado)
- Requer suporte a integração message-based
JAVA EE CONNECTOR ARCHITECTURE (JCA)
Benefícios:
- Expoem os resources de uma forma genérica/alto-nível (via API)
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
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
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
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
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
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)
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.*
O QUE VEREMOS AGORA?
Antes de partimos para um hands-on com JMS e processamento
assíncrono, veremos mais alguns detalhes sobre JMS
[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
[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
[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
[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
[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
#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

Integração de Sistemas e JMS Assíncrono

  • 1.
    INTEGRAÇÃO DE SISTEMAS Uma visãogeral sobre as tecnologias disponíveis em Java para várias formas de integração de sistemas
  • 2.
    O QUE VEREMOSPOR 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 CONNECTORARCHITECTURE (JCA) Benefícios: - Expoem os resources de uma forma genérica/alto-nível (via API)
  • 6.
    JAVA EE CONNECTORARCHITECTURE (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 FORXML-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 FORXML-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 FORRESTFUL 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 FORRESTFUL 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)
  • 12.
    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.*
  • 13.
    O QUE VEREMOSAGORA? Antes de partimos para um hands-on com JMS e processamento assíncrono, veremos mais alguns detalhes sobre JMS
  • 14.
    [JMS] MESSAGES - Umamensagem é 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
  • 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

  • #4 JMS provê uma Interface Java padronizada para produtos message-oriented middleware (MOM)
  • #6 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)
  • #8 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
  • #9 Metro – Implementação de JAX-WS do glassfish que invlui várias extensibilidades e easy-to-use features
  • #10 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
  • #12 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.
  • #17 Um exemplo de processamento sincrono é autorização de cartão de crédito/débito (reader and card)
  • #18 Um exemplo de processamento assíncrono é a comunicação via e-mail (vc recebe e-mails de várias pessoas mesmo estando offline)
  • #19 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
  • #21 Exemplo de JMS assíncrono