2011-05-16

Morphia Feasibility Study, part 5 - Spring configuration - TypeConverter supplement

Morphia の DAO を Spring コンテナで生成する場合に、TypeConverter をどう設定するか? 一つの方法を示す。


ドメインオブジェクト
part 3 のときとほぼ同じクラスを使う。ただし、MongoDB のコレクション名は違うものにする。



AccountType については、part 2 に示したものと同様の TypeConverter を使ってその値を小文字で保存する。



TypeConverter の設定方法
さて、part 2 で示したように、Morphia.getMapper().getConverters() で取得した DefaultConverters オブジェクトに対して addConverter( TypeConverter ) メソッドを呼ばなければならない。しかし、DefaultConverters はセッターインジェクションもコンストラクタインジェクションもできない。

そこで、Morphia インスタンスを生成するファクトリクラスを作る。そのファクトリメソッドに TypeConverter を渡し、生成した Morphia インスタンスに addConverter して返す。


Spring の XML による設定は以下のとおり。

morphia2 はファクトリ Morphiafactory の2番目の create メソッドで生成される。さらに、morphia2 がファクトリとなって Datastore インスタンスを生成する。

AccountDAO と PersonDAO はパッケージ名以外 part 3 と同じ。


アプリケーションコード
DAO オブジェクトを生成し、エンティティを操作するコードは以下のとおり。上の XML がクラスパス上の app-context-2.xml ファイルに保存されているとする。