Visão Geral dos Serviços de Mediação

Os aplicativos de serviços de mediação interceptam e modificam mensagens transmitidas entre serviços existentes (provedores) e clientes (solicitantes) que desejam utilizar estes serviços. Os serviços de mediação são implementados utilizando módulos de mediação que contêm fluxos de mediação.

Os módulos de mediação podem ser implementados no Barramento do WebSphere Enterprise Service ou no WebSphere Process Server.

Na SOA (Arquitetura Orientada a Serviços), os serviços representam funções de negócios que podem ser reutilizadas e combinadas em uma forma ad hoc para criar sistemas de negócios responsivos. Estes serviços possuem conexões livremente acopladas em vez de serem conectados diretamente uns aos outros.

A introdução de fluxos de mediação entre serviços permite a você processar as mensagens que estão sendo transmitidas entre esses serviços. Uma mensagem é uma comunicação enviada de um aplicativo ou serviço para outro aplicativo ou serviço. Os fluxos de mediação fornecem a lógica que processa as mensagens. Por exemplo, os fluxos de mediação podem ser utilizados para localizar serviços com características específicas que um solicitante está procurando e para resolver diferenças de interfaces entre solicitantes e provedores. Para interações complexas, as primitivas de mediação podem ser vinculadas separadamente. As mediações típicas incluem:
Os conceitos e termos descritos neste tópico ajudarão a entender como construir um aplicativo do serviço de mediação com o WebSphere Integration Developer:

Exemplo Cotação de Ações: Construindo um Serviço de Mediação

Para ilustrar os conceitos abordados neste tópico, utilizaremos um exemplo de um simples serviço de mediação que fornece cotações de ações. Um aplicativo cliente fornece uma consulta contendo um símbolo de ações e um ID do cliente para o serviço de mediação, o qual processa a consulta. O nível de assinatura do cliente é determinado e, dependendo desse nível, a consulta é roteada para o fornecedor de serviços apropriado. A cotação que é retornada do fornecedor de serviços é convertida na moeda de preferência do cliente antes de ela ser retornada ao aplicativo cliente.

Estamos utilizando um serviço de mediação porque desejamos utilizar diferentes interfaces a partir de dois fornecedores de serviços externos e expor uma interface única ao aplicativo cliente. Também precisamos construir o serviço rapidamente, com a capacidade de alteração on demand e sem modelar um processo de negócios.

A figura a seguir mostra o serviço de mediação completo:
Figura que Mostra o Aplicativo Requerido

Módulos de Mediação

Os aplicativos de serviço de mediação são montados e implementados como um ou mais módulos de mediação. Um módulo de mediação pode ter as seguintes partes:
  • Um componente do fluxo de mediação
  • Importações que identificam fornecedores de serviços e suas interfaces
  • Exportações que expõem o módulo de mediação para solicitantes de serviços
  • Componentes Java que implementam primitivas de mediação customizadas chamadas pelo componente do fluxo de mediação

Exemplo Cotação de Ações

No exemplo cotação de ações, essas são as partes no módulo de mediação, conforme visto no editor Montagem.


Figura do módulo de mediação do exemplo Cotação de Ações
  • StockQuoteService é a exportação que permite que os clientes solicitantes chamem este módulo de mediação como um serviço.
  • StockQuote_MediationFlowComponent é o componente do fluxo de mediação que aceita um ID do cliente e um símbolo como entrada, processa a mensagem e retorna a cotação na moeda preferida pelo cliente.
  • DelayedService é a importação que fornece acesso ao serviço padrão externo.
  • RealtimeService é a importação que fornece acesso ao serviço premium externo.

Interfaces e Referências

Os Serviços fornecem acesso às suas funções de negócios por meio de interfaces, para que o serviço possa ser utilizado ou chamado. Os módulos de mediação e módulos de integração de negócios possuem interfaces em suas exportações para que o módulo possa ser chamado. A interface define as operações que podem ser chamadas e os dados que são transmitidos, dados tais como argumentos de entrada, valores retornados e exceções. Nos componentes do fluxo de mediação, estes dados são transmitidos em forma de mensagens.

Em um componente de mediação, a interface que permite que o solicitante de serviços acesse a mediação por meio de uma exportação chamada de interface de origem.

Um componente do fluxo de mediação acessa um fornecedor de serviços (ou importação) por meio de uma referência que especifica a interface utilizada pela importação para chamar o serviço. Em um componente do fluxo de mediação, esta referência é chamada de referência de destino.

Exemplo Cotação de Ações

Estas são as interfaces e referências utilizadas no exemplo Cotação de Ações:


Figura de interfaces e referências na amostra Cotação de Ações

  1. StockQuoteService é a interface de exportação que permite que o solicitante chame o módulo de mediação. No fluxo de mediação, StockQuoteService é a interface de origem. Fornece a operação getQuote que envia um objeto de negócios, StockQuoteRequest, como entrada e retorna um objeto de negócios, StockQuoteResponse, como saída.
  2. DelayedService é a interface de importação que fornece acesso ao fornecedor de serviços premium.
  3. RealtimeService é a interface de importação que fornece acesso ao fornecedor de serviços padrão.
  4. DelayedServicePartner é a referência que especifica a interface da DelayedService de importação, que fornece acesso à interface do fornecedor de serviços padrão.
  5. RealtimeServicePartner é a referência que especifica a interface da RealtimeService de importação, que fornece acesso à interface do fornecedor de serviços premium.

Componentes do Fluxo de Mediação

Um componente do fluxo de mediação no editor de Montagem possui as seguintes partes:
  • Uma ou mais interfaces que descrevem como chamar este fluxo de mediação. Estas interfaces precisam corresponder às interfaces das exportações que serão ligadas a este fluxo de mediação.
  • Zero ou mais referências denominadas que especificam as interfaces de parceiros que este fluxo deseja chamar. Os parceiros reais não são conhecidos pelo fluxo, apenas por suas interfaces. Estas referências são ligadas aos parceiros reais, que são importações ou componentes Java, com interfaces correspondentes.
  • Fluxos de mediação, que definem a implementação do componente.

Exemplo Cotação de Ações

No exemplo de cotação de ações, StockQuote_MediationFlowComponent é o componente do fluxo de mediação que aceita um ID do cliente e um símbolo como entrada, processa a mensagem e retorna a cotação na moeda preferida pelo cliente. Estas são as partes do componente do fluxo de mediação


Figura do componente do fluxo de mediação do exemplo Cotação de Ações
  1. StockQuoteService é a interface que permite acesso às operações do aplicativo cliente.
  2. DelayedServicePartner é a referência que especifica a interface da DelayedService de importação, que fornece acesso à interface do fornecedor de serviços padrão.
  3. RealtimeServicePartner é a referência que especifica a interface da RealtimeService de importação, que fornece acesso à interface do fornecedor de serviços premium.

Fluxos de mediação

Um fluxo de mediação consiste em uma seqüência de etapas de processamento que são executadas quando uma mensagem de entrada é recebida. Um fluxo de mediação é criado no editor de Fluxos de Mediação, ao incluir um número de primitivas de mediação que definem as etapas de processamento. As conexões representam o fluxo da mensagem entre as primitivas de mediação.

A definição de um fluxo de mediação começa com uma operação de origem:
  • Os fluxos processam mensagens a partir das operações de origem e respostas a partir das operações de destino. Na seção do início da página do editor de Fluxos de Mediação, uma operação de origem pode ser visualizada conectada a uma ou mais operações de destino. Isso indica que a operação de origem enviará uma mensagem às operações de destino, que enviam uma resposta para o responsável pela chamada da operação de origem. Estes fluxos incluem um fluxo de pedido e um fluxo de resposta.
  • As operações de origem não precisam estar conectadas às operações de destino se elas não pretendem receber uma resposta. Nesse caso, apenas um fluxo de pedido é criado e a mensagem é retornada diretamente à operação de origem após o processo.
No editor de Fluxos de Mediação, os fluxos são representados da esquerda para a direita. O fluxo da mensagem de saída da origem para os destinos é um fluxo de pedido e o fluxo da mensagem de retorno dos destinos para a origem é um fluxo de resposta. Quando vários destinos retornam uma resposta, as mensagens de retorno são processadas para uma única mensagem, que é então retornada à origem.
  • Um fluxo de pedido começa com um único nó de entrada para a operação de origem, seguido por uma ou mais primitivas de mediação na seqüência e por um nó legenda para cada operação de destino, todos ligados. Se uma mensagem tiver que ser retornada à origem diretamente após o processamento, ela poderá ser ligada a um nó de resposta de entrada no fluxo de pedido. Se as mensagens de falha estiverem definidas na operação de origem, um nó de falha de entrada também será criado.
  • Um fluxo de resposta começa com um nó de resposta de legenda para cada operação de destino, seguido por uma ou mais primitivas de mediação na seqüência e por um único nó de resposta de entrada que representa a operação de origem, todos ligados. Se as mensagens de falha estiverem definidas na operação de origem, um nó de falha de legenda também será criado. Se as mensagens de falha estiverem definidas na operação de destino, um nó de falha de legenda também será criado. Os fluxos de resposta não existem para operações apenas de pedido ou para operações de origem que não estão conectadas a uma operação de destino.

Exemplo Cotação de Ações

No exemplo Cotação de Ações, o fluxo de mediação é definido pelas seguintes conexões de operação:

Figura de conexão entre operações de origem e de destino
  • A operação getQuote da interface de origem está conectada às operações getQuote de DelayedServicePartner e RealtimeServicePartner.

Consulte os tópicos "Editor de Fluxo de Mediação" e "Construindo Fluxos de Pedido e de Resposta" sob os links relacionados para obter informações adicionais.

.

Primitivas de Mediação

Os fluxos de mediação consistem em uma seqüência de primitivas de mediação, que definem as etapas de processamento. Uma primitiva de mediação recebe uma mensagem, processa-a e propaga a mensagem processada ao próximo nó ou primitiva no fluxo. Por exemplo, uma primitiva Busca ao Banco de Dados recupera um valor de um banco de dados e configura-o na mensagem. Um conjunto de primitivas de mediação prontas para serem utilizadas está disponível na paleta do editor de Fluxos de Mediação. Se precisar de recursos de mediação que não são fornecidos por este conjunto de primitivas, poderá criar primitivas de mediação customizadas para chamar sua própria implementação Java ou um serviço importado. As primitivas de mediação possuem terminais que recebem e propagam mensagens. Por exemplo, estes são os terminais de um Registrador de Mensagens:

  • O terminal de entrada à esquerda recebe as mensagens
  • O terminal de saída na parte superior à direita propaga a mensagem em um processamento bem-sucedido para o próximo nó ou primitiva no fluxo
  • O terminal de falha na parte inferior à direita propaga a mensagem e a informação de falha quando uma falha de execução ocorrer na primitiva.

Consulte os tópicos "Editor de Fluxo de Mediação" e "Construindo Fluxos de Pedido e de Resposta" sob os links relacionados para obter informações adicionais.

Service Message Objects

Conforme definido anteriormente, uma mensagem é uma comunicação enviada de um aplicativo ou serviço para outro aplicativo ou serviço. As mensagens em fluxos de mediação são representadas como SMOs (Service Message Objects).

Os Service Message Objects são objetos de negócios aprimorados que incluem os dados do aplicativo e informações do cabeçalho relacionados ao protocolo de transporte utilizado para chamar um serviço como SOAP ou JMS. Um Service Message Object é composto de um corpo que contém os dados do aplicativo (também conhecidos como carga útil ou mensagem de operação) em um objeto de negócios e cabeçalhos contendo informações de contexto adicionais. Você pode utilizar as expressões XPath 1.0 para acessar elementos em uma mensagem. A figura a seguir representa um Service Message Object:


Figura do Service Message Object
  1. context: é o contexto da mensagem onde informações que não estão relacionadas à carga útil são armazenadas. O contexto possui três elementos.

    correlation
    faz a propriedade persistir até a duração dos fluxos de pedido e de resposta, e é utilizada para transmitir valores do fluxo de pedido para o fluxo de resposta.
    transient
    disponibiliza a propriedade até a duração do fluxo atual (o fluxo de pedido ou o fluxo de resposta) e é utilizado para transmitir valores entre primitivas de mediação no mesmo fluxo.
    failInfo
    Contém informações da exceção sobre a falha de execução em uma primitiva de mediação; ele contém a cadeia de exceção da mensagem e identifica a primitiva em que a falha ocorreu. Essa informação é propagada ao terminal de falha.

  2. Headers contém informações de cabeçalhos associadas à mensagem. Existem cinco elementos na seção de cabeçalhos:

    SMOHeader
    Contém informação que define a mensagem; como o ID de mensagem exclusivo, versão de mensagem e tipo de mensagem. Um cabeçalho SMO está sempre presente em um Service Message Object.
    JMSHeader
    Contém cabeçalhos JMS, quando uma ligação de importação ou exportação de JMS é utilizada.
    SOAPHeader
    Contém informação sobre cabeçalho SOAP, quando uma ligação de importação ou exportação de serviços da Web é utilizada.
    SOAPFaultInfo
    Contém informação sobre falhas do SOAP; código de falha, cadeia de falha etc.
    Properties[]
    Propriedades inseridas no cabeçalho da mensagem pelo aplicativo

  3. Body contém os dados do aplicativo em um objeto de negócios. Os dados do aplicativo também são conhecidos como carga útil ou tipo de mensagem de operação.
No WebSphere Integration Developer, os Service Message Objects são utilizados apenas em fluxos de mediação. Outros componentes consomem e transmitem objetos de negócios, que são transformados em Service Message Objects quando entram em um componente do fluxo de mediação. Ao sair do componente do fluxo de mediação, o Service Message Object é transformado novamente em objetos de negócios.

Consulte "Construindo Expressões XPath" no tópico "Construindo Fluxos de Pedido e de Resposta" sob tarefas relacionadas para obter um exemplo do relacionamento entre um objeto de negócios em uma interface e uma condição XPath 1.0.

XPath

A maioria das primitivas de mediação possui propriedades especificadas usando uma expressão XPath 1.0, por exemplo, a propriedade raiz leva uma expressão do XPath 1.0 que especifica a parte da mensagem que está disponível para a primitiva para ser processada. Você também pode utilizar uma expressão XPath 1.0 para identificar um ou mais campos em uma mensagem e utilizá-los para filtrar ou selecionar ao especificar um valor.

Consulte "Construindo Expressões XPath" no tópico "Construindo Fluxos de Pedido e de Resposta" sob tarefas relacionadas para obter um exemplo do relacionamento entre um objeto de negócios em uma interface e uma condição XPath 1.0.

Transformação de Mensagem

Geralmente, as interfaces e operações de serviços diferentes não são idênticas e o Service Message Object da origem precisa ser transformado em um formato que possa ser aceito pelo destino. Uma primitiva de mediação de transformação XSL é requerida quando os tipos de mensagens de origem e de destino são diferentes.

Para transformar a mensagem no editor de Fluxos de Mediação, defina o escopo da mensagem a ser transformada com uma expressão XPath 1.0. Em seguida, mapeie os objetos de mensagem de origem e de destino utilizando o editor de mapeamento XML.

Para informações adicionais, confira:
Conceitos relacionados
Editor do Fluxo de Mediação
Tarefas relacionadas
Criando um Componente do Fluxo de Mediação
Abrindo o Editor do Fluxo de Mediação
Conectando Operações de Origem e de Destino
Construindo Fluxos de Pedido e de Resposta
Implementando uma Primitiva de Mediação Customizada
Testando e Depurando Módulos de Mediação

Informações relacionadas

Tutorial: Criar um Fluxo de Mediação
Amostras: Editor do Fluxo de Mediação
Contribuindo com Seu Próprio Plug-in de Primitiva de Mediação

Feedback
(C) Direitos Autorais IBM Corporation 2005, 2006. Todos os Direitos Reservados.