UFG - Instituto de Informática Especialização em Desenvolvimento de Aplicações Web com Interfaces Ricas EJB 3.0 Prof.: Fabrízzio A A M N Soares [email protected] Aula 11 – Serviços de Envio de Mensagens Message Oriented Middleware Middleware orientado a mensagem (MOM) é um software ou hardware de infra-estrutura focada em enviar e receber mensagens entre sistemas distribuídos. Message Oriented Middleware MOM permite que os módulos do aplicativo para ser distribuído através de plataformas heterogêneas Reduz a complexidade do desenvolvimento de aplicações que abrangem vários sistemas operacionais e protocolos de rede, isolando o desenvolvedor do aplicativo a partir de detalhes do sistema operacional e interfaces de rede. Message Oriented Middleware MOM é um software que reside em ambas as porções da arquitetura cliente/servidor e normalmente suporta chamadas assíncronas entre as aplicações cliente e servidor. MOM reduz a participação dos desenvolvedores de aplicativos com a complexidade da natureza mestre/escravo do cliente/servidor mecanismo. Origem O caso de um grande banco fornece um bom exemplo de como middleware surgiu como uma exigência do negócio: Um banco tinha guardado todos os detalhes do seu cliente em seu mainframe de grande porte desde 1960. Este mainframe permaneceu em uso pesado e sofreu diversos melhoramentos. Origem Apesar de inovador em sua época, a utilidade do mainframe para o pessoal do banco diminuiu O banco apresentou novas aplicações separadas com base em computadores pessoais (PCs), permitindo que o pessoal do banco oferecer aos clientes novos serviços que o mainframe não poderia suportar. Origem Uma situação ideal seria permitir que o aplicativo baseado em PC com link para o aplicativo de mainframe mais velhos e permitir que o mainframe e os PCs para compartilhar uns dos outros dados. Origem Acessando dados do mainframe oferece duas vantagens: 1.Novas Aplicações de front-end PC podem substituir os antigos terminais de mainframe pouco amigável ao usuário. 2.Sistemas baseados em PC podem utilizar os dados do mainframe em novas formas - antes impraticáveis devido às limitações do software do mainframe Origem Até o final de 1980 integradores de sistema tinha nenhuma maneira fácil de ligar estas aplicações diferentes juntos. Origem Desenvolvedores enfrentou vários desafios: 1. Os desenvolvedores teriam que construir “adaptadores” de um software separado em ambos os sistemas de tradução de dados de aplicativos de código em um formato que o sistema de destino pode entender (e vice-versa). Origem 2. A velocidade de processamento de cada sistema obrigaria o outro sistema. Por exemplo, se o mainframe correu lentamente, o aplicativo baseado em PC teria que esperar até que o mainframe apanhados, atrasando a aplicação de PC. Por outro transferida de custo mainframe preso. lado, a transformação que tinha sido para servidores distribuídos por razões seria executado de forma lenta e teria de esperar até que o servidor Origem 3. Programadores de comunicação seria necessário instalar um sistema de gateway de rede para formar uma ponte entre a rede do mainframe e da rede de PC, se os diferentes sistemas utilizados diferentes protocolos de rede. O gateway iria traduzir os pacotes de rede do sistema de origem e de transmiti-las ao sistema de destino usando o protocolo do sistema de destino. Origem Tais questões feita a integração entre aplicações difíceis. Grande parte dessa integração também necessária reengenharia cada vez duas aplicações em plataformas diferentes necessário que reúna, já que cada situação diferente, em certa medida. Ao dedicar esforço para que reúna os aplicativos em diferentes sistemas, departamentos de TI e passou a gastar uma quantia significativamente maior do que o gasto no desenvolvimento inicial, por sub-sistema. Java Message System Java Message Service, ou JMS, é uma API da linguagem Java para middleware orientado à mensagens. Através da API JMS duas ou mais aplicações podem se comunicar por mensagens. A JMS API é uma Middleware (MOM) Message Oriented Arquitetura A API JMS suporta dois modelos de troca de mensagens: Ponto a ponto ou modelo de filas Modelo publish/subscribe Modelo Ponto a Ponto No modelo ponto a ponto, ou por filas, um “produtor” (producer) envia mensagens para uma fila e um “consumidor” (consumer) as lê. Neste caso, o produtor conhece o destino da mensagem e a envia diretamente para a fila do consumidor. Modelo Ponto a Ponto Este modelo é caracterizado pelo seguinte: Apenas um consumidor irá ler a mensagem; Não é necessário que o produtor esteja em execução no momento em que o consumidor lê a mensagem, assim como não é necessário que o consumidor esteja em execução no momento que o produtor envia a mensagem; Quando lê uma mensagem com sucesso o consumidor envia um aviso (acknowledged) para o produtor. Modelo Ponto a Ponto Modelo Publish/Subscribe Este modelo suporta a publicação de mensagens para um determinado tópico de mensagens (message topic). O(s) “assinante(s)” (subscriber) podem registrar interesse em receber (“em assinar”) mensagens de um tópico. Neste modelo, nem o “publicador” (publisher) ou o “assinante” sabem um do outro. Modelo Publish/Subscribe As características deste modelo são: Múltiplos consumidores podem ler a mensagem; Existe uma dependência temporal entre publicadores e assinantes de um tópico; os Um publicador deve criar uma “assinatura” (subscription) para que os assinantes possam receber mensagens; O assinante do tópico deve estar em execução continuamente para receber as mensagens. Modelo Publish/Subscribe Elementos da API JMS Cliente JMS Uma aplicação ou objeto Java que produz e consome mensagens. As mensagens são objetos que contém os dados que são transferidos entre os clientes JMS. Elementos da API JMS Conexão JMS A partir do momento que uma factory é obtida, conexões para o provedor JMS podem ser criadas. Uma conexão representa a ligação entre a aplicação cliente e a aplicação servidora. Dependendo do tipo da conexão, ela permitirá que os clientes criem sessões para o envio e recebimento de mensagens de filas ou tópicos. Elementos da API JMS Fábrica de conexões JMS É um objeto administrado que a aplicação cliente utiliza para a criação de conexões para o provedor JMS. Normalmente, os clientes obtém as factories através de interfaces portáveis, desta forma, mesmo se as configurações do provedor JMS mudarem, o código do cliente permanece inalterado. Os administradores mantém as configurações em objetos (objetos da classe factory), que são obtidos através de buscas (lookup) na JNDI. Dependendo do tipo da mensagem, o cliente obterá uma factory para tópico ou para fila. Elementos da API JMS Destino É um objeto administrado que encapsula a identidade do destino das mensagens, que é onde as mensagens são enviadas e consumidas. Pode ser uma fila ou um tópico. O administrador JMS cria estes objetos, e os usuários os obtém através de buscas na JNDI. Da mesma forma que as factories de conexões, o administrador pode criar dois tipos de classe de destino, fila e tópico. Elementos da API JMS Consumidor Um objeto criado através de uma sessão JMS. Ele recebe mensagens de um destino. O consumidor pode receber mensagens de maneira síncrona ou assíncrona de filas ou tópicos. Elementos da API JMS Produtor Um objeto criado através de uma sessão JMS. Ele envia mensagens para um destino. Elementos da API JMS Mensagens São objetos enviados entre consumidores e produtores de mensagens. Eles contêm um outro objeto que encapsula os dados que serão trafegados pelas mensagens. Uma mensagem possui três partes principais: 1.um cabeçalho, contém a rota das mensagens 2.um conjunto de atributos opcionais 3.o corpo da mensagem que pode conter cinco tipos de mensagens: texto, map, bytes, stream ou objetos A interface de uma mensagem é extremamente flexível e permite várias formas de customização de conteúdo. Elementos da API JMS Provedor JMS Representa uma interface para um software de middleware orientado à mensagens. Ele suporta a interface JMS que é especificada pela Sun Microsystems/Oracle. Ele é basicamente um adaptador de um middleware. Softwares que suportam JMS Livres ActiveMQ JbossMQ Joram MantaRay OpenJMS RabbitMQ Glassfissh Softwares que suportam JMS Comerciais BEA WebLogic Server da BEA Systems Tibco EMS da TIBCO Software FioranoMQ GigaSpaces da GigaSpaces Technologies iBus da Softwired IONA JMS da IONA Technologies SeeBeyond ICAN Suite da Sun Microsystems IQManager da Sun Microsystems JMS+ da webMethods SonicMQ da Sonic Software WebSphere MQ da IBM webMethods Broker JMS da webMethods Tecnologias de Mensagens que não suportam JMS Advanced Message Queuing Protocol (AMQP) Amazon Simple Queue Service Protocolo de filas de mensagens padronizadas com implementações independentes múltiplas. Serviços de mensagens comodotizados providos pela Amacon.com com uma taxa por uso. Permite ao usuário alugar acesso para messaging sem ter e manter seu próprio servidor. Microsoft Message Queuing Tecnologia similar, implementada para .NET Framework.