0

ネットワーク ソケット経由で送信される一連のオブジェクトがあります。

データを読み取るためのコードは既に実装されており、ある程度機能しますが、私の問題は、ソケットのタイムアウトObjectInputStream.readObject()によってオブジェクトの読み取り () が切断され、ストリームが破損することがあることです。

この読み取りは JBoss リソース アダプタ内で実行されるため、タイムアウトを使用します。無期限にブロックして、EAR のアンデプロイまたは適切な停止を無効にする可能性は避けたいと考えています。

別のスレッドを使用せずにオブジェクトストリームの読み取りを処理して強制的に強制終了する、適切な (中断可能な) 方法はありますか?

PS オブジェクト ストリームの使用が非常に悪い決定であることは認識していますが、それはクライアント アプリケーションがデータを送信する方法であり、それを変更することはできません。

4

1 に答える 1

1

私はこのようなものを持っています。

private volatile boolean closed = false;
private Closable/*e.g. ObjectOutputStream */ onClose = ...;


public void close() {
    closed = true;
    try {
        if (onCLose != null) onClose.close();
    } catch(IOException ignored) {
    }
}


private Object readObject() {
    try {
         if (closed) throw new IllegalStateException();
         return steam.readObject();
    } finally {
         if (closed) throw new IllegalStateException();
    }
}
于 2013-09-16T08:59:38.197 に答える