S2.3RC1を試す

 S2.3RC1がリリースされたので早速見てみる。「規約を守れば開発が楽になる」という思想が素晴らしいです。ぜひ使いたい。

 FileSystemComponentAutoRegisterを使うとコンポーネントの自動登録が可能ということですが、instanceモードを指定したい場合はどうすればよいのかが分かっていません。S2JSFを使う場合、Example(Employee Management)に従うとActionはrequest、Dtoはrequest/sessionと使い分けることになります。また、HTMLにバインドするためにコンポーネントのnameも設定する必要があります。

ComponentDefのinstancModeプロパティを廃止して、instanceDefプロパティにしました。

 このあたりに関連がありそうですが、まだ分かっていません。LogicやDaoにAutoRegisterを使い、Action、Dtoはdicon定義なのだろうか。


 おっ、アノテーションがありましたね。


 ActionやDtoにComponentアノテーションを利用して、nameとinstanceを指定することで解決しました。注意としては、現状はs2-jsf-1.0.8.jarだとS2.3RC1の変更に対応していないので、S2.3RC1.jarを使って、一部ソースを修正してビルドしなおさないとダメなようです。また、diconファイルにコンポーネントの定義がなくなるので、S2JSFプラグインではバインディングしているHTMLがエラーになります。

 ちなみに作ったdiconは以下の通り。

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.3//EN"
   "http://www.seasar.org/dtd/components23.dtd">
 <components>
   <include path="test/dicon/allaop.dicon"/>
 
   <component
     class="org.seasar.framework.container.autoregister
.FileSystemComponentAutoRegister">
     <property name="fileNameOfRoot">"app.dicon"</property>
     <property name="autoNaming">
       <component class="org.seasar.framework.container.autoregister
.DefaultAutoNaming"/>
     </property>
     <initMethod name="addClassPattern">
       <arg>"test.dto"</arg>
       <arg>".*Dto"</arg>
     </initMethod>
     <initMethod name="addClassPattern">
       <arg>"test.action.impl"</arg>
       <arg>".*Impl"</arg>
     </initMethod>
     <initMethod name="addClassPattern">
       <arg>"test.logic.impl"</arg>
       <arg>".*Impl"</arg>
     </initMethod>
     <initMethod name="addClassPattern">
       <arg>"test.dao"</arg>
       <arg>".*Dao"</arg>
     </initMethod>
     <initMethod name="registAll"/>
   </component>
 
   <component name="actionInterceptorChainRegister"
     class="org.seasar.framework.container.autoregister
.AspectAutoRegister">
     <property name="interceptor">actionInterceptorChain</property>
     <initMethod name="addClassPattern">
       <arg>"test.action.impl"</arg>
       <arg>".*Impl"</arg>
     </initMethod>
     <initMethod name="registAll"/>
   </component>
 
   <component name="logicInterceptorChainRegister"
     class="org.seasar.framework.container.autoregister
.AspectAutoRegister">
     <property name="interceptor">logicInterceptorChain</property>
     <initMethod name="addClassPattern">
       <arg>"test.logic.impl"</arg>
       <arg>".*Impl"</arg>
     </initMethod>
     <initMethod name="registAll"/>
   </component>
 
   <component name="daoInterceptorChainRegister"
     class="org.seasar.framework.container.autoregister
.AspectAutoRegister">
     <property name="interceptor">daoInterceptorChain</property>
     <initMethod name="addClassPattern">
       <arg>"test.dao"</arg>
       <arg>".*Dao"</arg>
     </initMethod>
     <initMethod name="registAll"/>
   </component>
 
 </components>