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>