2010-08-09 2 views
0

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

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

ответ

1

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

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

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

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

Смежные вопросы