Antes de empezar
WebSphere Message Broker proporciona el origen de dos nodos de ejemplo definidos por el usuario denominados SwitchNode y TransformNode. Puede utilizar estos nodos en su estado actual o puede modificarlos.
No desarrolle en z/OS nodos Java que piense desplegar en un intermediario de una plataforma distribuida, porque es posible que el nivel de Java en z/OS no produzca código compatible con el nivel de Java en la plataforma distribuida.
Se visualiza el panel Valores Java.
Cualquier clase que implemente MbInputNodeInterface y esté contenida en la vía de acceso de clase (o vía de acceso de LIL) del intermediario se registra en el intermediario como un nodo de entrada. Cuando implemente MbInputNodeInterface, también necesitará implementar un método run para esta clase. El método run representa el inicio del flujo de mensajes, contiene los datos que formulan el mensaje y los propaga por el flujo. El intermediario invoca el método run cuando quedan hebras disponibles de acuerdo con el modelo de trabajo de hebras especificado.
Por ejemplo, para declarar la clase de nodo de entrada:
package com.ibm.jplugins; import com.ibm.broker.plugin.*; public class BasicInputNode extends MbInputNode implements MbInputNodeInterface { ...
Cuando se crea una instancia del nodo, se invoca el constructor de la clase de nodo del usuario. Aquí es donde creará los terminales del nodo e inicializará los valores por omisión para los atributos.
Un nodo de entrada tiene asociados varios terminales de salida pero normalmente no tiene ningún terminal de entrada. Utilice el método createOutputTerminal para añadir terminales de salida a un nodo cuando se crea una instancia del nodo. Por ejemplo, para crear un nodo con tres terminales de salida:
public BasicInputNode() throws MbException { createOutputTerminal ("out"); createOutputTerminal ("failure"); createOutputTerminal ("catch"); setAttribute ("firstParserClassName","myParser"); attributeVariable = new String ("none"); }
Necesita declarar el nombre del nodo tal como lo identificará el área de trabajo. Todos los nombres de nodo deben terminar por "Node". Declare el nombre utilizando el método siguiente:
public static String getNodeName() { return "BasicInputNode"; }
package com.ibm.pluginsamples; public class BasicInputNode extends MbInputNode implements MbInputNodeInterface { ...
Declare los atributos de nodo del mismo modo que las propiedades de bean Java. Es responsable de escribir los métodos getter y setter para los atributos y la infraestructura de API deducirá los nombres de atributo utilizando las normas de introspección de bean Java. Por ejemplo, si declara los dos métodos siguientes:
private String attributeVariable; public String getFirstAttribute() { return attributeVariable; } publc void setFirstAttribute(String value) { attributeVariable = value; }
El intermediario deduce que este nodo tiene un atributo denominado firstAttribute. Este nombre se deriva de los nombres de los métodos get o set, no de los nombres de variables de miembros de clase internos. Dado que los atributos sólo se puede exponer como series de caracteres, los tipos numéricos se deben convertir a las series de caracteres o de las series de caracteres en los métodos get o set. Por ejemplo, el método siguiente define un atributo denominado timeInSeconds:
int seconds; public String getTimeInSeconds() { return Integer.toString(seconds); } public void setTimeInSeconds(String value) { seconds = Integer.parseInt(value); }
Como ya se ha descrito, el intermediario invoca el método run para crear el mensaje de entrada. Este método debe proporcionar la función de proceso completa para el nodo de entrada.
Normalmente una implementación de nodo de entrada determina qué analizador de mensajes analiza inicialmente un mensaje de entrada. Por ejemplo, el nodo MQInput primitivo indica que se necesita un analizador MQMD para analizar la cabecera MQMD. Un nodo de entrada definido por el usuario puede seleccionar un analizador de mensajes o cabeceras apropiado y la modalidad en la que se controla el análisis, utilizando los atributos siguiente que se incluyen como valores por omisión y que se pueden alterar temporalmente:
Implemente el método onDelete como se indica a continuación:
public void onDelete() { // realizar limpieza de nodo si es necesario }