「クラスタ環境とセッションとSerializableの関係」の詳細記事: Javaってまだいけますか
いっぱいいっぱいで無理なので学んだ事をいちいちメモっていくブログです。
[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Navigation
クラスタ環境とセッションとSerializableの関係
お恥ずかしながら、今までSerializableについてあまり意識してませんでした。
「RMIで受け渡すオブジェクトとかでは宣言しとけばいいのかな…」ぐらいの軽い気持ちでした。
しかし、従事していたプロジェクトでこれが原因の不具合が発生してしまいました。
要はクラスタ環境で稼動しているアプリケーションで、Serializableを実装していない属性がセッション情報に格納されており、セッションレプリケーションが行なわれないという現象でした。
ローカルや検証環境ではクラスタ構成を組むことが無いので気づきづらいですよね…。
開発規約として「Serializableを実装しましょう」では弱いので、こんな感じで専用クラスを作って利用を強制する方がよいでしょうか。
(EclipseでHttpSession.setAttributeを検索すればチェックできますし。)
テストフェーズにクラスタ環境を意識したテストをしておくことも重要ですよね。
反省。
SerializableなクラスのメンバもSerializableな必要があるようですがjava.lang.Stringやプリミティブ型のほか、Java標準のコレクションなどであれば問題ないようです。(ArrayList.subList()の戻り値など、一部例外有り)
その他参考にしたサイト
Serializableについて
Serializableについて(java API)
Tomcat5でのクラスタリングについて
ググってみるといろんな方がブログで取り上げてるので、結構みんな一回は通る道っぽいですねw
「RMIで受け渡すオブジェクトとかでは宣言しとけばいいのかな…」ぐらいの軽い気持ちでした。
しかし、従事していたプロジェクトでこれが原因の不具合が発生してしまいました。
要はクラスタ環境で稼動しているアプリケーションで、Serializableを実装していない属性がセッション情報に格納されており、セッションレプリケーションが行なわれないという現象でした。
ローカルや検証環境ではクラスタ構成を組むことが無いので気づきづらいですよね…。
開発規約として「Serializableを実装しましょう」では弱いので、こんな感じで専用クラスを作って利用を強制する方がよいでしょうか。
(EclipseでHttpSession.setAttributeを検索すればチェックできますし。)
public class SessionManager {
/**
* セッションにSerializableを実装したオブジェクトを格納します。
*
* @param request
* @param name
* @param value
*/
public static void setAttribute(HttpServletRequest request, String name, Serializable value) {
request.getSession().setAttribute(name, value);
}
/**
* セッションからSerializableを実装したオブジェクトを取り出します。
* @param request
* @param name
* @return
*/
public static Serializable getAttribute(HttpServletRequest request, String name) {
return (Serializable) request.getSession().getAttribute(name);
}
}
テストフェーズにクラスタ環境を意識したテストをしておくことも重要ですよね。
反省。
SerializableなクラスのメンバもSerializableな必要があるようですがjava.lang.Stringやプリミティブ型のほか、Java標準のコレクションなどであれば問題ないようです。(ArrayList.subList()の戻り値など、一部例外有り)
その他参考にしたサイト
Serializableについて
Serializableについて(java API)
Tomcat5でのクラスタリングについて
ググってみるといろんな方がブログで取り上げてるので、結構みんな一回は通る道っぽいですねw
PR
Navigation
「クラスタ環境とセッションとSerializableの関係」にトラックバックする
「クラスタ環境とセッションとSerializableの関係」へのトラックバック
「クラスタ環境とセッションとSerializableの関係」へのコメント
「クラスタ環境とセッションとSerializableの関係」にコメントする
Navigation
menu
ブログ内検索
カテゴリー
カウンター
忍者アド
リンク
最新CM
[07/17 セバ]
[12/27 NONAME]
最新記事
(10/15)
(10/01)
(08/12)
(08/12)
(08/11)
プロフィール
HN:
takacy.k
年齢:
45
性別:
男性
誕生日:
1979/08/13
趣味:
酒
自己紹介:
個人的なメモですので、投稿内容について真偽を保証するものではありません。また、当ブログの内容をご利用になったことによる(以下略)