マニピュレータのランタイム・クラスの作成

ManipulatorRuntimeは、マニピュレータ・インスタンスのランタイム表現です。ManipulatorRuntimeManipulator.createManipulatorRuntime()によって作成され、マニピュレータの存続期間の間は存在します。

IAS ServerはPipelineComponentRuntimeContextクラスを作成し、Manipulator.createManipulatorRuntime()に渡します。PipelineComponentRuntimeContextは、出力チャネル、エラー・チャネル、状態ディレクトリおよび他のランタイム・プロパティを指定します。

ErrorChannel.discard()メソッドは、レコード処理から無効なレコードを破棄します。また、レコードの破棄に加え、ErrorChannelクラスはキャッチした例外を処理します。この処理では、レコード用の適切なメトリックを増分し、さらにias-service.logファイルにレコードを記録します。ErrorChannelは、レベルWARN以上のイベントを記録します。

マニピュレータのランタイム・クラスを作成する手順は次のとおりです。

  1. Manipulator実装を含むJavaプロジェクトに、ManipulatorRuntimeのサブクラスを作成します。
    たとえば、次のようになります。
    public class SubstringManipulatorRuntime extends ManipulatorRuntime {
    
    }
  2. ManipulatorRuntimeコンストラクタを実装します。
  3. オプションで、ManipulatorRuntime.checkFullAcquisitionRequired()のデフォルト実装をオーバーライドして、取得において完全取得が必要かどうかを各マニピュレータが示すようにできます。このチェックは、マニピュレータに完全取得を強制する必要のある状態ベース依存がある場合に必要になります。
    詳細は、「データソースでの増分取得のサポート」を参照してください。
  4. マニピュレータが増分取得の結果によるレコードを処理するために状態を準備する必要がある場合には、オプションでprepareForAcquisition(AcquisitionMode)のデフォルト実装をオーバーライドします。IAS Serverは、checkFullAcquisitionRequired()を実行した結果に基づいて、FULL_ACQUISITIONまたはINCREMENTAL_ACQUISITIONのいずれかの取得モードを渡します。
  5. 抽象メソッドprocessRecord()を実装して、レコードを操作する方法を定義します。実装は、実行する操作に依存します。
  6. オプションで、必要に応じてErrorChannel.discard()をコールし、無効またはエラーのあるレコードを破棄します。
  7. processRecord()によって処理された各レコードに対して、OutputChannel.output()をコールします。
    たとえば、次のようになります。
    getContext().getOutputChannel().output(record);
    マニピュレータでは、output()によってすでに出力されたレコードを変更しないでください。output()へのコール間で重要な処理をしている場合、定期的にPipelineComponentRuntimeContext.isStopped()をコールして、OutputChannel.output()の実行中に取得を停止するリクエストがあったかどうかを確認する必要がある場合があります。
  8. オプションでonInputClose()を実装して、processRecord()が最終レコードの処理を終了した後に、クリーンアップまたは後処理を実行します。
  9. オプションで、拡張機能のランタイム・オブジェクトを適切なタイミングで停止するメカニズムを提供することによって、取得を停止するリクエストを処理します。これには、PipelineComponentRuntimeContext.isStopped()をポーリングしたり、PipelineComponentRuntime.stop()をオーバーライドすることが含まれる場合があります。
    詳細は、「取得の停止時の拡張機能の停止」を参照してください。
  10. オプションで、PipelineComponentRuntime.endAcquisition()をオーバーライドして、PipelineComponentRuntimeまたはManipulatorRuntimeに使用されたリソースをクリーンアップし、状態ベース依存もクリーンアップします。

マニピュレータ・ランタイムの例

前述の手順の詳細は、<インストール・パス>\IAS\<バージョン>\sample\ias-extensions\src\main\com\endeca\ias\extension\sample\manipulator\substring\SubstringManipulatorRuntime.javaのサンプル・マニピュレータ拡張機能を参照してください。