ServletOutputStream を使用してブロブのバイナリ ストリームを送信する必要があります。
次のテクノロジとソフトウェアを使用しています: Oracle 11、WebSphere 7、Springframework 2.5.5、Hibernate 3.3.SP1。
2 つの Oracle データベースがあります。1 つ目は転送する必要があるドキュメントの説明の表で、2 つ目はドキュメントの内容です。
春には、WebSphere と JtaTransactionManager で XA データソースのサポートも構成しました。
ドキュメントへの参照とコンテンツ自体を 1 回のトランザクションで取得します。
JDBC 仕様は、LOB はトランザクション オブジェクトであり、移植可能なアプリケーションはトランザクション内でそのようなオブジェクトを使用する必要があることを示しています。
そして、私は次の質問があります:
- トランザクション メソッド内で BLOB の入力ストリームを取得し、最上位の非トランザクション メソッドに渡すことは合法ですか? このようなもの:
@Transactional
public InputStream getContent(Long docId) {
Blob blob = getBlob(...);
return blob.getBinaryStream();
}
public ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) {
Long docId = ServlerRequestUtils.getRequiredLongParameter(req);
InputStream is = service.getContent(docId);
copy(is, resp.getOutputStream());
return null;
}
BLOB のコンテンツが十分に大きく、アプリケーション サーバーでトランザクション タイムアウトが事前に構成されている場合に、BLOB のバイナリ ストリームをエンド ユーザーに転送する方法が合法でない場合は? トランザクションを手動で処理し、タイムアウトをゼロに設定する必要がありますか (トランザクションはタイムアウトしません)?
このような場合、BLOB のバイナリ ストリームをエンド ユーザーに転送する最善の方法は何ですか?