読者です 読者をやめる 読者になる 読者になる

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があるのかな?@@