16. フロー部品のコンパイル¶
このチュートリアルでは、バッチアプリケーションのデータフローを定義する フロー部品 を作成する方法を説明していきます。
フロー部品の作成 の続きで、ここではフロー部品のコンパイルと演算子ファクトリについて説明します。
16.1. フロー部品のコンパイル¶
フロー部品のコンパイルには、次の2つの意味があります。
- 演算子としてのコンパイル
- データフローとしてのコンパイル
16.1.1. 演算子としてのコンパイル¶
演算子としてのコンパイルは、Operator DSLコンパイラによってデータフローを構築するためのオブジェクトを生成することを表します。
先のチュートリアルで、データフローは演算子として利用可能であることを説明しました。 フロー部品から生成される演算子を フロー演算子 と呼びます。
フロー部品は 演算子のコンパイル で説明した仕組みと同様に、 フロー部品クラスのコンパイルの際にはOperator DSLコンパイラが実行され、Flow DSLで利用するためのクラスを生成します。
演算子をOperator DSLでコンパイルする際には「演算子実装クラス」「演算子ファクトリクラス」の2つを生成していましたが、 フロー部品には演算子実装クラスは不要(フロー部品クラスは具象クラスで宣言する)であるため、フロー部品用の演算子ファクトリクラスのみを生成します。
この演算子ファクトリクラスは演算子の場合と同様に、プロジェクトのソースフォルダ build/generated-sources/annotations
に配置されます。
このフォルダ配下のソースファイルはフロー部品がコンパイルされる都度更新されるため、直接編集しないよう注意してください。
16.2. 演算子ファクトリクラス¶
演算子の場合と同様に、演算子ファクトリはもとの演算子クラスと同じJavaパッケージ配下に、クラス名の末尾に Factory
をつけた名前で生成されます。
フロー部品クラス CategorySummaryFlowPart
に対応する演算子ファクトリは CategorySummaryFlowPartFactory
となります。
16.2.1. 演算子オブジェクトクラス¶
フロー部品の演算子オブジェクトクラスも演算子の場合と同様に、演算子ファクトリの内部クラスとして宣言されます。 生成される演算子オブジェクトクラスはフロー部品クラス対応する フロー演算子 を表す演算子オブジェクトクラス1つのみで、 これはフロー部品クラスと同じ名前のクラス名で生成されます。
フロー部品用の演算子オブジェクトクラスは、フロー部品の定義内容に対応した演算子の 出力ポート をフィールドとして保持します。 出力ポート名は、フロー部品コンストラクタの仮引数に定義した出力オブジェクト名と同じ名前で生成されます。
例えば、フロー部品クラス CategorySummaryFlowPart
からは、 CategorySummaryFlowPartFactory
の内部クラスとして以下の演算子オブジェクトクラスが生成されます。
クラス名 [1] | ポート | 演算子の種類 |
---|---|---|
CategorySummaryFlowPart |
categorySummary , errorRecord |
フロー演算子 |
[1] | 演算子ファクトリクラス CategorySummaryFlowPartFactory が内部クラスとしてもつ演算子オブジェクトクラス名 |
16.2.2. 演算子ファクトリメソッド¶
上記の 演算子オブジェクトクラス を生成するファクトリメソッドです。
これも演算子オブジェクトクラスも演算子の場合と同様に、演算子ファクトリのメンバーとして宣言されます。
生成される演算子ファクトリメソッドは常に create
というメソッド名を持ち、これはフロー部品に対応するフロー演算子の演算子オブジェクトクラスを返します。
フロー部品用の演算子ファクトリメソッドも演算子の場合と同様に、フロー演算子への入力となるポートを引数にとります。 この引数はフロー部品コンストラクタの仮引数に定義した入力オブジェクトの定義に基づいて生成されます。
戻り値型は、フロー演算子に対応する演算子オブジェクトクラス型です。
例えば、演算子クラス CategorySummaryFlowPart
からは、 CategorySummaryFlowPartFactory
に対して以下の演算子ファクトリメソッドが生成されます。
メソッド名 | 引数 | 戻り値型 | 演算子の種類 |
---|---|---|---|
create |
|
CategorySummaryFlowPart |
フロー演算子 |