Pasar carga útil de mensajes por referencia: código de ejemplo para aplicaciones generadoras y consumidoras
Codifique las aplicaciones JMS de modo que pueda pasar de forma segura cargas útiles de mensajes por referencia para la mensajería asíncrona entre aplicaciones generadoras y consumidoras dentro de un servidor único.
Cuando se envían mensajes de objetos o de bytes de gran tamaño, el coste en memoria y el uso del procesador para serializar, deserializar y copiar la carga de trabajo del mensaje puede ser muy significativo. Si las aplicaciones generadora y consumidora están en la misma JVM y habilita las propiedades pasar carga útil de mensajes por referencia en las fábricas de conexiones y especificaciones de activación asociadas, las cargas útiles de mensaje se pueden pasar por referencia de la aplicación generadora a la aplicación consumidora. Esto puede reducir u omitir la copia de datos y mejorar el rendimiento y el uso de la memoria.
En la figura siguiente, los mensajes pasan de una aplicación generadora JMS, a través de una fábrica de conexiones generadora, a una cola de un motor de mensajería. A continuación, se sacan de la cola y pasan, a través de una especificación de activación o fábrica de conexiones consumidora, a una aplicación consumidora JMS.

DataObject data = new DataObject();
data.setXXX("xxx");
data.setYYY(yyy);
ObjectMessage message = session.createObjectMessage();
message.setObject(data);
data = null;
producer.send(message);
Para los mensajes de bytes, la aplicación generadora también debe garantizar que sólo grabará una sola matriz de bytes completa en el mensaje. Para ayudar a lograrlo, a continuación se muestra un código de ejemplo que puede adaptar para utilizarlo en la aplicación:byte [] data = myByteData;
BytesMessage message = session.createBytesMessage();
message.writeBytes(data);
data = null;
producer.send(message);
public void onMessage (Message message)
{
ObjectMessage oMessage = (ObjectMessage) message;
DataObject data = oMessage.getObject();
System.out.print(data.getXXX());
System.out.print(data.getYYY());
}