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()
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) メソッドを呼び出して、列レコード値を取得できます。 InputLink の getColumnCount() は、この入力リンクに存在する列の数を返します。for (int i = 0; i < m_inputLink.getColumnCount(); i++)
{
Object value = inputRecord.getValue(i);最後に、
Logger クラスの information() メソッドを呼び出すことによって、各列の値がジョブ・ログに書き込まれます。 Logger クラスを使用すると、Java コードは、指定されたログ・レベルでジョブ・ログにデータを書き込むことができます。 以下のコードは、各列の値のストリング表記をジョブ・ログに書き込みます。Logger.information(value.toString());