取得が停止した際、取得内の拡張機能が停止するには時間がかかる場合があります。したがって、より適切なタイミングで拡張機能のランタイム・オブジェクトを停止するメカニズムを用意することをお薦めします(ランタイム・オブジェクトはDataSourceRuntimeまたはManipulatorRuntimeです)。
IAS Serverにより取得を停止させるリクエストと条件がいくつかあります。
- IASのデータ開発者は、IAS Serverコマンドライン・ユーティリティ(ias-cmd)のstopCrawlタスクを実行することで停止をリクエストします。
- IASのデータ開発者は、IAS Server APIのstopCrawlメソッドをコールすることで停止をリクエストします。
- 取得処理またはレコード操作処理の間に致命的なエラーがあったために、取得が中断する場合があります。
取得が停止した際、IAS拡張APIにおいて次のような効果があります。
- PipelineComponentRuntimeContext.isStopped()へのコールにtrueが返されます。
- OutputChannel.output()へのコールでPipelineStoppedException例外がスローされます。
- ErrorChannel.discard()へのコールでPipelineStoppedException例外がスローされます。
- IAS Serverは、取得においてのすべてのデータソース拡張機能およびマニピュレータ拡張機能でPipelineComponentRuntime.stop()をコールします。
より適切なタイミングで拡張機能のランタイムを停止するメカニズムがいくつかあります。
- PipelineComponentRuntimeContext.isStopped()メソッドをポーリングし、trueが返された場合、PipelineStoppedExceptionをスローし、例外をシステム全体に伝播させます。Integrator Acquisition Systemに用意されたCSVデータソース拡張機能に、isStopped()を実装するコード例があります。
- ポーリングに加えて、拡張機能においてPipelineComponentRuntime.stop()をオーバーライドできます。stop()の実装では、たとえばペンディングのネットワーク・リクエストの終了や、出力リクエストの取消しなど、拡張機能をよりすばやく停止するのに役立つタスクを実行する必要があります。このアプローチは、拡張機能がOutputChannel.output()へのコール間で時間のかかる作業をしている状況のときに特に役立ちます。