- PR -

ContextからlookupでClassCastException

投稿者投稿内容
Emacs信者
常連さん
会議室デビュー日: 2003/08/10
投稿数: 38
投稿日時: 2003-12-05 15:47
まず対処方法ですが、可能であれば以下のような構成にしてみてください。

コード:

class Sample implements Serializable{

//直列化不能なフィールド
private transient NotSerializableAnyClass any;

public Sample() throws AnyException{
//AnyExceptionをスローする可能性があると仮定
any = new NotSerializableAnyClass();
}

//Java直列化規定で定められている、直列化解除時に実行されるメソッド
private void readObject(ObjectInputStream in)
throws IOException,ClassNotFoundException{

in.defaultReadObject();

try{
//anyフィールドを初期化
any = new NotSerializableAnyClass();
}catch(AnyException e){
throw new StreamCorruptedException(e.toString());
}
}
}



一応、このようにすれば直列化可能になるはずです。

しかし、そもそもトリックスターさんがおっしゃる「シリアライズできないクラス」は、
「ベンダーがSerializableの実装を手抜きした」のではなく、
「本質的に、シリアライズされることがないはず」のものである可能があります。

本当に自分の行なおうとしていることが正しい手法なのかどうか、
もう一度確認してみることをオススメします。


[ メッセージ編集済み 編集者: Emacs信者 編集日時 2003-12-05 15:56 ]
トリックスター
大ベテラン
会議室デビュー日: 2003/04/16
投稿数: 104
投稿日時: 2003-12-05 16:24
毎度、ありがとうございます。

サンプルを拝見しましたが、
readObject()内、anyの値こそ、Contextより取得したい値なので、
そのクラスにSerializableが実装されていなければ、取得できない
ということでしょうか。

まいった。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2003-12-05 16:58
引用:

トリックスターさんの書き込み (2003-12-05 16:24) より:
サンプルを拝見しましたが、
readObject()内、anyの値こそ、Contextより取得したい値なので、
そのクラスにSerializableが実装されていなければ、取得できない
ということでしょうか。



であれば、そのクラスインスタンスを再生成できるように自力でシリアライズ/デシリアライズ
する必要があります。

それにしても、そこまでしてやらなきゃいけないことなんですか?
トリックスター
大ベテラン
会議室デビュー日: 2003/04/16
投稿数: 104
投稿日時: 2003-12-05 22:56
回答、ありがとうございます。

自分でも、無茶なことをやろうとしていると思います。
考え直してみます。

以下、ご参考までに。
妙案あれば、大歓迎です。
おっと、IBMサイトを見てなかった。

WebSphere MQ のコネクションは、1プロセスにつき1コネクションである。
Webサービスなど並列処理する場合は、同時に接続できない。
1コネクションを使いまわすと、待ち時間が発生する。
→ JNDIを使って、コネクションプーリングでどうだ!
という、経緯です。

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