實作 Processor 類別的 abstract 方法

您的 Java™ 程式碼必須實作 Processor 類別的子類別。 Processor 類別由 Java Integration 暫置所呼叫的方法組成。 當包括 Java 整合階段的工作啟動時,該階段會實例化您的 Processor 類別,並在 Processor 實作內呼叫邏輯。

Processor 類別提供下列方法清單,「Java 整合」階段可以呼叫這些方法,以在工作執行或設計時與您的 Java 程式碼互動。
  • getCapabilities()
  • validateConfiguration()
  • getConfigurationErrors()
  • getBeanForInput()
  • getBeanForOutput()
  • getAdditionalOutputColumns()
  • initialize()
  • process()
  • terminate()
  • getColumnMetadataForInput()
  • getColumnMetadataForOutput()
  • getUserPropertyDefinitions()
您的 Java 程式碼至少必須實作下列兩個 abstract 方法。
  • public abstract boolean validateConfiguration(Configuration configuration, boolean isRuntime) throws Exception;
  • public abstract void process() throws Exception;

下列範例顯示簡式 peek 階段實作,將記錄直欄值列印至可在 Director 用戶端中檢視的工作日誌。 它假設單一輸入鏈結。


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 Integration 暫置 (如果它們有問題)。 在前一個範例中,由於此程式碼假設某個階段具有單一輸入鏈結,因此它會檢查輸入鏈結數目並傳回false階段配置不符合此需求。
if (configuration.getInputLinkCount() != 1)
{
  // this sample code assumes stage has 1 input link.
  return false;
}
Configuration 介面定義用來取得現行暫置配置 (鏈結數目及類型) 的方法,以及使用者內容的值。 getInputLinkCount() 方法用來取得連接至此階段的輸入鏈結數目。
如果 Java 程式碼接受暫置配置,則它會儲存 InputLink 物件的參照以進行後續處理,並傳回true至 Java 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());