Asakusa Framework : DirectIOのハマりやすいところ
Asakusa Frameworkシリーズ、お次は演算子を離れて、DirectIOです。
これまでの記事はこちらです。
- Asakusa Frameworkのススメ - TEPPEI STUDIO
- Asakusa Framework : はじめの一歩 - TEPPEI STUDIO
- Asakusa Framework : DMDLのハマりやすいところ - TEPPEI STUDIO
- Asakusa Framework : MasterJoinのハマりやすいところ - TEPPEI STUDIO
- Asakusa Framework : GroupSortのハマりやすいところ - TEPPEI STUDIO
出力先フォルダはモデルにつき1つ
ironpeace/Asakusa-MasterJoinSample · GitHubを題材に説明したいと思います。
MainJobFlowの出力として、SalesDetail2とErrorRecordのふたつのモデルをアウトプットしています。
final Out<SalesDetail2> salesDetail2; final Out<ErrorRecord> errorRecord;
SalesDetail2は、mjs-outディレクトリにアウトプットするようにしています。
package teppeistudio.jobflow; import teppeistudio.modelgen.dmdl.csv.AbstractSalesDetail2CsvOutputDescription; public class SalesDetail2ToCsv extends AbstractSalesDetail2CsvOutputDescription { @Override public String getBasePath() { return "mjs-out"; } @Override public String getResourcePattern() { return "sales-detail2.csv"; } }
ErrorRecordは、mjs-errorディレクトリに出力するようにしています。
package teppeistudio.jobflow; import teppeistudio.modelgen.dmdl.csv.AbstractErrorRecordCsvOutputDescription; public class ErrorRecordToCsv extends AbstractErrorRecordCsvOutputDescription { @Override public String getBasePath() { return "mjs-error"; } @Override public String getResourcePattern() { return "error-record.csv"; } }
これを、ErrorRecordもmjs-outディレクトリに出力するように変えてみます。
このように。
package teppeistudio.jobflow; import teppeistudio.modelgen.dmdl.csv.AbstractErrorRecordCsvOutputDescription; public class ErrorRecordToCsv extends AbstractErrorRecordCsvOutputDescription { @Override public String getBasePath() { return "mjs-out"; } @Override public String getResourcePattern() { return "error-record.csv"; } }
すると、ビルド時にエラーになります。
[java] 20:15:16 [main] INFO c.a.c.f.external.ExternalIoAnalyzer - teppeistudio.jobflow.MainJobFlowの入出力を検証しています [java] 20:15:16 [main] ERROR c.a.c.flow.FlowCompilingEnvironment - 出力が別の出力を上書きします (teppeistudio.jobflow.ErrorRecordToCsv->teppeistudio.jobflow.SalesDetail2ToCsv) [java] 20:15:16 [main] ERROR c.a.c.bootstrap.BatchCompilerDriver - コンパイルはエラーにより中断しました (teppeistudio.batch.MainBatch) [java] java.io.IOException: フローの入出力が正しくないため、コンパイルを中止します (出力が別の出力を上書きします (teppeistudio.jobflow.ErrorRecordToCsv->teppeistudio.jobflow.SalesDetail2ToCsv))
なんのこっちゃ分からず、結構混乱しました。出力先ディレクトリが重複しているのが原因です。出力先ディレクトリは、ひとつのモデルにつき、ひとつにしましょう。
【2014/1/4 追記】
0.5.3で改善されました