T2FrameworkとCubbyのGuiceサポートはModuleの生成までやらないほうがよい

いろいろと実際にいじっていて思ったこと。


T2FrameworkCubbyはアダプタがGuiceのModuleの生成をしている。ということはおそらくデフォルトコンストラクタしか対応していないはず。

また、デフォルトコンストラクタのみということは各種サーバー情報もパラメータとして渡すことはできないはず。通常Moduleの組み立てにはweb.xmlの設定内容を読み込んだりするのが必要になるのだが、それに触ることが出来ない。ServletContextとかよく使う機能のはずだが、これが参照できないのはかなり厳しい。



Guiceには「GuiceServletContextListener」というものがある。ここで設定しておけばInjectorがアプリケーションスコープで取得が出来るようになる。

キーは「com.google.inject.Injector」。つまり「Injector.class.getName()」だ。


つまり、Springのサポートと同じ方法でよいということ。このタイミングならリスナーで作成するためにServletContextとか設定に必要なものもいろいろと渡すことが出来る。また、終了時にリソースの開放をするタイミングも対になっていてわかりやすい。

T2/Cubbyともに独自にModuleを作成してInjectorをコンテナ内部で保持するのではなく、ここを使うようにしてくれると他のアプリとの親和性もあっていいと思う。

容易にModuleのカスタマイズができないってのはやっぱりつらいから。SpringのサポートにはWebApplicationContextUtilsを使っているはずだから(T2は独自だったかも)そこをまねするだけでよいかと。