Conversão de dados do gerenciador de filas

A conversão de dados do gerenciador de filas sempre esteve disponível para os aplicativos nãoJMS recebendo mensagens de JMS clientes. Os clientes JMS que recebem mensagens também usam a conversão de dados do gerenciador de fila, que é opcional.

O gerenciador de filas pode converter dados de caracteres e numéricos em dados da mensagem usando os valores de CodedCharacterSetId, Encoding e Format configurados para os dados da mensagem. Para aplicativos que não JMS *, o recurso de conversão sempre esteve disponível com a configuração de GetMessageOption, GMO_CONVERT.

O gerenciador de filas pode converter mensagens que são enviadas para clientes JMS . A conversão do gerenciador de filas é controlada configurando a propriedade de destino, WMQ_RECEIVE_CONVERSION, como WMQ_RECEIVE_CONVERSION_QMGRou WMQ_RECEIVE_CONVERSION_CLIENT_MSG. O aplicativo pode mudar a configuração de destino:

Figura 1. Ativar conversão de dados do gerenciador de filas
((MQDestination)destination).setIntProperty(
              WMQConstants.WMQ_RECEIVE_CONVERSION, 
              WMQConstants.WMQ_RECEIVE_CONVERSION_QMGR);

Ou

((MQDestination)destination).setReceiveConversion
              (WMQConstants.WMQ_RECEIVE_CONVERSION_QMGR);

A conversão de dados do gerenciador de filas para um cliente JMS ocorre quando o cliente chama um método consumer.receive . Dados de texto são transformados em UTF-8 (1208) por padrão. Os métodos de leitura e obter métodos decodificam os dados recebidos a partir de UTF-8, criando Java primitivas de texto em sua codificação Unicode interna. UTF-8 não é o único conjunto de caracteres de destino de conversão de dados do gerenciador de filas. É possível escolher um CCSID diferente configurando a propriedade de destino WMQ_RECEIVE_CCSID.

Um aplicativo também pode mudar a configuração de destino, por exemplo, configurando-o para 437, DOS-US:
Figura 2 Configurar o conjunto de caracteres codificado de destino para a conversão do gerenciador de filas
((MQDestination)destination).setIntProperty
(WMQConstants.WMQ_RECEIVE_CCSID, 437);
Ou
((MQDestination)destination).setReceiveCCSID(437);

A razão para mudar WMQ_RECEIVE_CCSID é especializada; o CCSID escolhido não faz diferença para os objetos de texto criados na JVM. No entanto, algumas JVMs, em algumas plataformas, podem não ser capazes de manipular a conversão do CCSID de texto na mensagem para Unicode. A opção fornece uma opção de CCSID para qualquer texto entregue ao cliente na mensagem. Algumas plataformas de clientes JMS tiveram problemas com o texto da mensagem sendo entregue em UTF-8.

O código JMS é equivalente ao texto em negrito no código C na Figura 3,

Figura 3. Snippet de código de amqsget0.c
gmo.Options = MQGMO_WAIT         /* wait for new messages            */
            | MQGMO_NO_SYNCPOINT /* no transaction                   */
            | MQGMO_CONVERT;     /* convert if necessary             */
   
     while (CompCode != MQCC_FAILED) {
     buflen = sizeof(buffer) - 1; /* buffer size available for GET   */
     memcpy(md.MsgId, MQMI_NONE, sizeof(md.MsgId));
     memcpy(md.CorrelId, MQCI_NONE, sizeof(md.CorrelId));
     md.Encoding       = MQENC_NATIVE;
     md.CodedCharSetId = MQCCSI_Q_MGR;
     
           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                       */
Nota:

A conversão do gerenciador de filas é realizada apenas nos dados da mensagem que tem um formato IBM® MQ conhecido. MQSTR, ou MQCIH são exemplos de formatos conhecidos que são predefinidos. Um formato conhecido também pode ser um formato definido pelo usuário, contanto que você tenha fornecido uma saída de conversão de dados.

As mensagens construídas como JMSTextMessage, JMSMapMessage e JMSStreamMessage têm um formato MQSTR e podem ser convertidas pelo gerenciador de filas.