Übergabe von Nachrichtennutzdaten nach Referenz: Beispielcode für Erzeuger- und Konsumentenanwendungen
Codieren Sie Ihre JMS-Anwendungen so, dass Sie Nachrichtennutzdaten für das asynchrone Messaging zwischen Erzeuger- und Konsumentenanwendungen in einem einzigen Server sicher nach Referenz übergeben können.
Wenn große Objektnachrichten oder Bytenachrichten gesendet werden, können die Kosten für die Speicher- und Prozessornutzung, die durch das Serialisieren, Deserialisieren und Kopieren der Nachrichtennutzdaten entstehen, beträchtlich sein. Wenn sich die Erzeuger- und Konsumentenanwendungen in derselben JVM befinden und Sie die Eigenschaften für die Übernahme von Nachrichtennutzdaten nach Referenz in den zugehörigen Verbindungsfactorys und Aktivierungsspezifikationen aktivieren, können Nachrichtennutzdaten von der Erzeugeranwendung an die Konsumentenanwendung nach Referenz übergeben werden. Auf diese Weise können Datenkopieroperationen eingeschränkt oder umgangen sowie Leistung und Speicherbelegung verbessert werden.
In der folgenden Abbildung werden Nachrichten von einer JMS-Erzeugeranwendung über eine Erzeugerverbindungsfactory an eine Warteschlange in einer Messaging-Engine übergeben. Anschließend werden sie der Warteschlange entnommen und über eine Verbindungsfactory des Konsumenten oder eine Aktivierungsspezifikation an eine JMS-Konsumentenanwendung übergeben.

DataObject data = new DataObject();
data.setXXX("xxx");
data.setYYY(yyy);
ObjectMessage message = session.createObjectMessage();
message.setObject(data);
data = null;
producer.send(message);
Für Bytenachrichten muss Ihre Erzeugeranwendung außerdem garantieren,
dass nur eine einzige vollständige Bytefeldgruppe in die Nachricht geschrieben wird. Verwenden Sie hierfür den folgenden Beispielcode, den Sie für die Verwendung
in Ihrer Anwendung anpassen können:
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());
}