S2Struts1.2EA2突入

というわけで、S2Strutsです。
id:yuki_neko_nyanさんの[Seasarする] - 猫的怠惰Daysを参考にまずはとっかかりを、と思ってたらいきなり問題に遭遇。

今のS2Struts1.2EA2実装ってSeasar4 EA1を前提に実装されているみたいで、こないだ出たS2.3RC1だとエラーが出てしまって、一緒に動かせないのです。
S4EA1に入れ替えてみたんですが、自動登録方法が違うみたいでdiconファイルがエラーになったりしてイヤンなので、S2Struts側で対応させてしまうことにしました。

で、これ↓。

Index: S2StrutsInitializer.java
===================================================================
RCS file: /cvsroot/seasar/s2-struts/src/main/org/seasar/struts/S2StrutsInitializer.java,v
retrieving revision 1.12
diff -u -r1.12 S2StrutsInitializer.java
--- S2StrutsInitializer.java	5 Sep 2005 16:22:53 -0000	1.12
+++ S2StrutsInitializer.java	13 Oct 2005 16:34:27 -0000
@@ -12,8 +12,9 @@
 import org.apache.struts.config.ControllerConfig;
 import org.apache.struts.config.ModuleConfig;
 import org.seasar.framework.container.ComponentDef;
-import org.seasar.framework.container.ContainerConstants;
+import org.seasar.framework.container.InstanceDef;
 import org.seasar.framework.container.S2Container;
+import org.seasar.framework.container.deployer.InstanceDefFactory;
 import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
 import org.seasar.framework.container.impl.ComponentDefImpl;
 import org.seasar.framework.util.ClassUtil;
@@ -55,7 +56,7 @@
         S2Container container = SingletonS2ContainerFactory.getContainer();
         regist(container, ActionFactory.class, ActionFactoryImpl.class);
         regist(container, ComponentNameCreator.class, ComponentNameCreatorImpl.class);
-        regist(container, MessageFacade.class, MessageFacadeImpl.class, ContainerConstants.INSTANCE_REQUEST);
+        regist(container, MessageFacade.class, MessageFacadeImpl.class, InstanceDef.REQUEST_NAME);
         regist(container, AutoStrutsConfigRule.class, AutoStrutsConfigRuleImpl.class);
         regist(container, ZeroConfigActionRule.class, ZeroConfigActionRuleImpl.class);
         regist(container, ZeroConfigActionFormRule.class, ZeroConfigActionFormRuleImpl.class);
@@ -72,7 +73,7 @@
 
     private static void regist(S2Container container, Class interfaceClass, Class component, String instanceType) {
         ComponentDef cd = new ComponentDefImpl(component);
-        cd.setInstanceMode(instanceType);
+        cd.setInstanceDef(InstanceDefFactory.getInstanceDef(instanceType));
         regist(container, interfaceClass, cd);
     }
 
@@ -110,7 +111,7 @@
                 if (actionClass.isInterface() == false) {
                     ComponentDef def = new ComponentDefImpl(actionClass);
                     if (actionClass.equals(ProxyAction.class) == false) {
-                        def.setInstanceMode(ContainerConstants.INSTANCE_PROTOTYPE);
+                        def.setInstanceDef(InstanceDefFactory.PROTOTYPE);
                     }
                     regist(container, actionClass, def);
                 }
@@ -151,7 +152,7 @@
         String processorClassName = controllerConfig.getProcessorClass();
         Class processorClass = ClassUtil.forName(processorClassName);
         if (ExternalRequestProcessor.class.isAssignableFrom(processorClass)) {
-            regist(container, ExternalRequestProcessor.class, processorClass, ContainerConstants.INSTANCE_PROTOTYPE);
+            regist(container, ExternalRequestProcessor.class, processorClass, InstanceDef.PROTOTYPE_NAME);
         }
     }

クラス1つだけです。要はinstance属性のところのAPIに差異があるみたいなので3〜4箇所を修正しただけです。
で、これをAntでビルド。

〜(省略)〜
copyDocs:

BUILD FAILED
D:\Hoge\Develop\eclipse-workspace\s2-struts\build.xml:65: The following error occurred while executing this line:
D:\Hoge\Develop\eclipse-workspace\s2-struts\build.xml:83: The following error occurred while executing this line:
D:\Hoge\Develop\eclipse-workspace\s2-struts\build.xml:87: D:\Hoge\Develop\eclipse-workspace\seasar-www not found.

Total time: 48 seconds

とか言われるけど、lib配下を見たら新しいjarができてたので、エラーは無視。

早速、jarファイルを入れ替えて実行してみると…。

java.lang.NoSuchMethodError: org.apache.commons.beanutils.WrapDynaBean.getInstance()Ljava/lang/Object;
	org.seasar.struts.interceptors.ProcessPojoFormInterceptor$SerializeBeanValidatorForm.<init>(ProcessPojoFormInterceptor.java:169)
	org.seasar.struts.interceptors.ProcessPojoFormInterceptor.createPojoForm(ProcessPojoFormInterceptor.java:109)
	org.seasar.struts.interceptors.ProcessPojoFormInterceptor.processPojoForm(ProcessPojoFormInterceptor.java:70)
〜(省略)〜

どうやら、commons-beans.jarのバージョンが違う模様。
最新のcommons-beans-1.6.1.jarを入れてましたが、素直にS2Struts同梱のcommons-beans.jarと置換して再実行すると…。

無事にブラウザに「Hello」と表示されました。ふう。

本格的に触り始めるのは明日から。