Глобально доступная недвижимость в EJB - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть приложение JavaEE, которому требуется доступ к файлу для получения определенной информации об установке.

Этот доступ только для чтения, мне не нужно изменять этот файл в приложении, т.е.Мне не нужен «файл» напрямую, просто его содержимое (байтовый массив).

Существует ограничение на EJB, использующие файловую систему.Я понимаю проблемы, связанные с этим, но я не могу найти альтернативное решение для этого.

Путь к файлу должен настраиваться пользователем, но нет необходимости отслеживать изменения в содержимом файла.После загрузки он остается прежним, если пользователь не выберет другой файл.Поэтому я не могу упаковать его в архив приложения.

Этот файловый подход давно уже был принят некоторыми устаревшими системами.Сейчас нет практического способа изменить его, т. Е. Мне нужно, чтобы мое приложение JavaEE использовало файл (хотя бы один раз) для загрузки его содержимого.

Другое ограничение заключается в том, что этот файл нельзя сохранить в базе данных.

Как мне сделать это, не нарушая EJB-ограничение доступа к файловой системе?

Я подумал о том, чтобы пользователь загрузил файл на сервер и затем сохранил эту информацию на сервере.Но как мне это сделать?Эта информация должна быть общедоступной, включая несколько экземпляров сервера (например, в кластерной архитектуре).

Пользователь должен настроить этот файл один раз (не обязательно в основном приложении, это может быть другое приложение для настройки).этот).Даже если сервер перезапустится, содержимое файла все равно будет доступно пользователю без дальнейшей настройки.

Я использую JavaEE 5 со спецификацией EJB 3.0 на сервере GlassFish v2.1.1.

Спасибо, Тьяго.

Ответы [ 2 ]

1 голос
/ 27 ноября 2011

Мое предложение выглядит следующим образом:

  1. Пользователь JAX-WS с EJB 3 для разрешения пользователю загружать файл через WebService (Вы можете предоставить клиент).
  2. Storeсодержимое файла в JNDI, используя menthod bind () класса Context.Как я знаю, JNDI будет распространяться по кластеру, но, возможно, вам нужно проверить документ вашего сервера приложений Java EE.

Надеюсь, что это может быть полезно.

0 голосов
/ 27 сентября 2011

У вас есть два варианта из EJB:

1) Нарушать спецификацию и использовать стандартные API Java File для доступа к ней из вашего EJB. Может быть «безопасным», если вы понимаете, что это означает с точки зрения кластеризации, транзакций и т. Д. Поскольку вы делаете доступ только для чтения, вы должны быть в порядке.

2) Используйте адаптер JCA, который поддерживает доступ к файловой системе. Вы можете написать свой собственный, попробовать один с открытым исходным кодом (я думаю, что есть один на кузнице исходного кода), или купить один - я думаю, что oracle продает один для использования с версией Glassfish oracle. Вероятно, излишне для вашей ситуации.

Вы также можете добавить в проект компонент веб-приложения (сервлет), который обеспечивает доступ к файлу, поскольку в этой спецификации разрешен файл io.

...