Creación de un nodo de entrada en Java

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.

Un nodo Java definido por el usuario se distribuye como un archivo .jar. Este tema describe los pasos que necesita realizar para crear un nodo de entrada utilizando Java. Describe los pasos siguientes:
  1. Creación de un proyecto Java nuevo
  2. Declaración de la clase de nodo de entrada
  3. Definición del constructor de nodos
  4. Declaración del nombre de nodo
  5. Declaración de atributos
  6. Implementación de la funcionalidad de nodo
  7. Supresión de una instancia del nodo

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.

Creación de un proyecto Java nuevo

Puede crear nodos Java desde el área de trabajo, utilizando el entorno de desarrollo de plug-in (PDE) proporcionado. Para realizar esta tarea, deberá crear un proyecto Java nuevo, como se indica a continuación:
  1. Conmute a la Perspectiva de Desarrollo de plug-in.
  2. Pulse Archivo > Nuevo > Proyecto. Seleccione Java en el menú de la izquierda y, a continuación, seleccione Proyecto Java en el menú de la derecha.
  3. Déle un nombre al proyecto.

    Se visualiza el panel Valores Java.

  4. Seleccione el separador Bibliotecas y pulse Añadir JAR externos.
  5. Seleccione dir_instalación\classes\jplugin2.jar.
  6. Siga las solicitudes de los demás separadores para definir otros valores de creación.
  7. Pulse Finalizar.
Entonces puede desarrollar el origen del nodo Java en este proyecto.

Declaración de la clase de nodo de entrada

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
{
...
Puede realizar esta tarea en el área de trabajo como se indica a continuación:
  1. Pulse Archivo > Nuevo > Clase.
  2. Establezca los campos de nombre de paquete y clase en los valores apropiados.
  3. Suprima el texto del campo de texto de superclase y pulse el botón Examinar
  4. Seleccione MbInputNode.
  5. Pulse el botón Añadir junto al campo de texto de interfaces y seleccione MbInputNodeInterface.
  6. Pulse Finalizar.

Definición del constructor de nodos

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");
}

Declaración del nombre de nodo

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";
}
Si no se declara este método, la infraestructura de API Java crea un nombre de nodo por omisión utilizando las normas siguientes:
  • El nombre de clase se añade el nombre de paquete.
  • Los puntos se eliminan y la primera letra de cada parte del nombre de paquete y clase se escriben en mayúsculas.
Por ejemplo, por omisión se asigna a la clase siguiente el nombre de nodo "ComIbmPluginsamplesBasicInputNode":
package com.ibm.pluginsamples;
public class BasicInputNode extends MbInputNode implements MbInputNodeInterface
{
   ...

Declaración de atributos

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);
}

Implementación de la funcionalidad de nodo

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.

Alteración temporal de los atributos de analizador de mensajes por omisión (opcional)

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:

rootParserClassName
Define el nombre del analizador raíz que analiza los formatos de mensaje soportados por el nodo de entrada definido por el usuario. Toma por omisión GenericRoot, un analizador raíz proporcionado que hace que el intermediario asigne y encadene analizadores. Es improbable que un nodo necesite modificar este valor de atributo.
firstParserClassName
Define el nombre del primer analizador, de lo que puede ser una cadena de analizadores responsables de analizar la corriente de bits. Toma por omisión XML.
messageDomainProperty
Atributo opcional que define el nombre del analizador de mensajes necesario para analizar el mensaje de entrada. Los valores soportados son los mismos que los soportados por el nodo MQInput. (Consulte el apartado Nodo MQInput si desea ver más información sobre el nodo MQInput.)
messageSetProperty
Atributo opcional que define el identificador de conjunto de mensajes o el nombre de conjunto de mensajes, en el campo Conjunto de mensajes, sólo si el atributo messageDomainProperty especificaba el analizador MRM.
messageTypeProperty
Atributo opcional que define el identificador del mensaje en el campo Tipo de mensaje, sólo si el atributo messageDomainProperty especificaba el analizador MRM.
messageFormatProperty
Atributo opcional que define el formato del mensaje en el campo Formato del mensaje, sólo si el atributo messageDomainProperty especificaba el analizador MRM.

Supresión de una instancia del nodo

Se suprime una instancia del nodo cuando se realiza una de las acciones siguientes:
  • Se concluye el intermediario.
  • Se elimina el nodo o el flujo de mensajes que contiene el nodo y se vuelve a desplegar la configuración.
Durante la supresión de nodo, es posible que el nodo desee que se le informe a fin de poder realizar las operaciones de limpieza, por ejemplo cerrar los sockets. Si el nodo implementa el método onDelete opcional, el intermediario invoca este método justo antes de que se suprima el nodo.

Implemente el método onDelete como se indica a continuación:

public void onDelete()
{
  // realizar limpieza de nodo si es necesario
}
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2005 Última actualización: 11/11/2005
as09950_