Ü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.

Vorsicht:
Die Teile der JMS-Spezifikation, die von diesen Eigenschaften umgangen werden, werden definiert, um die Integrität der Nachrichtendaten zu gewährleisten. Alle JMS-Anwendungen, die diese Eigenschaften verwenden, müssen die Regeln, die im Folgenden beschrieben sind, strikt einhalten, da die Datenintegrität ansonsten nicht gewährleistet werden kann.
Abbildung 1. Nachrichten erzeugen und konsumieren
Diese Abbildung veranschaulicht den Nachrichtenfluss von einer JMS-Erzeugeranwendung zu einer Warteschlange in einer Messaging-Engine. Anschließend werden die Nachrichten über eine Konsumentenverbindungsfactory oder Aktivierungsspezifikationseigenschaften an eine JMS-Konsumentenanwendung weitergegeben.
Wenn Sie die Eigenschaft producerDoesNotModifyPayloadAfterSet für die Verbindungsfactory des Erzeugers aktivieren, muss Ihre Erzeugeranwendung garantieren, das Nutzdatenobjekt nicht zu ändern, nachdem es in Objekt- oder Bytenachrichten definiert wurde. Verwenden Sie hierfür den folgenden Beispielcode, den Sie für die Verwendung in Ihrer Anwendung anpassen können:
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);
Wenn Sie die Eigenschaft consumerDoesNotModifyPayloadAfterGet für die Verbindungsfactory des Konsumenten oder die Aktivierungsspezifikation aktivieren, muss Ihre Konsumentenanwendung garantieren, die Nutzdaten, die sie aus der Objektnachricht abruft, nicht zu ändern (der Konsum von Bytenachrichten ist von der Eigenschaft consumerDoesNotModifyPayloadAfterGet nicht betroffen). Verwenden Sie hierfür den folgenden Beispielcode, den Sie für die Verwendung in Ihrer Anwendung anpassen können:
public void onMessage (Message message)
{
   ObjectMessage oMessage = (ObjectMessage) message;
   DataObject data = oMessage.getObject();
   System.out.print(data.getXXX());
   System.out.print(data.getYYY());
}

Symbol, das den Typ des Artikels anzeigt. Konzeptartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cjn_passbyref_prodcons
Dateiname:cjn_passbyref_prodcons.html