S2Struts1.2.xから1.3.xへ移行する手順について、S2StrutsExampleの移行を通して説明します。
移行するために必要となるファイルはS2StrutsBlank V1.3.xに含まれていますので、あらかじめダウンロードしてください。
S2Struts1.3.xはS2.4で動作するため、S2.3からS2.4への移行が必要です。移行は以下の手順で行います。
- jarファイルの置き換え 以下のjarファイルを置き換えます
- s2-framework-2.4.0-rc-2-SNAPSHOT.jar
- s2-extension-2.4.0-rc-2-SNAPSHOT.jar
- diconファイルの追加 以下のdiconファイルをWEB-INF/srcへコピーします
- convention.dicon
- jdbc.dicon
- 不要なdiconファイルの削除 以下のdiconファイルをWEB-INF/srcから削除します
- j2ee.dicon(s2-extension-2.4.0-rc-2-SNAPSHOT.jarに含まれているため削除してください)
S2Struts1.3.xへの移行は以下の手順で行います。
- jarファイルの置き換え 以下のjarファイルを置き換えます
- s2-struts-1.3.0-beta-2.jar
s2-struts-1.3.0-beta-2.jarでは、MessageManagerクラスのパッケージを移動したためjarを入れ替えるとコンパイルエラーが発生します。
import文をorg.seasar.struts.MessageManagerからorg.seasar.struts.pojo.MessageManagerへ修正してください。
- s2-struts-tiger-1.3.0-beta-2.jar(Tigerアノテーションを利用している場合、置き換えてください)
- 不要なdiconファイルの削除 以下のdiconファイルをWEB-INF/srcから削除します
- s2struts.dicon(s2-struts-1.3.0-beta-2.jarに含まれているため削除してください)
- struts-config.xmlの修正
- org.seasar.struts.plugin.AutoStrutsConfigRegisterPlugInを
org.seasar.struts.lessconfig.plugin.AutoStrutsConfigRegisterPlugInに変更します。
<struts-config>
:
:
<!-- PlugInのクラス名を修正
<plug-in className="org.seasar.struts.plugin.AutoStrutsConfigRegisterPlugIn">
-->
<plug-in className="org.seasar.struts.lessconfig.plugin.AutoStrutsConfigRegisterPlugIn">
<set-property property="enableJar" value="false"/>
<set-property property="docRoot" value="/pages"/>
</plug-in>
:
:
</struts-config>
- web.xmlの修正
- S2ActionServletを利用していたところをorg.apache.struts.action.ActionServletに戻します。
S2ActionServletにはActionを自動的にS2へ登録する機能が含まれていますが、この機能は使わず、
S2.4のHOTdeploy / COOLdeploy機能を利用しActionを登録するためです。
<web-app>
:
:
<!-- Standard Action Servlet Configuration (with debugging) -->
<servlet>
<servlet-name>action</servlet-name>
<!-- S2ActionServletをActionServletに戻す
<servlet-class>org.seasar.struts.servlet.S2ActionServlet</servlet-class>
-->
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
:
:
</web-app>
- S2StrutsExampleではさらに...
- S2ActionServletで自動登録されていたAddActionをAdd.diconファイルにコンポーネント定義を追加します。
- S2Struts1.3.xよりRequestProcessorの定義が変わりました。
そのためRequestProcessor.diconがエラーになるので、コメントアウトします。
以上でS2Struts1.3.xへの移行は完了です。Tomcatを起動し動作に問題がないことを確認してください。
次からは、HOTdeploy対応するための作業です。
HOTdeploy化を行う場合は、FilterをFORWARDに適用するためServlet2.4が必要となります。
struts-config.xml、validation.xml、application.propertiesの変更をすぐに反映させるためには以下の修正が必要です。
- diconファイルの追加 以下のdiconファイルをWEB-INF/srcへコピーします
- creator.dicon
- customizer.dicon
- s2container.dicon
- app.diconの修正
- add.diconにs2struts-hotdeploy.diconを追加します。
環境によりHOTdeploy / COOLdeployの切り替えを行えるようにするために条件付includeとします。
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<include condition="#ENV != 'ut'" path="s2struts.dicon"/>
<include condition="#ENV == 'ut'" path="s2struts-hotdeploy.dicon"/>
:
:
</components>
- env.txtの追加
- 条件付includeで利用する環境名をenv.txtに書き、WEB-INF/srcへ追加します。
HOTdeployを利用するため環境名は「ut」とします。
- struts-config.xmlの修正
- org.seasar.struts.hotdeploy.plugin.HotdeployPlugInを追加します。
<struts-config>
:
:
<!-- HotdeployPlugInの追加 -->
<plug-in className="org.seasar.struts.hotdeploy.plugin.HotdeployPlugIn"/>
:
:
</struts-config>
- web.xmlへHotdeployFilterの追加
- HotdeployFilterは、REQUESTとFORWARDに適用します
(FORWARDにもFilterを適用するためServlet2.4が必要となります)。
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
:
:
<filter>
<filter-name>hotdeployfilter</filter-name>
<filter-class>org.seasar.framework.container.hotdeploy.HotdeployFilter</filter-class>
</filter>
:
:
<filter-mapping>
<filter-name>hotdeployfilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
:
:
</web-app>
これでstruts-config.xml、validation.xml、application.properties(リソースファイル)の変更が即時反映されます。
Tomcatを起動し試してください。
ソースコードを編集するたびにコンテキストのリロードが実行されてしまう場合は、
FAQ「HOT deploy時にソースコードを編集するとコンテキストのリロードが実行されてしまう」を
参照してください。
無設定S2StrutsのHOTdeploy化を行います。
S2.4が推奨するディレクトリ構成に近い
Employee機能(org.seasar.struts.examples.employeeパッケージ)のHOTdeploy化は以下の手順で行います。
- convention.diconの修正
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components>
<component class="org.seasar.framework.convention.impl.NamingConventionImpl">
<initMethod name="addRootPackageName">
<arg>"org.seasar.struts.examples.employee"</arg>
</initMethod>
</component>
</components>
- customizer.diconの修正
- Employee機能では、Action/DTO/Logic/Daoを利用しています。それぞれのCustomizerが以下のように定義します。
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<component name="defaultCustomizer"
class="org.seasar.framework.container.customizer.AspectCustomizer">
<property name="interceptorName">"aop.traceInterceptor"</property>
</component>
<component name="commandAspectCustomizer"
class="org.seasar.framework.container.customizer.AspectCustomizer">
<property name="interceptorName">"aop.traceInterceptor"</property>
<property name="pointcut">"do.*, go.*, initialize"</property>
</component>
<component name="traceThrowsAspectCustomizer"
class="org.seasar.framework.container.customizer.AspectCustomizer">
<property name="interceptorName">"aop.traceThrowsInterceptor"</property>
</component>
<component name="txAspectCustomizer"
class="org.seasar.framework.container.customizer.AspectCustomizer">
<property name="interceptorName">"j2ee.requiredTx"</property>
</component>
<component name="daoAspectCustomizer"
class="org.seasar.framework.container.customizer.AspectCustomizer">
<property name="interceptorName">"dao.interceptor"</property>
</component>
<component name="actionCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>commandAspectCustomizer</arg>
</initMethod>
</component>
<component name="daoCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>defaultCustomizer</arg>
</initMethod>
<initMethod name="addCustomizer">
<arg>daoAspectCustomizer</arg>
</initMethod>
</component>
<component name="dtoCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
</component>
<component name="dxoCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>defaultCustomizer</arg>
</initMethod>
</component>
<component name="helperCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>defaultCustomizer</arg>
</initMethod>
</component>
<component name="logicCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>defaultCustomizer</arg>
</initMethod>
<initMethod name="addCustomizer">
<arg>txAspectCustomizer</arg>
</initMethod>
</component>
<component name="pageCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>commandAspectCustomizer</arg>
</initMethod>
</component>
<component name="serviceCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>defaultCustomizer</arg>
</initMethod>
<initMethod name="addCustomizer">
<arg>txAspectCustomizer</arg>
</initMethod>
</component>
<component name="interceptorCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
</component>
<component name="validatorCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
</component>
<component name="converterCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
</component>
<component name="connectorCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
</component>
</components>
- creator.diconの修正
- Action/DTO/Logic/DaoのCreatorが以下のように定義します。
Employee機能では、DTOをActionFormとして利用しています。
DTO(ActionForm)のインスタンス管理はS2ContainerではなくStrutsが行います。
そのため、DtoOndemandCreatorのinstanceDefをREQUEST(デフォルト)からPROTOTYPEに変更します。
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<include path="convention.dicon"/>
<include path="customizer.dicon"/>
<component class="org.seasar.framework.container.creator.ActionCreator"/>
<component class="org.seasar.framework.container.creator.DaoCreator"/>
<component class="org.seasar.framework.container.creator.DtoCreator">
<property name="instanceDef">
@org.seasar.framework.container.deployer.InstanceDefFactory@PROTOTYPE
</property>
</component>
<component class="org.seasar.framework.container.creator.DxoCreator"/>
<component class="org.seasar.framework.container.creator.HelperCreator"/>
<component class="org.seasar.framework.container.creator.LogicCreator"/>
<component class="org.seasar.framework.container.creator.PageCreator"/>
<component class="org.seasar.framework.container.creator.ServiceCreator"/>
<component class="org.seasar.framework.container.creator.InterceptorCreator"/>
<component class="org.seasar.framework.container.creator.ValidatorCreator"/>
<component class="org.seasar.framework.container.creator.ConverterCreator"/>
<component class="org.seasar.framework.container.creator.ConnectorCreator"/>
</components>
- s2container.diconの修正
- hotdeploy.diconをインクルードします。
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<include condition="#ENV == 'ut'" path="hotdeploy.dicon"/>
</components>
- app.diconの修正
- employee.diconは不要となるためコメントアウトし、cooldeploy.diconをインクルードします。
convention.dicon、aop.dicon、dao.diconをインクルードします。
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<include path="convention.dicon"/>
<include path="aop.dicon"/>
<include path="dao.dicon"/>
<include condition="#ENV != 'ut'" path="s2struts.dicon"/>
<include condition="#ENV == 'ut'" path="s2struts-hotdeploy.dicon"/>
:
:
<!--
<include path="org/seasar/struts/examples/dicon/employee.dicon"/>
-->
<include condition="#ENV != 'ut'" path="cooldeploy.dicon"/>
</components>
- S2StrutsExampleではさらに...
- HttpSessionに格納するオブジェクトはシリアライズできる必要があります。
Employee機能では、ProcessModeDtoをHttpSessionに格納しているため、
ProcessModeDtoにSerializableを実装します。
- Employee機能では、S2Daoを利用しているため、
HOTdeployに対応しているS2Daoに置き換える必要があります。
s2-dao-1.0.36-SNAPSHOT.jarに置き換え、dao.diconを/WEB-INF/srcから削除します。
これでEmployee機能のHOTdeploy化は完了です。
Tomcatを起動しHOTdeployを試してください。
また、COOLdeployを試したい場合は、env.txtの内容を「it」(「ut」以外の値)等に変更後、Tomcatを起動してください。
|