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