ふたつの川うるおう日記
2006-08-21 (Mon)
_ [Java][Seasar] COOL deploy時のサブアプリケーションのコンポーネント名がまずいかも (解決)
[追記] これはS2StrutsQualifiedの問題でした。パッチ不要です。。
trunk/s2struts-example で org.seasar.struts.examples.employee.action.util.EmployeeSearchInit2Action があったとして、HOT deploy時とCOOL deploy時で動作するs2strutsのinitタグのアクションクラスのコンポーネント名が異なってしまうようです。
- HOT deploy: <s2struts:init action="#{util_employeeSearchInit2Action.initialize}" />
- COOL deploy: <s2struts:init action="#{employeeSearchInit2Action.initialize}" />
サブアプリケーションなので期待するのはHOT deploy時のコンポーネント名です。COOL deploy時でもHOT deployと同じコンポーネント名になってくれないとenv.txtで切り替えた時に動かないのでまずそうです。というわけで、S2Container(s2-framework-2.4.0-rc-1)のソースを見てみたら次のパッチを当てればとりあえず良いみたいです。
- 適当なパッチ
- コンポーネント名を必ずnamingConventionを使って決める
- ConstantAnnotationHandlerにnamingConvention持たせても良いのかも
- コンポーネント名を必ずnamingConventionを使って決める
Index: E:/Java/Eclipse/Workspace/Seasar/seasar2/s2-framework/src/main/java/org/seasar/framework/container/cooldeploy/creator/AbstractCoolCreator.java
===================================================================
--- E:/Java/Eclipse/Workspace/Seasar/seasar2/s2-framework/src/main/java/org/seasar/framework/container/cooldeploy/creator/AbstractCoolCreator.java (revision 1191)
+++ E:/Java/Eclipse/Workspace/Seasar/seasar2/s2-framework/src/main/java/org/seasar/framework/container/cooldeploy/creator/AbstractCoolCreator.java (working copy)
@@ -119,9 +119,7 @@
.getAnnotationHandler();
ComponentDef cd = handler.createComponentDef(targetClass, instanceDef,
autoBindingDef, externalBinding);
- if (cd.getComponentName() == null) {
- cd.setComponentName(composeComponentName(clazz.getName()));
- }
+ cd.setComponentName(composeComponentName(clazz.getName()));
handler.appendDI(cd);
handler.appendAspect(cd);
handler.appendInitMethod(cd);
でも、teeda-html-exampleはCOOL deployにしてもちゃんと動いてるので、これはS2Struts側でどうにかすべきものなのかな??
_ [Java][Seasar] S2StrutsQualified 0.7 beta 1 + COOL deploy
見事にCOOL deploy時に動かないわけだが(;´Д`)。試してなかった。。
_ [Java][Seasar] S2StrutsQualified 0.7 beta 2
というわけで、beta 2です。HOT/COOL deploy両方に対応し、サンプルアプリで同じソースで動くことを確認しました。
なお、一応QualifiedZeroConfigActionRuleImplを入れておきましたが、ZeroConfigActionRuleImplをs2struts.diconに設定した状態でも動いたので必要ないかもしれない。
また、S2Container 2.4のCoolComponentAutoRegisterとOndemandBehaviorに複数パッケージルートを設定出来る(素晴らしい!)ので、以前の怪しい正規表現っぽく書くpackageRuleは廃止しました。QualifiedRuleクラスでちょっと強引にCoolComponentAutoRegisterとOndemandBehaviorからパッケージルートを全部取得して処理します。これまたOndemandBehaviorは見る必要ないかもしれない。これも判らないのでとりあえず入れときました。
残るはJoSQLの問題。でも、この問題はどう対策すれば良いのかさっぱり思いつかない。。
ちなみに、HOT/COOL deploy対応したので、試してみたところJoSQL使っていてもCOOL deploy時はちゃんと動きました。HOT deploy時のみエラーが出るみたいです。


