0

ejb3 セッション Bean とサーブレットがあります。Bean は、いくつかの大きなテーブルを持つデータベースにアクセスできます。サーブレットは、Bean からテーブルのコンテンツを取得し、ServletOutputStream を介してデータを送信する必要があります。ejb3 Bean とサーブレットの間でビッグデータを転送するにはどうすればよいですか? メモリに収まらないため、一度にすべての行を含むリストを返すことはできません。

PS。データはファイルとしてダウンロードされます。ページには表示されません。

4

1 に答える 1

1

Externalizableインターフェース(Serializableの拡張)を使用して、EJB境界を越えて大きなファイルを転送できます。これは私が提案するものです:

  1. たとえば、オブジェクトExternalFileをラップ/含むクラスを作成しますFile
  2. そのクラスに実装させるExternalizable
  3. writeExternal含まれているファイルを指定された出力ストリームに書き込むためのを実装します
  4. を実装しreadExternalて、指定された入力ストリームを新しい一時ファイルに読み込みます
  5. サイズと名前の属性をExternalFileクラスに追加して、受信者が何をすべきかを決定できるようにすることを検討してください(そして、これらを書き出し、writeExternalメソッドとreadExternalメソッドを介して読み込むことを忘れないでください)。

ステップ3は、EJBレイヤーからオブジェクト(ファイル)を送信するときのシリアル化ステージです。ステップ4は、ファイルをデータストリームとして受信し、ストリームで必要な処理を実行できる逆シリアル化ステージです。私の4は、一時ファイルに書き込むことを提案していますが、このストリームをサーブレットを介して他の宛先に直接渡すことができます。

お役に立てば幸いです。

于 2010-08-09T22:40:21.233 に答える