Transmission de la charge de messages par référence : Scénarios et exemple de code pour des applications émettrices et destinataires

Codez les applications JMS de manière à transmettre en toute sécurité les charges de messages par référence pour la messagerie asynchrone, entre les applications émettrices et destinataires au sein d'un seul serveur.

Lorsque des messages volumineux de type objet ou octet sont envoyés, la quantité de mémoire et le traitement processeur nécessaires pour sérialiser, désérialiser et copier les messages peuvent être importants. i l'application émettrice et l'application destinataire se trouvent sur la même JVM et que vous activez les propriétés transmission de la charge de messages par référence sur les fabriques de connexions et les spécifications d'activation associées, les charges de messages sont envoyées par référence de l'application émettrice vers l'application destinataire. Cette opération permet de limiter ou d'ignorer la copie des données et d'améliorer les performances et l'utilisation de la mémoire.

Dans l'illustration suivante, les messages passent d'une application fournisseur JMS à une file d'attente d'un moteur de messagerie, via une fabrique de connexions de fournisseur. Ils sont ensuite supprimés de la file d'attente et transmis à une application consommatrice JMS via une fabrique de connexions de consommateur ou une spécification d'activation.

ATTENTION :
Les parties de la spécification JMS ignorées par ces propriétés sont définies pour assurer l'intégrité des données. Les applications JMS utilisant ces propriétés doivent respecter rigoureusement les règles décrites. Dans le cas contraire, l'intégrité des données risque d'être altérée.
Figure 1. Expédition et réception de messages
Cette illustration décrit le flux des messages d'une application fournisseur JMS vers une file d'attente de moteur de messagerie. Les messages sont ensuite envoyés à une application consommatrice JMS via une fabrique de connexions de consommateur ou des propriétés de spécification d'activation.
Si vous activez la propriété producerDoesNotModifyPayloadAfterSet pour la fabrique de connexions émettrice, l'application émettrice doit s'assurer que l'objet de charge n'est pas modifiée après sa définition dans des messages de type objet ou octets. Pour vous aider à effectuer cette opération, voici un exemple de code que vous pouvez adapter pour l'utiliser dans votre application :
DataObject data = new DataObject(); 
data.setXXX("xxx"); 
data.setYYY(yyy); 
ObjectMessage message = session.createObjectMessage(); 
message.setObject(data); 
data = null; 
producer.send(message); 
Pour les messages de type octet, l'application émettrice doit également veiller à n'écrire qu'un seul tableau d'octets complet au sein du message. Pour vous aider à effectuer cette opération, voici un exemple de code que vous pouvez adapter pour l'utiliser dans votre application :
byte [] data = myByteData; 
BytesMessage message = session.createBytesMessage(); 
message.writeBytes(data); 
data = null;	 
producer.send(message);
Si vous activez la propriété consumerDoesNotModifyPayloadAfterGet pour la fabrique de connexions ou la spécification d'activation destinataire, l'application destinataire doit veiller à ne pas modifier la charge qu'elle reçoit du message de type objet (la réception des messages de type octet n'est pas affectée par la propriété consumerDoesNotModifyPayloadAfterGet). Pour vous aider à effectuer cette opération, voici un exemple de code que vous pouvez adapter pour l'utiliser dans votre application :
public void onMessage (Message message)
{
   ObjectMessage oMessage = (ObjectMessage) message;
   DataObject data = oMessage.getObject();
   System.out.print(data.getXXX());
   System.out.print(data.getYYY());
}

Icône indiquant le type de rubrique Rubrique de concept



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cjn_passbyref_prodcons
Nom du fichier : cjn_passbyref_prodcons.html