Как вернуть очень длинный список из сессионного компонента ejb3? - PullRequest
0 голосов
/ 10 августа 2010

У меня есть сессионный компонент ejb3 и сервлет. Бин имеет доступ к базе данных с большой таблицей. Сервлет должен извлечь содержимое таблицы из компонента и отправить данные через ServletOutputStream. Как я могу передавать большие данные между EJB3 bean и сервлетом? Я не могу вернуть список со всеми строками одновременно, потому что он не помещается в памяти.

PS. Данные загружаются в виде файла. Они не появляются на странице.

1 Ответ

1 голос
/ 10 августа 2010

Вы можете передавать большие файлы через границу EJB, используя интерфейс Externalizable (расширение Serializable).Вот что я предлагаю:

  1. Напишите класс, например ExternalFile, который упаковывает / содержит File объект
  2. Сделайте этот класс реализующим Externalizable
  3. реализовать writeExternal для записи содержимого файла в заданный выходной поток
  4. реализовать readExternal для чтения указанного входного потока в новый временный файл
  5. Рассмотреть возможность добавления атрибутов размера и имени вваш класс ExternalFile, чтобы помочь получателю решить, что делать (и не забудьте записать их и прочитать их с помощью методов writeExternal и readExternal).

Шаг 3 - это этап сериализации, когда вы отправляетеВаш объект (файл) из слоя EJB.Шаг 4 - это этап десериализации, который принимает файл в виде потока данных и может делать с потоком все, что захочет.Мой 4 предлагает записать его во временный файл, но вы можете передать этот поток напрямую через ваш сервлет в любой другой пункт назначения.

Надеюсь, это поможет.

...