2010-08-09 26 views
0

我有一個EJB3會話bean和一個servlet。這個bean可以訪問帶有一些大表的數據庫。 servlet應該從bean中檢索表的內容並通過ServletOutputStream發送數據。我如何在ejb3 bean和servlet之間傳輸大數據? 我不能一次,因爲它不適合在內存中返回的所有行的列表。它是如何返回從EJB3會話bean一個很長的名單?

PS。數據作爲文件下載。它們不會出現在頁面上。

回答

1

您可以通過使用外部化inteface(Serializable接口的擴展)傳輸跨越邊界EJB大型文件。這是我的建議:

  1. 編寫類如ExternalFile一個封裝/包含File對象
  2. 作出這樣的類實現Externalizable
  3. 落實writeExternal到包含文件寫入給定輸出流
  4. 落實readExternal閱讀給定的輸入流轉換爲新的臨時文件
  5. 考慮增加大小和名稱屬性您ExternalFile類來幫助接收機決定做什麼(和REM ember將這些寫出來並通過writeExternal和readExternal方法讀取它們)。

第3步是您在從EJB層發送對象(文件)時的序列化階段。第4步是接收的文件作爲一個數據流,並且可以爲所欲爲與流的反序列階段。我的4建議將它寫入臨時文件,但您可以直接通過您的servlet將此流傳遞到任何其他目標。

希望有所幫助。

相關問題