[Seasar-user:16266] Re: [SAStruts]session 削除の取り扱いについて

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2008年 11月 10日 (月) 15:31:53 JST


ひがさん

お世話になっております、竹内です。
回答有難う御座います。

>ここでいっているDtoとは、アクションフォームのことですよね。

いえ、ここではActionFormではない
Dtoを意味しておりました。
このため、

>わざわざこんなことを考えなくてもすむように、removeActionForm属性が
>用意されているので、この動作に相当するAOPを作ろうとするのは、
>あまり意味がないと思います。

上記removeActionFormが利用出来ないので
Sessionの実体をremoveするために
(HttpSessionのremoveAttributeに相当する)
簡単なインターフェースがあれば嬉しいというものでした。

また、前回のメールで記述が漏れておりましたが
そもそもHttpServletRequestやHttpSessionを
極力開発者が直接触らなくて良いようなものを用意したい
という前提が御座いました。

このため、例えば
----------
//条件によってセッションを削除する場合がある
if (hoge.isSessionClear()) {
	session.removeAttribute("hoge");
}
----------
というような動作をさせたい場合、
HttpSessionインスタンスを隠蔽化して
----------
//条件によってセッションを削除する場合がある
if (hoge.isSessionClear()) {
	hoge = null;
}
----------
と書くことでセッションの実体が消えても良いのではないか?
と思ったことがこのメールの発端となっておりました。


>アクションへの参照を切ったら、セッションへの参照も切れるというのは
>おかしいですよね。もともと別のものだから。

こちらは承知しております。
Actionへの参照であるプロパティをnullとすることで
sessionの実体も消えるという動作が
HttpSessionインスタンスを隠蔽し、
かつ(SAStrutsを利用する上で)直感的にコーディングできるのではないか?
と思ったところで御座います。

#Javaとしての参照のごっちゃは確かに発生しますが
#セッションの実体を直接操作しているようなイメージで
#セッションインスタンスのDtoを操作していれば
#null渡しによるセッション実体の削除もアリではないか
#と思ったところでした)


>ただし、これでもセッションからPOJOとしてのアクションフォームが
>消えるだけで、Strutsから実際に参照されているDynaBeanは削除されないので
><html:text property="xxx"/>
>などと参照すると値が設定されます。

こちらは意識しておりませんでした。
ご教授有難う御座います。


以上、よろしくお願い致します。


>-----Original Message-----
>From: [E-MAIL ADDRESS DELETED] 
>[mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of Yasuo Higa
>Sent: Monday, November 10, 2008 2:28 PM
>To: [E-MAIL ADDRESS DELETED]
>Subject: [Seasar-user:16265] Re: [SAStruts]session 削除の取り扱いについ
>>
>
>ひがです。
>
>> 
>> いつもお世話になっております。
>> 竹内です。
>> 
>> SAStrutsでActionのプロパティのDtoをセッションインスタンスとする場合
>> @Component(instance = InstanceType.SESSION)
>> を付けると思います。
>> 
>> また、この場合にDtoを編集するとSessionの値も書き換わると思いますが
>> Dto自体にnullを渡すと(恐らく参照が切れるため)
>> Session自体から無くなることはないと思います。
>> 
>ここでいっているDtoとは、アクションフォームのことですよね。
>アクションで
>hogeForm = null;
>としてもアクションから参照がなくなるだけど、
>セッションには格納されたままです。
>
>> @RemoveSessionや@Execute等のアノテーションを利用して
>> セッションを削除する方法もありますが
>> そもそも参照にnull渡しを行ってsession削除出来ると
>> 開発者にとっては「楽」出来ると思っております。
>> 
>セッションへの参照とアクションへの参照をごっちゃに
>考えている気がします。
>
>アクションへの参照を切ったら、セッションへの参照も切れるというのは
>おかしいですよね。もともと別のものだから。
>
>明示的にセッションにnullを指定したほうがわかりやすいということなら、
>@Resource HttpSession session;
>とプロパティを用意しておいて、
>session.removeAttribute("hogeForm");
>してください。
>
>これなら、普通だし問題ないと思います。
>
>ただし、これでもセッションからPOJOとしてのアクションフォームが
>消えるだけで、Strutsから実際に参照されているDynaBeanは削除されないので
><html:text property="xxx"/>
>などと参照すると値が設定されます。
>
>DynaBeanを削除するのは、SAStrutsの内部動作を把握していないと
>できません。
>
>わざわざこんなことを考えなくてもすむように、removeActionForm属性が
>用意されているので、この動作に相当するAOPを作ろうとするのは、
>あまり意味がないと思います。
>_______________________________________________
>Seasar-user mailing list
>[E-MAIL ADDRESS DELETED] 
https://ml.seasar.org/mailman/listinfo/seasar-user


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