2

我想通过带有 MTOM 的 WS 直接从 Oracle 数据库 blobs 文件流式传输到 WS 客户端。

我以为我找到了这里描述的方法:

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

但是在我查看了 InputStreamDataSource 和 javax.mail.util.ByteArrayDataSource 之后,我意识到它们实际上是内存中“文档”的一个字节 [],这意味着流媒体的想法是徒劳的,因为我试图避免的是多个文档在同一时间完全在内存中。

那么如何通过 WS 和 MTOM 从 DB 流式传输到 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 创建了一个新线程并关闭了输入流

我能够将 500MB 从 DB 快速流式传输到客户端,并且内存占用少!

于 2013-01-29T18:06:22.393 回答