PlayFramework2.4 + DBFlute + Guiceで挫折しそうですw


俺だけもしれないが
PlayFramework2.4 + DBFlute + Google Guice 4.0 がうまく動かない(´;ω;`)


PlayFramework2.3 はSpring を使ってできましたという事例とかは見ましたが、うまくいかなかった(´・ω・`)

DIの仕組みと、Injectの事がもう少し理解できれば絶対できるはずなんだよ(´・ω・`)

とりあえず調査報告をまとめる。マジで誰かアイディアをくれ(´;ω;`)

方法1:Play2.3とDBFluteでうまくいくのでバージョンアップしてみる

@Override
public <A> A getControllerInstance(Class<A> controllerClass) throws Exception {
    A controller = INJECTOR.getInstance(controllerClass);
    return controller;
}

↑このコードが2.4から使えない
これの変わりを探したが見つからなかった(´;ω;`)
調査不足かな?

方法2:GlobalSettings.javaでDI
DBFluteで書いているDIのやり方を真似してみた。

List<Module> moduleList = new ArrayList<Module>();

DataSource dataSource = DB.getDataSource();
moduleList.add(new DBFluteModule(dataSource));
Injector injector = Guice.createInjector(moduleList.toArray(new Module[]{}));

↑Bhvはnullではないが、実行時にbehaviorSelectorがnullと言われる(´;ω;`)
DIのやり方が間違っているのだろうか?

方法3:DBFluteModuleを修正
この方法が1番近かった(´・ω・`)
1,public DBFluteModule(DataSource dataSource)を削除
2,protected ImplementedInvokerAssistant createImplementedInvokerAssistant() のdataSourceをDB.getDataSource()に書き換え
3,設定ファイルにplay.modules.enabledを追加
4,GlobalSettings.javaからDBFluteのDI処理を削除

↑これで実行すると方法2のエラーは回避できるが、DataSourceがnullと言われる(´;ω;`)
DataSourceに値が入る前にDIされたのが原因。DataSourceを先に設定する必要性があるがその方法が不明(´;ω;`)

久々にDBFluteのソース追っかけたな(´・ω・`)w
けど流石にPlayFrameworkのソース追っかけるは疲れそう(´;ω;`)

Playの別のO/Rマッパーはどうやっているんだ?(;´Д`)

もう諦めて、DBFluteのフレームワークにするかな(´・ω・`)
けど、MongoDBも使いたいんだも〜ん(´;ω;`)

DBFluteがMongoDB対応してくれたら乗り換えるんだけどなww
けどMongoを使うメリットもよくわからない(ノ∀`)アチャー


1 件のコメント:

  1. 亀レスですが...

    DataSourceを先に設定するのではなくて、後からDataSourceが生成されても大丈夫なようにします。

    サンプルあるのでよければ参考に
    https://github.com/XenonAbe/dbflute-play-guice-java-example/tree/2.4.x

    返信削除