SingletonS2ContainerFactory#init()
はまりましたorz
WEBアプリと同じプロジェクト内で、バッチ用のクラスを作成して、たたくと例外で落ちてたんですが・・・
S2ContainerServletで初期化される場合はSingletonS2ContainerInitializerってクラスが初期化してたんですね。。。
で、その中でComponentDeployerFactory#setProviderでExternalComponentDeployerProviderなるものが。
こいつにやられた!
mainメソッドから単純にSingletonS2ContainerFactory#init()を呼ぶと、もちろん上記のような設定はないわけで・・・ComponentDeployer.DefaultProviderがセットされています。
で、こいつはWEB用のスコープ?(Application,Session,Request)をサポートしてないと。。。納得。
でも、WEBアプリがあった上で、同一のプロジェクト内に掘り込んでるので、customizerなど設定は一緒。ってことで、もちろんscopeがrequestやらのComponentも多数あるわねと。。。
とりあえず回避としては、SingletonS2ContainerFacotory#init()を呼ぶ前にComponentDeployFactory#setProviderでExternalComponentDeployerProviderを突っ込んで回避。
でも、なんかすっきりしないんだよなぁ。。。。いい方法があればご教授願いますm(_ _)m
[追記]
コメントにてid:higayasuoさんがWarmDeployでということで、試してみました。が!
includeされてるものって先に登録しちゃうんですね。
ってことで、app.diconにs2struts.diconがincludeされていることが原因でUnsupportedOperationExceptionが投げられてしまいましたorz
やり方がまずいのかな?もしくは認識違い?・・・であってほしいです^^;
[さらに追記]
S2StrutsのlessConfigrationにおけるAutoRegisterがWarmDeployに対応してないだけ?HotDeployはあったと思うけどこっちもwarmがあるのかな?@@