Transmitir carga útil da mensagem por referência: Utilizar cenários e códigos de exemplo para aplicativos de redirecionamento

Um aplicativo redirecionador de JMS recebe uma mensagem (por meio de um connection factory ou, se ele for um bean acionado por mensagens, por meio de uma especificação de ativação) e envia o objeto da mensagem para outro destino. Explore os diferentes cenários de uso e, em seguida, codifique seus aplicativos de transmissão JMS para que possam transmitir com segurança as cargas úteis por referência ao transmitir mensagens de uma fila para outra dentro de um único servidor.

Quando grandes mensagens de objetos ou mensagens de bytes são enviadas, o custo no uso da memória e do processador de serialização, desserialização e cópia da carga útil da mensagem pode ser expressivo. Se você ativar as propriedades transmitir carga útil de mensagem por referência em um connection factory ou uma especificação de ativação, informará ao provedor do sistema de mensagens padrão para substituir a especificação do JMS 1.1 e reduzir ou ignorar potencialmente essa cópia de dados.

Na seguinte figura, as mensagens são transmitidas da queue1 em um mecanismo do sistema de mensagens, por meio da especificação de ativação ou do connection factory do cliente, para um aplicativo de encaminhamento JMS. Elas são então encaminhadas por meio do connection factory do produtor para a queue2 no mesmo mecanismo do sistema de mensagens.

CUIDADO:
As partes da Especificação JMS ignoradas por essas propriedades são definidas para garantir a integridade dos dados da mensagem. Todos os aplicativos JMS que usam essas propriedades devem seguir estritamente as regras descritas ou haverá o risco de perder a integridade de dados.
Figura 1. Transmitindo mensagens
A figura ilustra o fluxo de mensagens de uma fila para outra. A partir de queue1, as mensagens passam para o aplicativo de encaminhamento de JMS por meio da especificação de ativação do consumidor ou da propriedade do connection factory. A partir do aplicativo de encaminhamento de JSM, as mensagens são então encaminhadas para a queue2 por meio da propriedade do connection factory do produtor.
Para compreender os cenários de uso e o código de exemplo associado determinados neste tópico, você deve observar estas importantes características de um aplicativo JMS de encaminhamento:
  • Um aplicativo de transmissão não substitui o objeto da mensagem. Isso será útil se o seu aplicativo estiver apenas registrando ou então gravando (por exemplo, imprimindo) a mensagem antes de transmiti-la e significa também que a mensagem transmitida retém algumas propriedades úteis da mensagem, como as propriedades JMSCorrelationID, JMSReplyTo e JMSType.
  • Um aplicativo de transmissão pode modificar ou substituir a carga útil da mensagem. Se substituir a carga útil, configurará a nova carga útil do objeto de mensagem e alterará a referência da carga útil de modo a apontar para a nova carga útil da mensagem.
  • Para um aplicativo de encaminhamento, a mensagem encaminhada é "criada" e configurada pelo connection factory do consumidor ou especificação de ativação. O connection factory do consumidor é utilizado unicamente para rotear a mensagem transmitida e não tem efeito no conteúdo da mensagem transmitida.

A tabela a seguir descreve os quatro cenários de uso do aplicativo de encaminhamento que afetam o modo de configuração das propriedades "passar carga útil da mensagem pela referência". Observe que, como o connection factory do produto não tem efeito sobre o conteúdo da mensagem transmitida, você define as propriedades do consumidor e do produtor/transmissor no connection factory do consumidor ou na especificação de ativação.

Tabela 1. Efeito das Configurações da Propriedade "passar carga útil da mensagem por referência" nos Cenários de Uso do Aplicativo de Encaminhamento. A primeira coluna da tabela lista os quatro cenários de uso do aplicativo de encaminhamento. A segunda coluna indica a configuração da propriedade do consumidor para os cenários. A terceira coluna indica a conexão ou a configuração da propriedade de especificação de ativação para os cenários.
Cenário de uso do aplicativo de transmissão

consumerDoesNotModify
PayloadAfterGet

configuração de propriedade

producerDoesNotModify
PayloadAfterSet

(para connection factories) ou

forwarderDoesNotModify
PayloadAfterSet

(para especificações de ativação) configuração de propriedade
Cenário 1: O aplicativo recebe uma mensagem, consulta a carga útil mas não a modifica e encaminha a mensagem sem modificar ou substituir a carga útil. Ativado Não necessária, mas pode ser ativada
Cenário 2: O aplicativo recebe uma mensagem, consulta a carga útil mas não a modifica, substitui a carga útil na mensagem por uma nova e encaminha a mensagem sem modificar a carga útil, após a chamada para configurá-la na mensagem. Ativado Ativado
Cenário 3: O aplicativo recebe uma mensagem, consulta e modifica a carga útil, então configura a carga útil modificada ou alguns outros dados na mensagem e encaminha a mensagem sem modificar ainda mais a carga útil, após a chamada para configurá-la na mensagem. NÃO ativada Ativado
Cenário 4: O aplicativo recebe uma mensagem, consulta e modifica a carga útil, então configura a carga útil modificada ou alguns outros dados na mensagem, em seguida modifica a carga útil após a chamada para configurá-la na mensagem. NÃO ativada NÃO ativada

Para os cenários 1, 2 e 3, é possível ativar uma ou mais das propriedades "passar carga útil da mensagem por referência", contanto que o aplicativo de encaminhamento possa garantir que o comportamento seja igual ao descrito no cenário. Para ajudá-lo a conseguir isso, aqui está algum código de exemplo que é possível adaptar para utilizar em seus aplicativos.

Aplicativo de transmissão: cenário 1

O aplicativo recebe uma mensagem, consulta a carga útil, mas não a modifica, e transmite a mensagem sem modificar ou substituir a carga útil.

public void onMessage (Message message)
{
   ObjectMessage oMessage = (ObjectMessage) message;
   DataObject data = oMessage.getObject();
   System.out.print(data.getXXX());
   System.out.print(data.getYYY());

   // get a session to forward on the received message
   
   producer.send(message);
   session.close();
}

Aplicativo de transmissão: cenário 2

O aplicativo recebe uma mensagem, consulta a carga útil, mas não a modifica, substitui a carga útil na mensagem por uma nova carga útil e transmite a mensagem sem modificar a carga útil após a chamada para configurá-la na mensagem.

public void onMessage(Message message)
{
   ObjectMessage oMessage = (ObjectMessage) message;
   DataObject data = oMessage.getObject();
   System.out.print(data.getXXX());
   System.out.print(data.getYYY());

   // get a session to forward on the received message
   
   message.setObject(newData);

   producer.send(message);
   session.close();
}
Para mensagens de bytes, seu aplicativo deve garantir a gravação de uma única matriz de byte completa na mensagem.
byte [] data = myByteData; 
BytesMessage message = session.createBytesMessage(); 
message.writeBytes(data); 
data = null;	 
producer.send(message);

Aplicativo de transmissão: cenário 3

O aplicativo recebe uma mensagem, consulta e modifica a carga útil, então configura a carga útil modificada ou alguns outros dados na mensagem e encaminha a mensagem sem modificar ainda mais a carga útil, após a chamada para configurá-la na mensagem.

public void onMessage(Message message)
{
   ObjectMessage oMessage = (ObjectMessage) message;
   DataObject data = oMessage.getObject();
   System.out.print(data.getXXX());
   System.out.print(data.getYYY());

   // get a session to forward on the received message

   data.setXXX(xxx);
   data.setYYY(yyy);
   message.setObject(data);

   producer.send(message);
   session.close();
}
Para mensagens de bytes, seu aplicativo deve garantir a gravação de uma única matriz de byte completa na mensagem.
byte [] data = myByteData; 
BytesMessage message = session.createBytesMessage(); 
message.writeBytes(data); 
data = null;	 
producer.send(message);

Ícone que indica o tipo de tópico Tópico de Conceito



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cjn_passbyref_forward
Nome do arquivo: cjn_passbyref_forward.html