[Seasar-user:5438] Re: S2Struts hot deploy 時に定数アノテーションのみ反映されない追伸

Katsuhiko Nagashima [E-MAIL ADDRESS DELETED]
2006年 12月 13日 (水) 00:32:33 JST


永島です。

返信が遅くなり申し訳ありません。

S2Strutsで以下の点を修正しコミットしました。
・Actionクラスがサブアプリ配下にある場合に
 "/"(スラッシュ)をセパレータに利用することも可能とするようにしました。
 例えば、root.web.manage.EmployeeActionの場合、
 今までは/manage_employeeの形式のみでしたが、
 今回の修正により/manage/employeeの形式にも対応しました。
 利用する場合は、s2struts.diconのactionPathNamingRuleを以下のように変更し、
----
	<!--
	<component name="actionPathNamingRule"
class="org.seasar.struts.lessconfig.config.rule.impl.DefaultActionPathNamingRule"/>
	-->
	<component name="actionPathNamingRule"
class="org.seasar.struts.lessconfig.config.rule.impl.QualifiedActionPathNamingRule"/>
----
 convention.diconのviewExtension、viewRootPathプロパティを
 空に設定して下さい。
----
	<component class="org.seasar.framework.convention.impl.NamingConventionImpl">
		<initMethod name="addRootPackageName">
			<arg>"root"</arg>
		</initMethod>
		<property name="viewExtension">""</property>
		<property name="viewRootPath">""</property>
	</component>
----
・ActionFormがサブアプリ配下にある場合でも
 パッケージ部分を含めないコンポーネント名でBindできるように修正しました。


以降に修正していただきたい点について記述します。

・パッケージ構成について
S2StrutsではアノテーションをHOT deployで動作させるために
S2ContainerからActionクラスやDtoクラスを取得していますので、
S2のSMART deployのパッケージ構成に従う必要があります。
以下の変更をして頂けないでしょうか。

ルート.pc.login.action.XXXXLoginAction.java の場合、
convention.diconでpcパッケージをwebパッケージにリネームするか、
以下のようにsubApplicationRootPackageNameとして設定して下さい。
-----
	<component class="org.seasar.framework.convention.impl.NamingConventionImpl">
		<initMethod name="addRootPackageName">
			<arg>"root"</arg>
		</initMethod>
		<property name="subApplicationRootPackageName">"pc"</property>
	</component>
-----
また、loginサブアプリケーション下にactionやdtoなどの
個別パッケージを定義することはできないようですので、
actionやdtoのパッケージをはずして
ルート.web.login.XXXXLoginAction.java
ルート.web.login.LoginDto.java
のような構成にして下さい。

SMART deployを行うためのパッケージ構成につきましては
http://s2container.seasar.org/ja/S2.4SmartDeploy.html
に詳細がのっていますので、参考にして下さい。


・ACTIONアノテーションについて
ACTIONアノテーションのpath名を指定した場合、
HOT deployでConfig情報を読み込むことができなくなりますので、
無設定でpathを設定するようにして下さい。
(これはS2Strutsの制限です)。
今回の修正で"/"(スラッシュ)形式のpathにも対応しましたので
"ルート.web.login.XXXXLoginAction.java"に対して無設定とした場合、
pathは"/login/XXXLogin"となります。


以下にパッケージ構成とアノテーションのサンプルをアップしましたので、
こちらも参考にしていただければと思います。
https://www.seasar.org/svn/s2struts/tags/temp/2006-12-12/S2StrutsExampleEmployee-V1.3.0-beta-3-SNAPSHOT.zip

以上です。

06/12/05 に 原田<[E-MAIL ADDRESS DELETED]> さんは書きました:
> 原田です。
>
> ルート.pc.login.action.XXXXLoginAction.java
> ルート.pc.login.action.XXXXLoginPostAction.java
> ルート.pc.login.action.impl.XXXXLoginActionImpl.java
> ルート.pc.login.dto.LoginDto.java
>
> で、
>
> public interface XXXXLoginAction {
>         public static final String ACTION = "path=/login/login, validate=false";
>         public static final String SUCCESS_FORWARD = "path=/pages/login/XXXXLogin.html";
>     String SUCCESS = "success";
>
>     String initialize();
> }
>
> public interface XXXXLoginPostAction {
>         public static final String ACTION = "name=loginDto,path=/login/loginPost, validate=true,input=/pages/login/XXXXLogin.html";
>
>         public static final String SUCCESS_FORWARD = "path=/index.html";
>       String SUCCESS = "success";
>
>         public static final String FUNCXX_FORWARD = "path=/funxx/index.do";
>       String FUNCXX= "funcxx";
>
>     String login();
> }
>
> のような感じですね。XXXXLoginActionImplは2つのinterfaceを多重実装しています。
>
> 以上よろしくお願いします。
>
>
>
> "Katsuhiko Nagashima" <[E-MAIL ADDRESS DELETED]> wrote:
>
> > 永島です。
> >
> > お手数をお掛けして申し訳ないです。
> > 状況を理解できました。
> > ご指摘の問題は、S2Strutsの問題です。
> >
> > 現状では、
> > FormBeanに対して、StrutsFormアノテーションの
> > name属性を指定してForm名を変えた場合、
> > その他のアノテーションをHOT deployで読み込むことができません。
> > (例外としてDtoの部分をFormに変えるのみはOKとしています)
> >
> > また、
> >   ルート.web.manage.EmployeeDto
> >   ルート.web.manage.EmployeeEditAction
> >   ルート.web.manage.impl.EmployeeEditActionImpl
> > のように配置し、
> > EmployeeDtoをStrutsActionFormアノテーションを指定せず定義した場合、
> > Form名はmanage_employeeDtoとなり、
> > 以下のようにStrutsActionアノテーションで指定し、
> > -----
> > public interface EmployeeEditAction {
> >     String ACTION = "name = manage_employeeDto";
> >          :
> > }
> > -----
> > さらにFormを受け取るActionクラスも以下のように
> > 受け取らないといけなくなってます。
> > -----
> > public class EmployeeEditActionImpl implements EmployeeEditAction {
> >
> >     private EmployeeDto employeeDto;
> >
> >     public EmployeeDto getManage_employeeDto() {
> >         return employeeDto;
> >     }
> >
> >     public void setManage_employeeDto(EmployeeDto employeeDto) {
> >         this.employeeDto = employeeDto;
> >     }
> >         :
> > ------
> >
> > このままでは、利用しづらいと思いますので、
> > Form名やFormを受け取る部分について修正しようと思います。
> >
> > また、修正のとき参考にしたいと思いますので、
> > 原田さんのパッケージ構成と
> > StrutsAction、StrutsActionFormアノテーションの指定内容を
> > 教えていただいてもよろしいでしょうか。
> >
> > よろしくお願いします。
> >
> > 06/12/04 に 原田<[E-MAIL ADDRESS DELETED]> さんは書きました:
> > > 原田です。
> > >
> > > > S2自体のHOT deployはルート.web.サブアプリケーションに
> > > > DTOをおいても認識されます。
> > >
> > > それはできていますが、定数アノテーションのみNGなのです。
> > >
> > > よろしくお願いします。
> > >
> > >
> > > Yasuo Higa <[E-MAIL ADDRESS DELETED]> wrote:
> > >
> > > > ひがです。
> > > >
> > > > > 原田です。
> > > > >
> > > > > ルート.dto以下に入れるとできるようになりました。
> > > > >
> > > > > しかし、・・・・ちょっとこの構成は・・・・・。
> > > > >
> > > > > 今回結構大規模な開発なので、きびしいです。
> > > > >
> > > > > できればActionと同列におきたいのですが・・・。
> > > > >
> > > > S2自体のHOT deployはルート.web.サブアプリケーションに
> > > > DTOをおいても認識されます。
> > > >
> > > > Yasuo Higa
> > > > The Seasar Project
> > > > _______________________________________________
> > > > Seasar-user mailing list
> > > > [E-MAIL ADDRESS DELETED]
> > > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > >
> > > _______________________________________________
> > > Seasar-user mailing list
> > > [E-MAIL ADDRESS DELETED]
> > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > >
> >
> >
> > --
> > Katsuhiko Nagashima
> > _______________________________________________
> > Seasar-user mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-user
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


-- 
Katsuhiko Nagashima



Seasar-user メーリングリストの案内