我正在使用 MTOM 通过 WebService 将某些文件的内容流式传输到客户端。
前端调用后端服务器上的 WS 并将文件流式传输到客户端。
然而,该应用程序是一个 Java EE 环境(WebLogic),据我所知,这是不允许的(或被认为是创建新线程的好做法),但 MTOM 使用的 DataHandler 的代码可以做到这一点:
// there is none but the default^^^^^^^^^^^^^^^^
252 final DataContentHandler fdch = dch;
253
254 // from bill s.
255 // ce n'est pas une pipe!
256 //
257 // NOTE: This block of code needs to throw exceptions, but
258 // can't because it is in another thread!!! ARG!
259 //
260 final PipedOutputStream pos = new PipedOutputStream();
261 PipedInputStream pin = new PipedInputStream(pos);
262 new Thread(
263 new Runnable() {
264 public void run() {
265 try {
266 fdch.writeTo(object, objectMimeType, pos);
267 } catch (IOException e) {
268
269 } finally {
270 try {
271 pos.close();
272 } catch (IOException ie) { }
273 }
274 }
275 },
276 "DataHandler.getInputStream").start();
277 ins = pin;
http://www.docjar.org/html/api/javax/activation/DataHandler.java.html http://docs.oracle.com/javaee/1.4/api/javax/activation/DataHandler.html
那么在 Java EE 中使用 MTOM 和流安全吗?容器不创建新线程这一事实可能根本不危险?