2

OracleデータベースのBLOBファイルからWSを介してMTOMを使用してWSクライアントに直接ストリーミングしたいと思います。

私はここで説明されている方法を見つけたと思いました:

http://www.java.net/forum/topic/glassfish/metro-and-jaxb/mtom-best-practices

しかし、InputStreamDataSourceとjavax.mail.util.ByteArrayDataSourceを調べた後、それらがメモリ内の「ドキュメント」のbyte []を実際に使用していることに気付きました。これは、ストリーミングのアイデアが無駄であることを意味します。同時に複数のドキュメントが完全にメモリに保存されます。

では、どうすればDBからWSおよびMTOMを介してWSクライアントにストリーミングできますか?

何か案が ?

ありがとう

クリス

4

1 に答える 1

1

私は実験を試みましたが、最終的にいくつかの肯定的な結果が得られました。

DBからクライアントブラウザに直接ストリーミングするには、上記のことは有効ですが、InputStreamDataSourceは次のようになります。

public class InputStreamDataSource implements DataSource {
    private InputStream inputStream;

    public InputStreamDataSource(InputStream inputStream) {
        this.inputStream = inputStream;
    }

    public InputStream getInputStream() throws IOException {
        return inputStream;
    }

    public OutputStream getOutputStream() throws IOException {
        throw new UnsupportedOperationException("Not implemented");
    }

    public String getContentType() {
        return "*/*";
    }

    public String getName() {
        return "InputStreamDataSource";
    }
}

私が心配したのは、入力ストリームを自分で閉じたら...wsクライアントがバイナリコンテンツを受信しなかったことです...

私がチェックして実際にDataHandlerが新しいスレッドを作成し、入力ストリームを閉じるよりも

DBからクライアントに500MBを高速かつ低メモリフットプリントでストリーミングすることができました!

于 2013-01-29T18:06:22.393 に答える