0

我有一个 ejb3 会话 bean 和一个 servlet。bean 可以访问带有一些大表的数据库。servlet 应该从 bean 中检索表的内容并通过 ServletOutputStream 发送数据。如何在 ejb3 bean 和 servlet 之间传输大数据?我无法一次返回包含所有行的列表,因为它不适合内存。

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 建议将其写入临时文件,但您可以通过 servlet 直接将此流传递到任何其他目的地。

希望有帮助。

于 2010-08-09T22:40:21.233 回答