Implementación de métodos abstractos de la clase Processor (DataStage)
El código Java™ debe implementar una subclase de la clase Processor
. La clase Processor
consta de métodos invocados por la etapa Java Integration. Cuando se inicia un trabajo que incluye la etapa Java Integration, la etapa crea una instancia de la clase Processor
y llama a la lógica dentro de las implementaciones de Processor
.
Processor
proporciona la siguiente lista de métodos a los que la etapa Java Integration puede llamar para interactuar con el código Java en el tiempo de ejecución del trabajo o en el tiempo de diseño.getCapabilities()
validateConfiguration()
getConfigurationErrors()
getBeanForInput()
getBeanForOutput()
getAdditionalOutputColumns()
initialize()
process()
terminate()
getColumnMetadataForInput()
getColumnMetadataForOutput()
getUserPropertyDefinitions()
public abstract boolean validateConfiguration(Configuration configuration, boolean isRuntime) throws Exception;
public abstract void process() throws Exception;
El siguiente ejemplo muestra la implementación de la etapa Inspeccionar simple que imprime los valores de columna de registro en el registro de trabajo, que se puede ver en el cliente de Director. Se presupone un único enlace de entrada.
package samples;
import com.ibm.is.cc.javastage.api.*;
public class SimplePeek extends Processor
{
private InputLink m_inputLink;
public boolean validateConfiguration(
Configuration configuration, boolean isRuntime)throws Exception
{
if (configuration.getInputLinkCount() != 1)
{
// this sample code assumes stage has 1 input link.
return false;
}
m_inputLink = configuration.getInputLink(0);
return true;
}
public void process() throws Exception
{
do
{
InputRecord inputRecord = m_inputLink.readRecord();
if (inputRecord == null)
{
// No more input. Your code must return from process() method.
break;
}
for (int i = 0; i < m_inputLink.getColumnCount(); i++)
{
Object value = inputRecord.getValue(i);
Logger.information(value.toString());
}
}
while (true);
}
}
validateConfiguration()
para especificar la configuración actual (número y tipos de enlaces) y los valores para las propiedades de usuario. El código Java debe validar una configuración determinada y las propiedades de usuario y devolverfalsea la etapa Java Integration si hay problemas con ellos. En el ejemplo anterior, puesto que este código presupone una etapa que tiene un único enlace de entrada, comprueba el número de enlaces de entrada y devuelvefalsesi la configuración de la etapa no cumple este requisito.if (configuration.getInputLinkCount() != 1)
{
// this sample code assumes stage has 1 input link.
return false;
}
La interfaz Configuration
define los métodos que se utilizan para obtener la configuración de la etapa actual (número y tipos de enlaces) y los valores de las propiedades de usuario. El método getInputLinkCount()
se utiliza para obtener el número de enlaces de entrada conectados a esta etapa.InputLink
para su posterior proceso y devuelvetruea la etapa Java Integration.m_inputLink = configuration.getInputLink(0);
return true;
}
Después de que el código Java verifique la configuración de la etapa, puede interactuar con las etapas conectadas en el trabajo. El método process()
es un punto de entrada para procesar registros del enlace de entrada o del enlace de salida. Cuando una fila está disponible en cualquiera de los enlaces de entrada de la etapa (si existe y sea cual sea el número de enlaces de salida), la etapa Java Integration llama a este método, si el trabajo no finaliza. El código Java debe consumir todas las filas de los enlaces de entrada de etapa.
readRecord()
de la interfaz InputLink
, el código Java puede consumir una fila del enlace de entrada. Devuelve un objeto que implementa la interfaz de InputRecord
. La interfaz de InputRecord
define los métodos que se utilizan para obtener datos de columna de un registro de fila consumido.InputRecord inputRecord = m_inputLink.readRecord();
if (inputRecord == null)
{
// No more input. Your code must return from process() method.
break;
}
getValue(int columnIndex)
de la interfaz InputRecord
. getColumnCount()
en InputLink
devuelve el número de columnas que existen en este enlace de entrada.for (int i = 0; i < m_inputLink.getColumnCount(); i++)
{
Object value = inputRecord.getValue(i);
information()
de la clase Logger
. La clase Logger
permite que el código Java escriba los datos en el registro de trabajo con los niveles de registro especificados. El siguiente código escribe la representación de serie de cada valor de columna en un registro de trabajo.Logger.information(value.toString());