Trocando um registro formatado com um aplicativo nãoJMS
Siga os passos sugeridos nesta tarefa para projetar e construir uma saída de conversão de dados, e um aplicativo cliente JMS que possa trocar mensagens com um aplicativo nãoJMS usando JMSBytesMessage. A troca de uma mensagem formatada com um aplicativo nãoJMS pode ocorrer com ou sem chamar uma saída de conversão de dados.
Antes de Começar
Sobre esta tarefa
Um cliente JMS é mais fácil de escrever se não estiver envolvido nos detalhes de formatação JMS mensagens trocadas com outros clientes JMS . Desde que o tipo de mensagem seja JMSTextMessage, JMSMapMessage, JMSStreamMessageou JMSObjectMessage, IBM® MQ looks após os detalhes de formatação da mensagem. IBM MQ trata das diferenças nas páginas de código e da codificação numérica em diferentes plataformas.
Você pode usar esses tipos de mensagens para trocar mensagens com aplicativos nãoJMS . Para isso, você deve entender como essas mensagens são construídas por IBM MQ classes for JMS. Você pode modificar o não-JMS aplicativo para interpretar as mensagens; ver Mapeando mensagens JMS paraIBMMQ mensagens .
Uma vantagem de usar um desses tipos de mensagens é a programação do cliente JMS não depende do tipo de aplicativo com o qual ele está trocando mensagens. Uma desvantagem é que ela pode requerer uma modificação para outro programa e você pode não ser capaz de mudar o outro programa.
Uma abordagem alternativa é escrever um aplicativo cliente JMS que possa lidar com formatos de mensagens existentes. Geralmente as mensagens existentes são formatos fixos e contêm uma mistura de dados não formatados, textos e números. Use as etapas desta tarefa e o exemplo de cliente JMS em Classes de escrita para encapsular um layout de registro em uma JMSBytesMessage como ponto de partida para criar um cliente JMS que possa trocar registros formatados com aplicativos que não JMS *.
Procedimento
Exemplos
struct RECORD { MQCHAR StrucID[4];
MQLONG Version;
MQLONG StructLength;
MQLONG Encoding;
MQLONG CodeCharSetId;
MQCHAR Format[8];
MQLONG Flags;
MQCHAR RecordData[32];
};
- Declare a estrutura de dados RECORD.h
struct tagRECORD { MQCHAR4 StrucId; MQLONG Version; MQLONG StrucLength; MQLONG Encoding; MQLONG CCSID; MQCHAR8 Format; MQLONG Flags; MQCHAR32 RecordData; }; typedef struct tagRECORD RECORD; typedef RECORD MQPOINTER PRECORD; RECORD record; PRECORD pRecord = &(record); - Modifique a chamada MQGET para usar o RECORD,
- Antes da modificação:
MQGET(Hcon, /* connection handle */ Hobj, /* object handle */ &md, /* message descriptor */ &gmo, /* get message options */ buflen, /* buffer length */ buffer, /* message buffer */ &messlen, /* message length */ &CompCode, /* completion code */ &Reason); /* reason code */ - Após a modificação:
MQGET(Hcon, /* connection handle */ Hobj, /* object handle */ &md, /* message descriptor */ &gmo, /* get message options */ sizeof(RECORD), /* buffer length */ pRecord, /* message buffer */ &messlen, /* message length */ &CompCode, /* completion code */ &Reason); /* reason code */
- Antes da modificação:
- Mude a instrução de impressão,
- De:
buffer[messlen] = '\0'; /* add terminator */ printf("message <%s>\n", buffer); - Para:
/* buffer[messlen] = '\0'; add terminator */ printf("ccsid <%d>, flags <%d>, message <%32.32s>\n \0", md.CodedCharSetId, record.Flags, record.RecordData);
- De: