- PR -

別セッションで保持されているデータが表示される

1
投稿者投稿内容
らいす
会議室デビュー日: 2005/01/31
投稿数: 6
投稿日時: 2005-12-19 22:15
お世話になります、らいすです。

現在、Tomcat、Struts、PostgreSQLを用いてWEBアプリケーションを作成しています。
この作成したWEBアプリケーションに、50人くらいで同時にアクセスすると
一部の利用者で別の利用者が保持しているセッションの情報が表示されることが何回かありました。ただ、この現象は更新ボタンをクリックすると、正常な情報が表示されます。上記のような現象は初めてで、対策に難儀しています。

どなたか、同じような現象が発生した、または解決策を知っていらっしゃる方がいればアドバイスをいただけないでしょうか。
よろしくお願いします。

・WEBアプリケーションサーバ環境:
  Tomcat 5.0.28
  Struts 1.1
  JDK 1.4.2_09
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-12-19 22:36
フィールドを使用していませんか。例えばActionクラスとか。
らいす
会議室デビュー日: 2005/01/31
投稿数: 6
投稿日時: 2005-12-19 23:09
かつのりさん。早速の書き込みありがとうございます。

フィールドを使用と言うのは、例えば、Actionクラスの defaultLocale のような変数を使用しているかどうかということなのでしょうか?
もし、上記のような意味なのであれば、使用はしていません。

ちなみに、ActionクラスはDispatchActionを継承しています。
また、検索したデータは、データ格納用のクラスを作成し、クラス内部で保持、そのオブジェクトをセッションに格納しています。

もし、私が違う意味でとらえてしまっている場合は、ご指摘をいただけますでしょうか。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-12-19 23:39
フィールドというのは、
コード:
public class Foo extends Action{
    private String xxx;          //<--これがフィールド
}


です。

Actionクラスのインスタンスはリクエスト毎に生成されるものではないので、
フィールドの読み書きをリクエスト毎に行うと、
書いたものと違うものが読まれると言う現象が発生します。

使っていないなら、原因はよくわからないですね。
書かれている内容だけでは、どうにも判断できません。
差し支えない範囲でコードを載せてみてはいかがでしょうか。
らいす
会議室デビュー日: 2005/01/31
投稿数: 6
投稿日時: 2005-12-20 00:08
かつのりさん、わかりやすい説明ありがとうございます。
※また、深夜のご回答重ねてお礼申し上げます。

頂きました説明を元に、再度調査を行いましたところ、
開発初期に作成したActionクラスで、セッションに格納しているログイン情報を取得/保持するクラスをフィールドとして定義していた箇所がありました。

> Actionクラスのインスタンスはリクエスト毎に生成されるものではないので、
> フィールドの読み書きをリクエスト毎に行うと、
> 書いたものと違うものが読まれると言う現象が発生します。
この仕様は知りませんでした。
基本的な部分での勉強不足、お恥ずかしい限りです。

当不具合は修正を行い、確認を取りたいと思います。
※今は確認が取れないため、明日、現地のテスト環境で確認を行いたいと思います。
 結果は、またご報告させていただきます。

本日は、遅くまでお付き合いいただき、ありがとうございました。
らいす
会議室デビュー日: 2005/01/31
投稿数: 6
投稿日時: 2005-12-22 00:52
本日、現地テスト環境でテストを行いましたところ、問題となった現象は発生しなくなりましたが、もうしばらく様子を見ようと思います。

このたびの問題で、かつのりさんには、大変お世話になりました。
どうもありがとうございました。
今後とも、どうぞよろしくお願い申し上げます。
1

スキルアップ/キャリアアップ(JOB@IT)