« 複数リソースファイル参照方法 | トップページ | シェルスクリプト »

セッションに登録するObjectはSerializableでなければならない

Java/セッション/Serializable

自作クラスをセッションに登録している箇所で、偶然Exceptionが発生しているのを発見。
偶然、というのも、Exceptionが発生しているのが、どうやら『サーブレットコンテナが停止』するとき…今回だとTomcatを停止した時(厳密にはこの表現は違うのかな…最近こういうところで曖昧な知識しかない自分に気付いて凹)なので、わざわざログをチェックすることがなく、たまたまログに吐いてるSQLチェックしよーっと思って見たらException内容がダンプされていてΣ( ̄■ ̄)となった次第。

で、結論としてはセッションに登録するクラスはSerializableクラスをimplementしてないと駄目なんだぜ!ということらしいです。
こちらのページにとても分かりやすく纏められていたので御紹介。
ユーファームさん>コーディングの落とし穴>セッションに保存されるオブジェクトがシリアライズ可能でない
http://www.u-farm.jp/oto/srv_serialize.html
以下引用です。
======引用開始==============================================
【問題点】
セッションは画面遷移をまたいでオブジェクトを保存できる便利な「入れ物」ですが、基本的にメモリ領域の一部を割り当てて使っているため、 (1)割り当て領域が満杯になってしまったときや、(2)サーブレットコンテナを停止するときに、セッション上の保存オブジェクトをいったんDiskに書き出して退避させます。このようなオブジェクトのDisk書き出し処理をシリアライズといいます。 Javaではどんなオブジェクトもシリアライズできるわけではなくて、 java.io.Serializable を実装(implements)したクラスだけが対象となります。

Serializableを実装していないオブジェクトをセッションに保存した場合、最初のうちは問題ないかと思いますが、シリアライズが必要な局面でトラブルを起こします。(通常は NotSerializableException という例外を発生します。)
この問題は開発環境での一過性のテストでは発見しにくく、本番環境で連続稼動しているうちにトラブルの形で初めて発覚することが多いため、十分な注意が必要です。

======引用終了==============================================
解決方法も上記サイトに分かりやすく書かれていましたので御参照。
他の「落とし穴」は初心者さんには有用だな~と思われる内容で、逆説的にこれを知らなかった自分が初心者だということですね!orz

|

« 複数リソースファイル参照方法 | トップページ | シェルスクリプト »

Java」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: セッションに登録するObjectはSerializableでなければならない:

« 複数リソースファイル参照方法 | トップページ | シェルスクリプト »