Formatos de mensaje de IMS para mensajes de salida
Cuando se envían mensajes de Liberty a IMS mediante OTMA, la característica zosLocalAdapters debe convertir el mensaje de un formato de IMS a un formato C/I de OTMA. Para realizar esta conversión, Liberty debe saber si los segmentos del mensaje de solicitud y de respuesta están en el formato LLZZ o LLLLZZ.
Un segmento de mensaje con el formato LLZZ empieza con un campo de 2 bytes que contiene la longitud del segmento, seguido por un campo reservado de 2 bytes. La parte restante del segmento la utiliza el propio mensaje. La mayoría de segmentos de IMS utilizan este formato.
Un segmento de mensaje con el formato LLLLZZ empieza con un campo de 4 bytes que contiene la longitud del segmento, seguido por un campo reservado de 2 bytes. La parte restante del segmento la utiliza el propio mensaje. El formato LLLLZZ lo utilizan algunos programas PL/I.
El formato de segmento para la solicitud y respuesta se puede especificar en la definición de fábrica de conexiones en server.xml, estableciendo las propiedades OTMARequestLLZZ y OTMAResponseLLZZ. También se puede especificar, o se puede sustituir temporalmente, el formato de segmento utilizando los métodos en la clase ConnectionSpecImpl cuando se obtiene una conexión de la fábrica de conexiones. El Javadoc generado para com.ibm.websphere.ola.ConnectionSpecImpl tiene más información sobre cómo establecer los campos LLZZ en el nivel de conexión.
Cuando se envían mensajes multisegmento a IMS, el primer segmento de mensaje debe contener el identificador de transacción IMS de 8 bytes de la transacción IMS de destino. Este identificador de transacción sigue al prefijo LLZZ o LLLLZZ. Los segmentos subsiguientes no deben contener el identificador de transacción. Los mensajes de segmento único se deben construir de la misma forma que el primer segmento de un mensaje multisegmento. Un mensaje multisegmento podría ser similar a esto:
2 bytes LL 20
2 bytes ZZ 00
8 bytes transaction ID 'MYTRAN01'
8 bytes data 'DATA0000'
2 bytes LL 12
2 bytes ZZ 00
8 bytes data 'DATA0001'
2 bytes LL 12
2 bytes ZZ 00
8 bytes data 'DATA0002'
Todos los segmentos del mensaje deben estar concatenados en una matriz de un solo byte y se deben pasar a IMS mediante un IndexedRecord. Con esta finalidad se proporciona la clase com.ibm.websphere.ola.IndexedRecordImpl. La matriz de un solo byte se debe añadir a IndexedRecord y pasar a WOLA al dirigir Interaction.execute. Cuando la interacción devuelve la respuesta, devuelve un IndexedRecord, que contiene todos los segmentos de respuesta concatenados en una matriz de un solo byte. El formato de los segmentos es LLZZ o LLLLZZ, en función del valor de la propiedad OTMAResponseLLZZ.