ストリームデータ処理基盤 uCosminexus Stream Data Platform - Application Framework アプリケーション開発ガイド

[目次][索引][前へ][次へ]

7.4.1 データ受信APの終了契機の把握(データ処理終了の通知)

データ受信APは,Stream Data Platform - AFのコマンドでは終了できないため,データ受信APの中で終了処理を実装しておく必要があります。

ここでは,データ受信APを終了するための契機をデータ受信APで把握するための実装について説明します。ここで説明する方法は,ストリームデータ処理エンジンであらかじめ送信ストリームデータの終了契機がわかる,次のような業務に使用できます。

 

参考
データ送信APを終了させる場合,データ処理終了の通知は不要です。データ送信APについては,入力データの送信がなくなり,ストリームデータ処理エンジンへのデータ送信が完了した時点で終了させることができます。
<この項の構成>
(1) データ受信APの終了契機の把握方法
(2) データ送信APのメソッド呼び出し(putEndメソッド)によるデータ送信終了の通知
(3) sdpcqlstopコマンドの実行によるクエリグループ停止の通知

(1) データ受信APの終了契機の把握方法

データ受信APは,ストリームデータ処理エンジンでクエリが実行されている間,結果データの受信を繰り返し実行します。データ受信APを終了するためには,次の状態をデータ受信APで把握する必要があります。

データ受信AP側では,これらの状態をデータ受信API(getメソッドまたはgetAllメソッド)呼び出し時に発生する例外SDPClientEndOfStreamExceptionまたは例外SDPClientQueryGroupStopExceptionをキャッチすることで把握できます。これらの例外をキャッチしたことを契機として,データ受信APを終了させてください。

なお,これらの例外を発生させるためには,データ送信APでのメソッドの呼び出し,またはコマンドの実行によって,出力ストリームに対してデータ処理終了を通知する必要があります。

それぞれの方法での通知方法について,「(2) データ送信APのメソッド呼び出し(putEndメソッド)によるデータ送信終了の通知」および「(3) sdpcqlstopコマンドの実行によるクエリグループ停止の通知」で説明します。

(2) データ送信APのメソッド呼び出し(putEndメソッド)によるデータ送信終了の通知

データ送信APからのデータ送信が終了したときに,putEndメソッドを呼び出します。出力ストリームにクエリ結果データがなくなると,データ受信APに対して例外SDPClientEndOfStreamExceptionがスローされます。

putEndメソッドの呼び出しによってデータ送信終了を通知する流れを次の図に示します。

図7-5 データ送信APによるデータ送信終了通知の流れ

[図データ]

図で示した流れの詳細を示します。なお,項番は,図中の番号と対応しています。

  1. データ送信APでは,ストリームデータ処理エンジンに対するストリームデータの送信がすべて終了した際,putEndメソッドによって該当する入力ストリームに対して,データ送信終了を通知します。
  2. ストリームデータ処理エンジンは,クエリグループ内のすべての入力ストリームに対して送信終了が通知されると,入力ストリーム内のすべてのタプルに対してクエリを実行して,クエリ結果データを出力ストリームに出力したあとで,すべての出力ストリームに対して処理終了を通知します。
    なお,処理終了が通知されたあとでも,データ受信APは,出力ストリーム内にクエリ結果データがある間はデータを受信し続けます。データの受信には,getメソッドまたはgetAllメソッドを使用します。
  3. 出力ストリーム内のすべてのクエリ結果データの受信が完了して,出力ストリームにデータがなくなると,データ受信APでのgetメソッドまたはgetAllメソッド呼び出しに対して例外SDPClientEndOfStreamExceptionがスローされます。
    データ受信APでは,この例外を契機として,データ受信APを停止します。

なお,クエリグループ内の入力ストリームの中にputEndメソッドを呼び出していない入力ストリームがある場合,データ受信APからのgetメソッドまたはgetAllメソッド呼び出し時に例外SDPClientEndOfStreamExceptionが発生することはありません。

(3) sdpcqlstopコマンドの実行によるクエリグループ停止の通知

sdpcqlstopコマンドを実行して,クエリグループを停止します。出力ストリームにクエリ結果データがなくなると,データ受信APに対して例外SDPClientQueryGroupStopExceptionがスローされます。

sdpcqlstopコマンドによるクエリグループ停止の流れを次の図に示します。

図7-6 sdpcqlstopコマンドによるクエリグループ停止の流れ

[図データ]

図で示した流れの詳細を示します。なお,項番は,図中の番号と対応しています。

  1. sdpcqlstopコマンドによってクエリグループ停止を通知すると,ストリームデータ処理エンジンでは,入力ストリームデータの受け付けを停止します。その後,すでに入力ストリームに格納されているデータの処理を実行してから,処理を終了します。
    なお,データ受信APでは,コマンド実行後も出力ストリームにクエリ結果データがある間は,getメソッドまたはgetAllメソッドでデータを受信します。
  2. 出力ストリームにデータがなくなると,データ受信APでのgetメソッドまたはgetAllメソッドの呼び出し時に例外SDPClientQueryGroupStopExceptionがスローされます。データ受信APでは,この例外を契機として,データ受信APを停止します。