[Seasar-user:19544] Re: S2Dao使用時に、なぜかリクエストがnullになる

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2010年 3月 23日 (火) 19:00:00 JST


小林 (koichik) です.

Date:    Tue, 23 Mar 2010 18:09:09 +0900
From:    熊谷 大 <[E-MAIL ADDRESS DELETED]>
To:      <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:19541] S2Dao使用時に、なぜかリクエストがnullになる

> 状況としましては、S2Daoを使ったDBアクセス時に、
> リクエストとレスポンスがnullになっており、例外が発生しています。

リクエストとレスポンスが null というのは,具体的に
どこから取得したものが null なのでしょうか?

スタックトレースには

> Caused by: java.sql.SQLException: 引数(response/getSessionInfo())が不正です。

と出ていますが,この response が null なのか,
それとも getSessionInfo() の結果が null なのかに
よっても調べるポイントが変わってくると思いますが.

> 類似現象を検索したところ、
>  =================================
>  [CONTAINER-211] - RequestDispatcher#forward() や include() をした場合に,
>  S2ContainerFilter が外部コンテキストの request/response を null にしてしまうため,
>  後続の処理で request/response を参照すると NullPointerException が
>  発生する問題を修正しました.[Seasar-user:15379]
>  http://www.seasar.org/wiki/index.php?ChangeLog%2FSeasar#t25c07ef
>  =================================
> という情報を発見したのですが、バージョンを上げても解決しませんでした。

これは forward()/include() して dispatch 元に
戻ってきた時に外部コンテキストがクリアされて
いるという問題で,今回のように forward() した先で
起きる問題ではありません.

というか,スタックトレースを見る限り,forward() で
s2filter が適用されていないので関係ありません.

これだと外部コンテキストが保持している request/
response は forward() 前のもので,forward() 後の
request/response になりません.
そうしたいのならいいのですが,そういうことはあまり
ないように思います.
forward() した先では forward() 後の request/response を
使用したいのなら,web.xml で

    <filter-mapping>
        <filter-name>s2filter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>

などとする必要があります.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



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