Service Message Objects

SMOs (Service Message Objects) são SDOs (Service Data Objects) aprimorados. O SMO fornece uma camada de abstração para processamento e manipulação de mensagens trocadas entre serviços.

Modelo SMO

O modelo SMO é um padrão para utilização de DataObjects SDO para representar mensagens. O SMO contém uma representação dos seguintes grupos de dados:
  • A carga útil comercial da mensagem. A carga útil são os dados do aplicativo trocados entre nós de extremidade de serviço.
  • Informações de cabeçalho associadas à mensagem. Por exemplo, cabeçalhos JMS (Java Message Service) se a mensagem foi transportada utilizando a API JMS ou cabeçalhos MQ se as mensagens vieram do WebSphere MQ.
  • Informações de contexto (outros dados além da carga útil da mensagem).

Todas essas informações são acessadas como DataObjects SDO, e existe uma declaração de esquema que especifica a estrutura geral do SMO. O esquema é gerado pelo WebSphere Integration Developer.

Todos os SMOs possuem a mesma estrutura básica. A estrutura consiste em um objeto de dados de raiz chamado ServiceMessageObject, que contém outros objetos de dados representando os dados do cabeçalho, corpo e contexto. O corpo do SMO contém a carga útil da mensagem. Os cabeçalhos contêm informações originadas de uma ligação de importação ou exportação específica. Por exemplo, uma Ligação JMS.

O SMO oferece uma interface para acessar e modificar os cabeçalhos e as cargas úteis das mensagens. Ele pode representar o conteúdo lógico de muitos tipos diferentes de mensagem.

Figura 1. Visão geral da estrutura do SMO. Os cabeçalhos, contexto e corpo de um ServiceMessageObjectO ServiceMessageObject contém contexto (1 ocorrência), cabeçalhos (1 ocorrência) e corpo (0..1 ocorrência). O contexto contém correlação (0..1 ocorrência), transiente (0..1 ocorrência), failInfo (0..1 ocorrência) e primitiveContext (0..1 ocorrência). Os cabeçalhos contêm SMOheader (0..1 ocorrência), JMSheader (0..1 ocorrência), SOAPheader (sem limite de ocorrências), SOAPFaultInfo (0..1 ocorrência), propriedades (sem limite de ocorrência) e MQHeader (0..1 ocorrência).

WebSphere Process Server e SMO

O WebSphere Process Server opera em mensagens que estão a caminho entre nós de extremidade de interação. Dentro do WebSphere Process Server, os fluxos de mediação processam mensagens como SMOs.

Para fornecer roteamento dinâmico, os terminais de interação podem ser consultados através do WSRR (Websphere Service Registry and Repository): o resultado da consulta do WSRR é armazenado no SMO.

As mensagens podem ser provenientes de várias origens, por isso o SMO deve ser capaz de transportar diferentes tipos de cabeçalhos de mensagem. Os tipos de cabeçalhos de mensagem manipulados pelo WebSphere Process Server são:
  • Cabeçalhos de mensagem Web Services.
  • Cabeçalhos de mensagem SCA (Service Component Architecture).
  • Cabeçalhos de mensagem JMS (Java Message Service).
  • Cabeçalhos de mensagem WebSphere Adapter.
  • Cabeçalhos de mensagem WebSphere MQ

Tempo de Execução do SMO do WebSphere Process Server

O WebSphere Process Server cria objetos SMO, que ficam então disponíveis para os fluxos de mediação.

Ao criar fluxos de mediação, o WebSphere Integration Developer especifica o tipo de corpo da mensagem para cada terminal (entrada, saída ou falha) e, opcionalmente, o tipo de informações de contexto. O WebSphere Process Server utiliza estas informações para converter as mensagens em objetos SMO do tipo especificado.

Dados do Cabeçalho do MQ no SMO

A estrutura do SMO armazena informações do cabeçalho MQ em /headers/MQHeader. Ela contém três elementos:
  • md, que representa o MQMD (MQ Message Descriptor)
  • control, que contém as informações de formato referentes ao corpo da mensagem
  • header, que, opcionalmente, repete e representa estruturas do cabeçalho contidas na mensagem do WebSphere MQ
O elemento md contém todos os campos da definição do MQMD (veja a documentação do WebSphere MQ), exceto para determinados campos de controle que não possuem dados úteis (como StrucId e Version) e campos de formato de mensagem (Encoding, CodedCharSetId e Format).

O elemento control contém os campos Encoding, CodedCharSetId e Format que descrevem o corpo da mensagem. Se a mensagem do WebSphere MQ contiver algum cabeçalho de mensagem (por exemplo, MQRFH2), os campos Encoding, CodedCharSetId e Format que descrevem o cabeçalho serão transportados para o elemento header.

Um elemento header representa um cabeçalho de mensagem, como um MQRFH2. Cada cabeçalho é um dos seguintes:
  • Um cabeçalho modelado explicitamente no SMO: um RFH versão 1 ou 2
  • Um cabeçalho seguindo a estrutura do cabeçalho MQ padrão não modelado explicitamente. Eles possuem identificadores de formato MQ que começam com MQH. Esses cabeçalhos são representados como dados binários não-estruturados no SMO.
  • Um cabeçalho manipulado por uma ligação de dados do cabeçalho MQ fornecido pelo usuário.

O elemento header contém os campos Encoding, CodedCharSetId e Format que descrevem o cabeçalho. O campo Format, em particular, deve ser configurado corretamente (por exemplo, MQHRF2 para um cabeçalho MQRFH2); e os campos CodedCharSetId e Encoding são importantes para dados obscuros. Quando são apresentadas como uma mensagem do WebSphere MQ, essas informações de formato são gravadas no cabeçalho MQ anterior (ou no MQMD se não houver cabeçalho anterior).

Subelementos de Cabeçalho

O elemento header também contém subelementos (rfh e rfh2) para cada um dos cabeçalhos modelados; um subelemento (opaque) para cabeçalhos MQ padrão não-modelados; e um subelemento (value) para cabeçalhos MQ fornecidos pelo usuário. Precisamente um desses quatro elementos deve ser configurado: seria um erro ter mais de um deles configurados em qualquer elemento de cabeçalho. O subelemento value armazena a estrutura utilizada pela ligação de dados do cabeçalho fornecido pelo usuário; os outros três elementos (rfh, rfh2 e opaque) são descritos nas seções seguintes.

Cabeçalhos RFH

Um cabeçalho RFH do WebSphere MQ contém uma cadeia de pares nome-valor, em que cada nome e cada valor é simplesmente uma cadeia de texto. Isso é representado, no SMO, como um elemento de propriedade repetido, contendo um elemento de nome e de valor.

Cabeçalhos RFH2

Um cabeçalho RFH2 do WebSphere MQ contém zero ou mais pastas, cada uma contendo uma seqüência de propriedades e grupos. Uma propriedade tem um nome, um tipo opcional e um valor (todos representados como string). Um grupo tem um nome e contém uma seqüência de propriedades e grupos. A representação SMO de um cabeçalho RFH2 também contém um elemento NameValueCCSID, que determina o CCSID utilizado para codificar as pastas na mensagem do WebSphere MQ.

Cabeçalhos Padrão do WebSphere MQ Não-modelados

O elemento opaque representa qualquer cabeçalho do WebSphere MQ de estrutura padrão. Os campos comuns a todos esses cabeçalhos (StrucId, Version e Flags) são representados como elementos. Existe também um elemento data que contém a parte não-modelada do cabeçalho como dados hexBinary. Quando se utiliza o elemento opaque, normalmente é importante manter os valores Encoding e CodedCharSetId corretos com o cabeçalho para evitar a distorção dos dados.

Tipos de Informações para o Cabeçalho do WebSphere MQ

Os campos de cabeçalho do WebSphere MQ são definidos utilizando o mesmo conjunto de tipos utilizado pelo WebSphere MQ em si. Os campos MQLONG são representados como int; campos MQBYTEnn como dados hexBinary limitados a nn no comprimento; e os campos MQCHARnn como dados string limitados a nn caracteres de comprimento.


(c) Copyright IBM Corporation 2005, 2006.
Este centro de informações é desenvolvido em tecnologia Eclipse (http://www.eclipse.org)