Konvertierung des Nachrichtenhauptteils in das und aus dem IBM MQ-Format
Der IBM MQ-Nachrichtenheader (MQRFH2) und der IBM MQ-Nachrichtendeskriptor (MQMD) können Informationen zum Format des IBM MQ-Nachrichtenhauptteils enthalten. Die Serviceintegration verwendet die in MQRFH2 und MQMD enthaltenen Informationen, wenn sie Nachrichten aus dem IBM MQ-Format konvertiert und beim Konvertieren einer Nachricht in das IBM MQ-Format Informationen in MQRFH2 und MQMD einfügt.
Nachrichtenaustausch zwischen JMS-Programmen durch Serviceintegration und IBM MQ
Gewöhnlich müssen Sie sich nicht mit der Konvertierung von Nachrichtenformaten für den Austausch von JMS-Nachrichten zwischen der Serviceintegration und IBM MQ auskennen, weil die Serviceintegration die entsprechende Konvertierung, einschließlich der Zeichen- und numerischen Codierung, automatisch durchführt. Möglicherweise müssen Sie sich aber über die Nachrichtenkonvertierung informieren, wenn sich Ihre JMS-Anwendungen nicht wie erwartet verhalten oder wenn Ihre Serviceintegrationskonfiguration JMS-Programme oder -Mediationen enthält, die Nachrichten für oder von IBM MQ-Programmen verarbeiten.
Wenn Ihre Serviceintegrationsanwendungen MapMessage-Objekte mit IBM MQ-Anwendungen austauschen, müssen Sie möglicherweise ein vom Standard abweichendes Codierformat für die Zuordnung von Nachrichten angeben.
IBM MQ-Nachrichtennutzdaten: Formatangaben
Die Nachricht im IBM MQ-Format enthält die folgenden Angaben zum Nutzdatenformat:
- MQRFH2-Ordner <mcd>, Feld Msd
- Dieses Feld kann Informationen zum Nutzdatenformat enthalten. Dies sind die JMS-Formatierungsangaben.
- Wenn die Serviceintegration eine Nachricht in das IBM MQ-Format konvertiert, setzt sie automatisch den entsprechenden Wert für die JMS-Nachrichtenklasse.
- Wenn die Serviceintegration eine Nachricht aus dem IBM MQ-Format konvertiert, verwendet sie den in diesem Feld enthaltenen Wert (sofern ein MQRFH2-Header vorhanden ist, der das Feld enthält), um die JMS-Nachrichtenklasse zu setzen.
JMS-Nachrichtenklasse MQRFH2-Ordner <mcd>, Feld Msd (JMS-Format) TextMessage jms_text BytesMessage jms_bytes StreamMessage jms_stream MapMessage jms_map ObjectMessage jms_object Message jms_none Wenn die Angaben zum JMS-Format nicht verfügbar sind, z. B., wenn kein MQRFH2-Header vorhanden ist, setzt die Serviceintegration die JMS-Nachrichtenklasse auf der Basis des MQ-Formats.
Weitere Informationen zum MQRFH2-Ordner <mcd> finden Sie in der IBM MQ-Dokumentation zur Verwendung von Java.
- MQRFH2- (oder MQMD-)Formatfeld
Das MQRFH2-Formatfeld (oder das MQMD-Formatfeld, falls kein MQRFH2-Header vorhanden ist) enthält Informationen zum Nutzdatenformat. Dies sind die MQ-Formatierungsangaben. Gewöhnlich enthält das Feld die Angabe MQFMT_STRING, die anzeigt, dass die Nutzdaten Zeichendaten sind (die von IBM MQ in eine andere Codepage umgesetzt werden können), oder die Angabe MQFMT_NONE, die anzeigt, dass die Nutzdaten keine Zeichendaten sind. Diese Werte sind für die meisten JMS-Nachrichten geeignet, und wenn die Serviceintegration eine Nachricht in das IBM MQ-Format umsetzt, setzt sie dieses Feld automatisch auf einen der folgenden Werte:
JMS-Nachrichtenklasse MQRFH2- (oder MQMD-)Formatfeld (MQ-Format) TextMessage MQFMT_STRING BytesMessage MQFMT_NONE StreamMessage MQFMT_STRING MapMessage MQFMT_STRING ObjectMessage MQFMT_NONE Message MQFMT_NONE Wenn Ihre Anwendung Nachrichten für eine IBM MQ-Anwendung erstellt, die einen anderen Formatwert erfordert, können Sie den Wert aus der vorherigen Tabelle überschreiben, indem Sie die Eigenschaft JMS_IBM_Format auf den erforderlichen Wert setzen. Ein spezielles Beispiel ist beispielsweise, wenn die IBM MQ-Anwendung einen zusätzlichen Header erfordert (z. B. den Header MQCIH für eine CICS-Brückenanwendung). Ihre Anwendung erstellt ein BytesMessage-Objekt, das den Header, gefolgt von allen anderen Nachrichten, enthält, und ersetzt dann das "MQ-Standardformat" (MQFMT_NONE), indem sie die Eigenschaft JMS_IBM_Format auf den entsprechenden Wert für den Header setzt (z. B. MQFMT_CICS für einen MQCIH-Header).
Wenn die Serviceintegration eine Nachricht aus dem IBM MQ-Format konvertiert, setzt sie die Eigenschaft JMS_IBM_Format auf den im MQ-Formatfeld enthaltenen Wert. Wenn das JMS-Format nicht verfügbar ist, z. B., wenn kein MQRFH2-Header verfügbar ist, setzt die Serviceintegration die JMS-Nachrichtenklasse auf TextMessage, falls das MQ-Format auf MQFMT_STRING eingestellt ist, andernfalls auf BytesMessage.
Weitere Informationen zum MQRFH2- (oder MQMD-)Formatfeld finden Sie in der Veröffentlichung "IBM MQ Application Programming Reference".
IBM MQ-Nachrichtennutzdaten: Zeichencodierung und numerische Codierung
Zusätzlich zum Formatfeld enthält der MQRFH2-Header (bzw. der MQMD-Header, falls kein MQRFH2-Header vorhanden ist) Felder, die die Zeichencodierung und die numerische Codierung für die Nachrichtennutzdaten identifizieren.
Wenn die Serviceintegration eine Nachricht in das IBM MQ-Format konvertiert, wählt sie automatisch Standardwerte (UTF-8 als Zeichencodierung und Big-Endian für die numerische Codierung) aus, die für die meisten JMS-Nachrichten geeignet sind. Wenn Ihre Anwendung Nachrichten für eine IBM MQ-Anwendung erstellt, die eine andere Zeichencodierung oder numerische Codierung erfordert, können Sie den Wert für die Zeichencodierung überschreiben, indem Sie die Eigenschaft JMS_IBM_Character_Set auf die ID des erforderlichen codierten Zeichensatzes (CCSID) bzw. die Eigenschaft JMS_IBM_Encoding auf das erforderliche numerische Format setzen. Informationen zu den Werten, die Sie für die Eigenschaften JMS_IBM_Character_Set und JMS_IBM_Encoding verwenden können, finden Sie in der Dokumentation in der IBM MQ-Bibliothek.
Wenn die JMS-Nachricht einen Hauptteil enthält, der in Form von Zeichendaten in IBM MQ (TextMessage, StreamMessage oder MapMessage) codiert ist, bewirken Sie durch die Definition der Eigenschaft JMS_IBM_Character_Set, dass die Serviceintegration den Text im IBM MQ-Nachrichtenhauptteil in diesen codierten Zeichensatz konvertiert.
Wenn die JMS-Nachricht einen Hauptteil enthält, der nicht aus Zeichendaten besteht (BytesMessage oder ObjectMessage), und Sie die Eigenschaft JMS_IBM_Character_Set definieren, konvertiert die Serviceintegration die Bytes nicht. Vielmehr zeigt diese Eigenschaft IBM MQ an, dass alle Zeichendaten im Nachrichtenhauptteil bereits mit dem angegebenen codierten Zeichensatz codiert sind. Wenn der Wert der Eigenschaft JMS_IBM_Format ein Format ist, das IBM MQ erkennt, können die Zeichendaten in den codierten Zeichensatz konvertiert werden, den die empfangende Anwendung erfordert.
Wenn die Serviceintegration eine Nachricht aus dem IBM MQ-Format konvertiert, setzt Sie die Eigenschaften JMS_IBM_Character_Set und JMS_IBM_Encoding auf der Basis des Inhalts der Felder im MQRFH2-Header (bzw. im MQMD-Header, falls kein MQRFH2-Header vorhanden ist). Wenn die JMS-Nachricht eine Nachricht des Typs "TextMessage", "StreamMessage", "MapMessage" oder "ObjectMessage" ist, verwendet Ihre Anwendung die Werte der Eigenschaften JMS_IBM_Character_Set und JMS_IBM_Encoding nicht. Hat die JMS-Nachricht den Typ "BytesMessage", besteht der Hauptteil der JMS-Nachricht aus Binärdaten. In diesem Fall muss Ihre Anwendung die Werte der Eigenschaften JMS_IBM_Character_Set und JMS_IBM_Encoding nicht kennen, weil sie die Codierung aller Zeichendaten oder numerischen Daten angeben, die in die Binärdaten der Nachricht eingebettet sind.