ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

DMDL テンプレートSPI

2018-12-24 00:07:46 | PG(分散処理)

Asakusa Framework Advent Calendar 2018の24日目、拙作DMDLのテンプレート機能の紹介です。

これはだいぶ昔に作った機能なのですが、AsakusaFWのSPIの機能を利用して独自のDMDL属性(@template)を作り、テンプレートにその属性の内容を埋め込むものです。
つまり、これを使ってImporter・Exporter(FromCsv, ToCsv)のソースファイルを生成することが出来ます。

DMDL EditorXにはImporter・Exporterを生成するウィザードもありますが、個人的には微妙に使いづらく、結局、既存のクラスをコピペして修正して使うことが多いです。

その点、このテンプレート機能を使う方が楽そうです。(なお、テンプレートエンジンにはFreeMarkerを使っています)

ただ、AsakusaFW0.7の頃に作った物なので依存関係が古く、build.gradleに記述する際はAsakusaFWやHadoopの依存関係をexcludeしないといけません。
この辺り、Gradleでライブラリー化(Mavenのpomを生成)するときに依存関係を除外する方法があればいいんですけどねぇ。


DMDL EditorXリファクタリング機能

2018-12-23 23:58:18 | TRPG

Asakusa Framework Advent Calendar 2018の23日目、拙作DMDL EditorXの機能の紹介です。

今年DMDL EditorXに追加した最大の機能は、Operatorのメソッド名変更やパッケージ移動(リファクタリング)に伴って、JobFlowやFlowPartで使っているクラス名やメソッド名を追随して変更する機能です。

AsakusaFWではOperatorクラスに対してOperatorFactoryといったクラスを生成し、その中でOperatorと同名のメソッドやクラスが定義されます。
したがって、通常のEclipseのリファクタリング機能でOperatorクラスのクラス名やメソッド名を変更しても、JobFlowやFlowPartで使っているのはOperatorFactoryのクラス・メソッドなので、変更されません。
DMDL EditorXでは、これを変更するようにしました。

ただしバグがあって、一度に複数クラスを変更すると上手くいきません。(複数クラスを選択してパッケージ移動するとか、複数パッケージが含まれているパッケージの名前を変えるとか)
リファクタリング前にGit等にコミットして戻せるようにすることと、リファクタリングは1クラスずつ実行するようお願いします。

(Eclipseのファイル変更機能はどうにもよくわからない仕組みなのです…)


DMDL EditorX テストクラス作成ウィザード

2018-12-23 23:53:23 | TRPG

Asakusa Framework Advent Calendar 2018の22日目、拙作DMDL EditorXの機能の紹介です。

DMDL EditorXで最もよく使う機能のひとつが、JobFlowやFlowPartのJUnit用テストクラスを作成するウィザードです。

テストクラスと共に、テストデータを記述する為のExcelファイルも生成します。
AsakusaFW公式のExcelファイル生成機能はデータモデル毎に1ファイルですが、DMDL EditorXで作られるExcelファイルは(特に指定されない限り)1ファイルで、入力・出力・検証ルールの各シートがまとめて入っています。
また、テストクラスには、そのExcelファイルを使うコードが生成されるので便利です。


DMDL EditorX Operatorの使用箇所の検索

2018-12-21 00:00:00 | PG(分散処理)

Asakusa Framework Advent Calendar 2018の21日目、拙作DMDL EditorXの機能の紹介です。

DMDL EditorXで最もよく使う機能のひとつが、Operatorのメソッドの使用箇所を検索する機能です。
通常のEclipseでもメソッドの使用箇所を検索する機能がありますが、Operatorの場合、JobFlowやFlowPartから実際に呼び出しているのはOperatorFactoryのメソッドなので、Eclipseのメソッド検索機能ではOperatorからは検索できません。

Operatorクラスのメソッドを右クリックし、「Asakusa DSL References」→「Search in src/main(Flow)」で使用箇所を検索できます。
(ちなみに「Search in src/main(Operator)」でも検索できます。こちらは本来はDMDL(のデータモデルやプロパティー)を使用しているOperatorを検索するものですが、Operatorのメソッドから検索しようとした場合はFlowを検索します。いわばお節介機能ですが、どのメニューを選ぶか考えなくていいので重宝しています(爆))

なお、たまにOperatorに定義したメソッドをFlowから呼び出し忘れることがあるので、使用されていないOperatorメソッドを抽出する機能があると便利かなーと思わなくもないのですが、実行時間が結構かかりそうなのでどうしたものかと…。