Asakusa Framework : DirectIOのハマりやすいところ

f:id:teppei-studio:20131112202621j:plain

Asakusa Frameworkシリーズ、お次は演算子を離れて、DirectIOです。

これまでの記事はこちらです。

出力先フォルダはモデルにつき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で改善されました