Processor クラスの抽象メソッドの実装 (DataStage)

Java™ コードは、 Processor クラスのサブクラスを実装する必要があります。 Processor クラスは、Java Integration ステージによって呼び出されるメソッドで構成されます。 Java Integration ステージを含むジョブが開始されると、このステージは Processor クラスをインスタンス化し、 Processor 実装内のロジックを呼び出します。

Processor クラスは、ジョブ実行時または設計時に Java コードと対話するために Java Integration ステージが呼び出すことができる以下のメソッドのリストを提供します。
  • getCapabilities()
  • validateConfiguration()
  • getConfigurationErrors()
  • getBeanForInput()
  • getBeanForOutput()
  • getAdditionalOutputColumns()
  • initialize()
  • process()
  • terminate()
  • getColumnMetadataForInput()
  • getColumnMetadataForOutput()
  • getUserPropertyDefinitions()
少なくとも、Java コードは以下の 2 つの抽象メソッドを実装する必要があります。
  • public abstract boolean validateConfiguration(Configuration configuration, boolean isRuntime) throws Exception;
  • public abstract void process() throws Exception;

以下の例は、レコード列値をジョブ・ログに印刷する単純な peek ステージの実装を示しています。これらの値は、ディレクター・クライアントで表示できます。 単一入力リンクを想定しています。


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);
  }
}
Java Integration ステージは、 validateConfiguration() メソッドを呼び出して、現在の構成 (リンクの数とタイプ)、およびユーザー・プロパティーの値を指定します。 Java コードは、指定された構成およびユーザー・プロパティーを検証し、以下を返す必要があります。false問題がある場合は、Java 統合ステージに移動します。 前の例では、このコードは、単一の入力リンクを持つステージを想定しているため、入力リンクの数を検査して戻ります。falseステージ構成がこの要件を満たしていない場合。
if (configuration.getInputLinkCount() != 1)
{
  // this sample code assumes stage has 1 input link.
  return false;
}
Configuration インターフェースは、現在のステージ構成 (リンクの数とタイプ)、およびユーザー・プロパティーの値を取得するために使用されるメソッドを定義します。 getInputLinkCount() メソッドは、このステージに接続された入力リンクの数を取得するために使用されます。
ステージ構成が Java コードによって受け入れられた場合、以降の処理のために InputLink オブジェクトへの参照が保存され、以下が返されます。trueJava Integration ステージに移動します。
m_inputLink = configuration.getInputLink(0);     
        return true;
      }

Java コードによってステージ構成が検証されたら、ジョブで接続されているステージと対話することができます。 process() メソッドは、入力リンクまたは出力リンクからのレコードを処理するためのエントリー・ポイントです。 いずれかのステージ入力リンクで行が使用可能な場合 (出力リンクの数が存在する場合)、Java Integration ステージは、ジョブが終了しない場合にこのメソッドを呼び出します。 Java コードは、ステージ入力リンクからすべての行を取り込む必要があります。

InputLink インターフェースの readRecord() メソッドを呼び出すことにより、Java コードは入力リンクから行を取り込むことができます。 これは、 InputRecord インターフェースを実装するオブジェクトを返します。 InputRecord インターフェースは、消費された行レコードから列データを取得するために使用されるメソッドを定義します。
InputRecord inputRecord = m_inputLink.readRecord();
if (inputRecord == null)
{ 
  // No more input. Your code must return from process() method.
  break;
}
Java コードがステージ入力リンクから行レコードを取り込んだ後、Java コードは InputRecord インターフェースの getValue(int columnIndex) メソッドを呼び出して、列レコード値を取得できます。 InputLinkgetColumnCount() は、この入力リンクに存在する列の数を返します。
for (int i = 0; i < m_inputLink.getColumnCount(); i++) 
{ 
  Object value = inputRecord.getValue(i);
最後に、 Logger クラスの information() メソッドを呼び出すことによって、各列の値がジョブ・ログに書き込まれます。 Logger クラスを使用すると、Java コードは、指定されたログ・レベルでジョブ・ログにデータを書き込むことができます。 以下のコードは、各列の値のストリング表記をジョブ・ログに書き込みます。
Logger.information(value.toString());