- PR -

Serializableについて

1
投稿者投稿内容
ハヤ
会議室デビュー日: 2004/06/10
投稿数: 12
投稿日時: 2004-07-02 16:29
先輩に、クラスタリング対応のために、セッション管理の動機対象オブジェクトにはSerializableインターフェースを実装しなければならないと言われたのですが、
どうもSerializableがピンときません。
いろいろ調べはしたのですが、どういった実装を行うのかわかりません。
Serializableをimplementsするだけで良いのでしょうか?

ちなみにセッション管理の対象オブジェクトは
メンバ変数及び、それに対応するgetter/setter郡のみとなっています。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2004-07-02 16:58
java.io.Serializableインターフェースは、
マーカーインターフェースとよばるタイプのインターフェースです。
APIを見れば解りますが、フィールドも、メゾットも持ちません。
つまり、単にjava.io.Serializableをimplementsで指定するだけです。

*****************API抜粋********************
クラスの直列化可能性は、
java.io.Serializable インタフェースを実装したクラスによって有効になります。
このインタフェースを実装していないクラスでは、
その状態が直列化または直列化復元されることはありません。
直列化可能クラスのサブタイプは、すべてそれ自体が直列化可能です。
直列化インタフェースにはメソッドやフィールドはなく、
直列化可能であることを識別するためだけに機能します。
******************************************

ハヤ
会議室デビュー日: 2004/06/10
投稿数: 12
投稿日時: 2004-07-02 17:06
さっそくのご回答有難うございます!

なるほど。
implements指定のみでよいのですね。
どこのHP見ても「実装する」と記述されてるので、
ソースコード書くのかなぁーと思ってました^^;
顔爺
ベテラン
会議室デビュー日: 2003/10/03
投稿数: 52
投稿日時: 2004-07-02 17:10
Serializable なクラス内のすべてのフィールドが Serializable である(※)か、
もしくはプリミティブ型でなければなりません。

※ 直列化する必要がないフィールドについては transient キーワードで直列化
しない指定ができます。
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2004-07-03 09:54
私の古い記憶によりますと、ListやMapなどObject型配列を持つクラスを変数に持っている場合、自分でシリアライザブルな用にコーディングしてやる必要があります。
sweetlove
会議室デビュー日: 2003/12/23
投稿数: 9
投稿日時: 2004-07-03 16:27
ArrayListやHashMapはSerializableです。

http://java.sun.com/j2se/1.3/docs/api/java/util/HashMap.html
http://java.sun.com/j2se/1.3/docs/api/java/util/ArrayList.html

ここにputやaddされるデータもSerializableである必要があります。
ハヤ
会議室デビュー日: 2004/06/10
投稿数: 12
投稿日時: 2004-07-05 12:50
御察しのとおりとおり
今回のオブジェクトの中にはArrayListが含まれているので
Serializableしなければならないようですね。
で、一つ疑問に思ったのですが、
セッション対象オブジェクトのみSerializableしておけば
問題ないのでしょうか?
以前のプロジェクトでは、Entity(メンバとgetter/setterで構成されているクラス)系オブジェクトは、
すべてSerializableをimplementsしておけと言われたのですが・・・
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-07-05 15:00
Serializable の意味をまず理解すればどこで実装すべきかわかってくるでしょう。

ネットワーク越しに転送する場合、ファイルに保存する場合、データベースに保存する場合などがそれにあたります。
一般的にはHTTPSセッションに格納するオブジェクト(クラスタ内でレプリケートするため)やSFSB のフィールドとして保持している場合(パッシベーとやレプリケートを可能にするため)などがあたります。
データを保持するクラスは特に理由がなければ implements Serializable としてしまうことが多いかもしれません。
File オブジェクトや Connection オブジェクトなど、シリアライズ可能でないオブジェクトをフィールドとして保持している場合は注意しましょう。

#Serializable を実装しておけ、といった本人に聞いてみるのが一番早そうです
1

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