Utilice el nodo Compute para crear uno o más mensajes de salida nuevos.
Los mensajes de salida que cree en el nodo Compute podrían crearse modificando la información que se suministra en el mensaje de entrada o utilizando únicamente información nueva que puede extraerse de una base de datos o de otras procedencias. Se pueden utilizar los elementos del mensaje de entrada (por ejemplo cabeceras, campos de cabecera y datos de cuerpo), el entorno asociado y la lista de excepciones para crear el nuevo mensaje de salida.
Especifique cómo se crean los nuevos mensajes codificando ESQL en el archivo de recursos ESQL del flujo de mensajes. Para obtener más información, consulte Especificación de ESQL.
Utilice el nodo Compute para:
El nodo Compute se encuentra en la bandeja Transformación de la paleta y está representado en el WebSphere Message Broker Toolkit mediante el siguiente icono:
Puede ver información sobre los ejemplos sólo cuando utilice el Information Center que está integrado en WebSphere Message Broker Toolkit o el Information Center en línea. Puede ejecutar ejemplos sólo cuando utilice el Information Center que está integrado en WebSphere Message Broker Toolkit.
Tomemos el ejemplo de un flujo de mensajes en el que quiere dar un identificador exclusivo a cada orden que se recibe, para facilitar el seguimiento. El nodo Compute no modifica su mensaje de entrada; crea una copia nueva y modificada del mensaje como mensaje de salida. Puede utilizar el nodo Compute para insertar un identificador exclusivo para su orden en el mensaje de salida, que pueden utilizar los nodos siguientes del flujo de mensajes.
Cuando haya colocado una instancia del nodo Compute en un flujo de mensajes, podrá configurarlo; consulte el tema Configurar un nodo de flujo de mensajes. Las propiedades del nodo se visualizan en la vista Propiedades.
Todas las propiedades obligatorias para las que debe especificar un valor (las que no tienen un valor predeterminado definido) están marcadas con un asterisco.
Configure el nodo Compute como se indica a continuación:
Para configurar el acceso a una base de datos desde este nodo:
En sistemas z/OS, el
intermediario utiliza el ID de la tarea iniciada por el intermediario o el ID y la contraseña del usuario que se
especificaron en el JCL del mandato mqsisetdbparms BIPSDBP en el
conjunto de datos de personalización <hlq>.SBIPPROC.
El valor escogido se establece para todas las bases de datos que haya añadido; no se puede seleccionar un valor diferente para cada tabla.
Cuando selecciona el recuadro, el nodo gestiona todos los códigos de retorno positivos de la base de datos como errores y genera excepciones igual que si se tratase de errores negativos o más graves.
Si no selecciona el recuadro, el nodo trata los avisos como códigos de retorno habituales y no emite excepciones. El aviso más significativo es no encontrado que, en la mayoría de los casos, puede tratarse de forma segura como un código de retorno habitual.
Si deselecciona el recuadro, deberá incluir ESQL para comprobar si hay algún error de la base de datos que pudiera devolverse después de cada llamada efectuada a la base de datos (esto puede hacerse utilizando SQLCODE y SQLSTATE). Si se produce un error, deberá gestionarlo en el flujo de mensajes para asegurarse de la integridad del intermediario y de la base de datos; el error se ignora si no lo gestiona a través de su propio proceso, debido a que ha decidido no invocar el manejo de errores predeterminado mediante el intermediario. Por ejemplo, puede incluir la sentencia THROW de ESQL para generar una excepción en este nodo o puede utilizar el nodo Throw para generar posteriormente su propia excepción en el flujo de mensajes.
Codifique sentencias ESQL para personalizar el comportamiento del nodo Compute. Por ejemplo, puede personalizar el nodo para que cree un nuevo mensaje o mensajes de salida, utilizando mensajes de entrada o contenido de base de datos (sin modificar o modificados), o datos nuevos. Por ejemplo, quizá desee modificar un valor en el mensaje de entrada añadiendo un valor de una base de datos y almacenando el resultado en un campo en el mensaje de salida. De forma predeterminada, los archivos ESQL se despliegan como recursos individuales y se pueden editar y volver a desplegar sin volver a desplegar los flujos de mensajes que hacen referencia a los mismos. Para obtener más información, consulte Desplegar un archivo ESQL.
Codifique las sentencias ESQL que desee en un archivo ESQL asociado al flujo de mensajes en el que ha incluido esta instancia del nodo Compute. El archivo ESQL, que, de forma predeterminada tiene el nombre <nombre_flujo_mensajes>.esql, contiene ESQL para cada nodo del flujo de mensajes que lo necesite. Cada parte del código relacionada con un nodo específico se denomina módulo.
Si todavía no existe ningún archivo ESQL para este flujo de mensajes, efectúe una doble pulsación en el nodo Compute o pulse el botón derecho del ratón en el nodo y pulse en Abrir ESQL. Esta acción crea y abre un nuevo archivo ESQL en la vista del editor ESQL. Si lo prefiere, puede abrir el archivo ESQL adecuado en la Vista Desarrollo de intermediario y seleccionar este nodo en la vista Esquema.
Si el archivo ya existe, pulse Examinar al lado de la propiedad Módulo ESQL para visualizar el recuadro de diálogo Selección de módulo, que lista los módulos disponibles del nodo Compute definidos en los archivos ESQL a los que este flujo de mensajes puede acceder (pueden definirse archivos ESQL en otros proyectos dependientes). Seleccione el módulo apropiado y pulse Aceptar. Si no hay disponibles módulos apropiados, la lista está vacía.
Si el módulo que ha especificado no existe, se crea automáticamente y el editor lo muestra. Si el archivo y el módulo ya existen, el editor resalta el módulo adecuado.
Si se crea un esqueleto de módulo para este nodo en un archivo ESQL nuevo o ya existente, consta del ESQL siguiente. En este ejemplo se muestra el nombre de módulo predeterminado:
CREATE COMPUTE MODULE <nombre_flujo>_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
-- CALL CopyMessageHeaders();
-- CALL CopyEntireMessage();
RETURN TRUE;
END;
CREATE PROCEDURE CopyMessageHeaders() BEGIN
DECLARE I INTEGER 1;
DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
WHILE I < J DO
SET OutputRoot.*[I] = InputRoot.*[I];
SET I = I + 1;
END WHILE;
END;
CREATE PROCEDURE CopyEntireMessage() BEGIN
SET OutputRoot = InputRoot;
END;
END MODULE;
Si crea su propio módulo ESQL, debe crear este esqueleto exactamente tal como se muestra, a excepción de las llamadas y las definiciones de procedimiento (que se describen más adelante en esta sección). Puede cambiar el nombre predeterminado, pero asegúrese de que el nombre que especifique coincida con el nombre de la propiedad de nodo correspondiente Módulo ESQL. Si desea que el nombre del módulo incluya uno o más espacios, escriba el nombre entre comillas en la propiedad Módulo ESQL.
Añada su propio ESQL para personalizar este nodo después de la sentencia BEGIN que hay después de CREATE FUNCTION y antes de RETURN TRUE. Puede utilizar las dos llamadas incluidas en el esqueleto, a los procedimientos CopyEntireMessage y CopyMessageHeaders.
Estos procedimientos, definidos después de la función Main, proporcionan funciones comunes que es posible que desee cuando manipula mensajes. Las llamadas en el esqueleto están comentadas; elimine las marcas de comentario si desea utilizar el procedimiento. Si no desea utilizarlo, elimine del módulo la llamada y la definición del procedimiento.
La propiedad Modalidad de cálculo controla los componentes que se utilizan de forma predeterminada en el mensaje de salida. Seleccione la propiedad para indicar si se utilizan los componentes Mensaje, Entorno local (llamado anteriormente Lista de destinos) y Lista de excepciones generados dentro del nodo o contenidos en el mensaje entrante.
Este valor predeterminado se utiliza cuando el mensaje transformado se direcciona al terminal de salida una vez que se ha completado el proceso en el nodo. También se utiliza el valor predeterminado siempre que una sentencia PROPAGATE no especifica la composición del mensaje de salida.
Esos componentes que no están incluidos en la selección se pasan sin modificarse; incluso si modifica esos componentes, las actualizaciones son locales para este nodo.
Y al revés, los componentes que no se incluyen en la selección no se pasan y persisten las actualizaciones que se realizan en el nodo.
Modalidad | Descripción |
---|---|
Mensaje (valor predeterminado) | El mensaje lo genera o lo pasa el nodo Compute tal como se ha modificado dentro del nodo. El mensaje contiene el árbol OutputRoot modificado y los árboles originales InputLocalEnvironment e InputExceptionList. |
Entorno local | El nodo Compute genera o pasa la estructura en árbol del entorno local tal como se ha modificado dentro del nodo. El mensaje contiene el árbol original InputRoot, el árbol modificado OutputLocalEnvironment y el árbol original InputExceptionList. |
Entorno local y mensaje | El nodo Compute genera o pasa la estructura en árbol del entorno local y el mensaje tal como lo ha modificado el nodo. El mensaje contiene los árboles modificados OutputRoot y OutputLocalEnvironment y el árbol original InputExceptionList. |
Excepción | El nodo Compute genera o pasa la Lista de excepciones tal como la ha modificado. El mensaje contiene los árboles originales InputRoot e InputLocalEnvironment y el árbol modificado OutputExceptionList. |
Excepción y mensaje | El nodo Compute genera o pasa la Lista de excepciones y el mensaje tal como los ha modificado el nodo. El mensaje contiene el árbol modificado OutputRoot, el árbol original InputLocalEnvironment y el árbol modificado OutputExceptionList. |
Excepción y entorno local | El nodo Compute genera o pasa la lista de excepciones y la estructura en árbol del entorno local tal como las ha modificado el nodo. El mensaje contiene el árbol original InputRoot y los árboles modificados OutputLocalEnvironment y OutputExceptionList. |
Todo | El nodo Compute genera o pasa el mensaje, la Lista de excepciones y el entorno local tal como los ha modificado el nodo. El mensaje contiene los árboles modificados OutputRoot, OutputLocalEnvironment y OutputExceptionList. |
El valor de la propiedad Modalidad de cálculo especifica qué nuevos árboles de mensaje se propagan desde el nodo Compute. Por lo tanto, para esos árboles de mensaje seleccionados, los mensajes de entrada se descartan a menos que se copien explícitamente en el nuevo árbol de mensajes de salida equivalente.
Si se ha seleccionado Todo, el nodo Compute espera generar los tres nuevos árboles de mensaje para Root, LocalEnvironment y ExceptionList rellenando OutputRoot, OutputLocalEnvironment y OutputExceptionList. Los árboles de mensaje de entrada no se pasan a la salida, a menos que se copien explícitamente de la entrada a la salida.
SET OutputRoot = InputRoot;
SET OutputLocalEnvironment = InputLocalEnvironment;
SET OutputExceptionList = InputExceptionList;
Si el ESQL era
CopyEntireMessage(), LocalEnvironment
y ExceptionList no se copian ni se propagan al terminal de salida; se pierden
en ese nodo en el flujo de mensajes.Para producir un mensaje de salida nuevo o modificado y propagar los mismos LocalEnvironment y ExceptionList, establezca la propiedad Modalidad de cálculo en Mensaje para que el LocalEnvironment y ExceptionList que se pasen al nodo Compute o Mapping, se pasen desde el nodo Compute.
La Modalidad de cálculo se aplica únicamente a la propagación desde el nodo. Los tres árboles de salida se pueden crear en un nodo Compute o Mapping y se pueden manipular y existir dentro del nodo. Sin embargo, la Modalidad de cálculo determina si dichos árboles de salida se utilizan en la propagación desde el nodo.
Modalidad de cálculo | Árboles propagados |
---|---|
Todo | OutputRoot, OutputLocalEnvironment, OutputExceptionList |
Mensaje | OutputRoot, InputLocalEnvironment, InputExceptionList |
Entorno local | InputRoot, OutputLocalEnvironment, InputExceptionList |
Entorno local y mensaje | OutputRoot, OutputLocalEnvironment, InputExceptionList |
Excepción | InputRoot, InputLocalEnvironment, OutputExceptionList |
Excepción y mensaje | OutputRoot, InputLocalEnvironment, OutputExceptionList |
Excepción y entorno local | InputRoot, OutputLocalEnvironment, OutputExceptionList |
Cuando se define el nombre de un árbol de salida, ESQL crea este árbol de mensajes antes de la propagación. Si el ESQL no crea el árbol, no se propagará ningún árbol para ese nombre de correlación y el árbol de entrada no se utilizará en su lugar porque la propiedad Modalidad de cálculo no ha indicado esta opción. Por tanto, dependiendo de los valores de la propiedad Modalidad de cálculo de cálculo y del ESQL, se puede suprimir un árbol que se haya entrado al nodo porque no se ha transferido al árbol de salida, o propagar un árbol modificado, tal como deseaba.
A la inversa también se cumple. Si su ESQL interroga a los árboles de entrada y no necesita propagar estos árboles, el valor de la Modalidad de cálculo puede indicar que el árbol de mensajes se propaga cuando no es su intención que esto suceda. Por ejemplo, quizá no desee propagar LocalEnvironment y ExceptionList desde un nodo Compute, pero como seleccionó Mensaje, se propagarán las versiones de entrada de los árboles. Aunque el ESQL suprima explícitamente OutputLocalEnvironment y OutputExceptionList, esas modificaciones serán locales para el nodo debido a que el valor de la propiedad Modalidad de cálculo causa la propagación de los árboles de entrada.
El componente Entorno del árbol de mensajes no queda afectado por el valor de la propiedad Modalidad de cálculo. El contenido, si existe, se pasa desde este nodo en el mensaje de salida.
Establezca esta propiedad para que refleje el formato de mensaje de salida que requiere. Si selecciona una opción (o acepta el valor predeterminado) que no incluye una parte determinada del mensaje, esa parte del mensaje no se incluye en ningún mensaje de salida que se cree.
El nodo Compute tiene un mensaje de entrada y un mensaje de salida, por lo que puede utilizar el ESQL para hacer referencia a campos de cualquiera de los dos mensajes. También puede trabajar con InputLocalEnvironment y OutputLocalEnvironment, e InputExceptionList y OutputExceptionList, así como con los cuerpos de los mensajes de entrada y de salida.
Establezca las propiedades de validación para definir cómo debe validarse el mensaje producido por el nodo Compute. Estas propiedades no hacen que se valide el mensaje de entrada. Se espera que, si se necesita dicha validación, el nodo de entrada o un nodo de validación anterior ya habrá realizado la validación.
Para obtener más detalles, consulte Validar mensajes yPropiedades de validación.
Los terminales del nodo Compute están descritos en la siguiente tabla.
Terminal | Descripción |
---|---|
In (de entrada) | El terminal de entrada que acepta un mensaje para que lo procese el nodo. |
Failure (de anomalías) | Terminal de salida al que se direcciona el mensaje de entrada si durante el cálculo se produce una excepción no manejada. |
Out (de salida) | El terminal de salida al que se direcciona el mensaje transformado cuando se completa el proceso en el nodo. Es posible que una sentencia PROPAGATE también direccione el mensaje transformado a este terminal. |
Out1 | El primer terminal de salida alternativo al que es posible que una sentencia PROPAGATE direccione el mensaje transformado. |
Out2 | El segundo terminal de salida alternativo al que es posible que una sentencia PROPAGATE direccione el mensaje transformado. |
Out3 | El tercer terminal de salida alternativo al que es posible que una sentencia PROPAGATE direccione el mensaje transformado. |
Out4 | El cuarto terminal de salida alternativo al que es posible que una sentencia PROPAGATE direccione el mensaje transformado. |
Si desea ver la sintaxis de la sentencia PROPAGATE, consulte Sentencia PROPAGATE.
Las tablas siguientes describen las propiedades del nodo. La columna con la cabecera O indica si la propiedad es obligatoria (marcada con un asterisco si tiene que entrar un valor cuando no hay definido ningún valor predeterminado); la columna con la cabecera C indica si la propiedad es configurable (puede cambiar el valor cuando añade el flujo de mensajes al archivo BAR para desplegarlo).
Las propiedades de Descripción del nodo Compute están descritas en la siguiente tabla.
Propiedad | O | C | Valor predeterminado | Descripción |
---|---|---|---|---|
Nombre de nodo | No | No | El tipo de nodo | El nombre del nodo. |
Descripción corta | No | No | Descripción breve del nodo. | |
Descripción larga | No | No | Texto que describe el propósito del nodo en el flujo de mensajes. |
Las propiedades básicas del nodo Compute se describen en la siguiente tabla.
Propiedad | O | C | Valor predeterminado | Descripción | Propiedad de mandato mqsiapplybaroverride |
---|---|---|---|---|---|
Origen de datos | No | Sí | El nombre de origen de datos ODBC para la base de datos que contiene las tablas a las que se hace referencia en el archivo
ESQL asociado a este flujo de mensajes (identificado en la propiedad ESQL Module). Sólo se
puede especificar un origen de datos para el nodo. Si el ESQL que está asociado a este nodo incluye una sentencia PASSTHRU o una función SELECT y una referencia a base de datos, debe especificar un valor para la propiedad Origen de datos. |
dataSource | |
Transacción | Sí | No | Automática | La modalidad de transacción para el nodo. Las opciones válidas son Automática y Confirmar. La propiedad sólo es válida si se ha seleccionado una tabla de base de datos para la entrada. | |
Módulo ESQL | No | No | Compute | Nombre del módulo dentro del archivo ESQL que contiene las sentencias para ejecutar contra la base de datos y los mensajes de entrada y salida. | |
Modalidad de cálculo | Sí | No | Mensaje | Elija entre:
|
|
Tratar los avisos como errores | Sí | No | No seleccionado | Si selecciona el recuadro, los avisos SQL de base de datos se tratan como errores. | |
Generar excepción en error de base de datos | Sí | No | Seleccionado | Si selecciona este recuadro, los errores de base de datos hacen que el intermediario genere una excepción. | |
Conectarse antes de iniciar el flujo |
No |
Sí |
No seleccionado |
De forma predeterminada, el intermediario se conecta al origen de datos cuando es necesario en un flujo de mensajes. Si marca el recuadro de selección, las conexiones del origen de datos se establecerán antes de que el flujo reciba un mensaje, en lugar de hacerlo durante el proceso del flujo de mensajes. |
Propiedad | O | C | Valor predeterminado | Descripción | Propiedad de mandato mqsiapplybaroverride |
---|---|---|---|---|---|
Validar | No | Sí | Ninguna | Esta propiedad controla si tiene lugar la validación. Los valores válidos son Ninguna, Contenido y valor, Contenido y Heredar. | validateMaster |
Acción para anomalía | No | No | Excepción | Esta propiedad controla qué sucede si falla una validación. Sólo puede establecer esta propiedad si Validar se establece en Contenido o Contenido y valor. Los valores válidos son Rastreo de usuario, Anotaciones de error locales, Excepción y Lista de excepciones. |
Propiedad | O | C | Valor predeterminado | Descripción |
---|---|---|---|---|
Sucesos | No | No | Ninguno | Los sucesos que se han definido para el nodo se visualizan en este separador. De forma predeterminada, no se define ningún suceso de supervisión en ningún nodo en un flujo de mensajes. Utilice Añadir, Editar y
Suprimir para crear, cambiar o suprimir sucesos de supervisión para el nodo; consulte Configuración de orígenes de sucesos de supervisión utilizando propiedades de supervisión para obtener detalles. Puede habilitar e inhabilitar sucesos que se muestran aquí seleccionando o deseleccionando el recuadro Habilitado. |