ОБНОВЛЕНИЕ : см. Мой пост в блоге на эту тему примерно через год после того, как было написано: http://blog.ringerc.id.au/2012/07/java-ee-7-needs-improvements-in-app.html
... для ссылок на обсуждение планирования Java EE 7 по этой теме.
В основном я закончил написание небольшого приложения Java EE 6 и сейчас заменяю жестко запрограммированные настройки соответствующим интерфейсом динамической конфигурации.
I 'Я не уверен, как - или, точнее, где - хранить настройки. должен быть какой-то очевидный, "стандартный" способ сделать это, который, как ожидается, будет "просто работать" в различных средах и контейнерах, но я не могу найти его для жизни.
ЧтоЯ хочу, чтобы это был простой способ загрузки и хранения настроек, который работает на разных серверах приложений и операционных системах, не требует никакой настройки пользователем, и на самом деле работает правильно .API предпочтений Java был бы идеальным, но, похоже, не работает под Glassfish 3.1.
Параметры для хранения конфигурации теоретически могут включать:
- Использование параметров контекста из среды контейнера
- Хранение их с помощью API настроек Java
- Чтение / запись файла свойств ... где-то
- Использование JPA для сохранения их в JavaDB, предоставленной контейнером
- Помещениеэто в файле свойств, который загружен из classpath
- Использование системных свойств для установки параметров конфигурации или путь к файлу .properties
Это может показаться основным требованием, что 'мы будем хорошо обслуживаться в среде, где контейнер предположительно предоставляет вам все основные сервисы, которые вам могут понадобиться - но у всех этих подходов есть проблемы.
A ошибка в glassfish рендеринга (1)не работает, и в любом случае пользовательскому интерфейсу веб-администратора Glassfish не хватает какого-либо способа настройки параметров контекста, поэтому вычтобы сделать это, нужно использовать `asadmin 'и немного менее приятный синтаксис командной строки.Доступ к параметрам контекста возможен только через ServletContext - который недоступен согласованным образом между такими структурами, как JSF2, JAX-RS и необработанными сервлетами, - но по крайней мере Seam Servlet обрабатывает это.
What похоже, это еще одна ошибка в glassfish , когда между развернутым приложением и Glassfish breaks (2) возник конфликт версий библиотеки.Бэкэнд настроек не сбрасывает настройки на диск, поэтому сохраненные данные настроек теряются при перезапуске сервера приложений.API Java Preferences API также считается J2SE / десктопом, несмотря на то, что он включен в спецификации Java EE 6.
(3) может работать - но нет способа узнать, где ваше приложение считывало / записывалодоступ к файловой системе и где это должно выглядеть.Вы не можете сделать это настраиваемым, поскольку это становится проблемой курицы с яйцом тогда.Могут быть применены различные догадки, специфичные для платформы, но они будут нарушены при наличии SecurityManager.
(4) сработает, но это просто муха.Это требует, чтобы служба JavaDB работала, и заставляет пользователя убедиться, что ресурсы JDBC и пула на сервере приложений настроены правильно.Он большой и сложный для простой работы, и моделирование сущностей в любом случае не очень подходит для хранения предпочтений, так как в основном оно будет структурировано по ключу / стоимости.
(5) будет работать, но требуетпользователи должны знать, куда поместить файл конфигурации, где он будет найден на различных серверах приложений.Это также затрудняет предоставление приложением любого вида пользовательского интерфейса конфигурации, поскольку оно не обязательно может найти локальный путь к файлу конфигурации или открыть его для записи, особенно в присутствии SecurityManager.
(6) также будет работать, но заставит пользователя настроить систему конфигурации, прежде чем он сможет настроить приложение.Само собой разумеется, это меня не волнует, учитывая, что относительно сложное развертывание приложения и создание ресурсов уже для пользователей, которые еще не знают Glassfish / EE.
Итак ... как вы справляетесь с настройкой и хранением опций?Нашли ли вы способ, который позволяет «просто сделать это» без необходимости что-либо настраивать, чтобы ваше приложение могло сохранять свою конфигурацию?