Подтвердить что ты не робот

Сохранение и редактирование конфигурации приложений Java EE

ОБНОВЛЕНИЕ: см. мой пост в блоге по этой теме примерно через год после того, как это было написано: http://blog.ringerc.id.au/2012/07/java-ee-7-needs-improvements-in-app.html

... для ссылок на обсуждение планирования Java EE 7 по этой теме.


Я в основном закончил писать небольшое приложение Java EE 6 и в процессе замены жестко запрограммированных настроек с помощью соответствующего интерфейса динамической конфигурации.

Я не уверен, как - или, точнее, где - сохранить настройки. Там должен быть каким-то очевидным, "стандартным" способом сделать это, что ожидалось "просто работать" в разных рамках и контейнерах, но для жизни меня я не могу найти.

Что я хочу - это простой способ загрузить и сохранить настройки, которые работают на разных серверах приложений и операционных системах, не требует никакой настройки для пользователя, а работает правильно. API Java Preferences был бы идеальным, но, похоже, он был разбит под Glassfish 3.1.

Варианты сохранения конфигурации теоретически включают:

  • Использование контекстных параметров из среды контейнера
  • Сохранение их с помощью API настроек Java
  • Чтение/запись файла свойств... где-то
  • Использование JPA для хранения их в JavaDB, предоставляемом контейнером
  • Вставьте его в файл свойств, который загружен из пути к классам
  • Использование свойств системы для установки параметров конфигурации или пути к файлу .properties

Это, по-видимому, является основным требованием, которое будет хорошо обслуживаться в среде, где контейнер, предположительно, предоставляет вам все основные сервисы, которые могут вам понадобиться, но все эти подходы имеют проблемы.

A ошибка в glassfish делает (1) неработоспособным, и в любом случае пользовательский интерфейс веб-администратора Glassfish не имеет никакого способа настроить параметры контекста, поэтому вам нужно использовать `asadmin 'и несколько менее симпатичный синтаксис командной строки для этого. Доступ к контекстным параметрам возможен только через ServletContext, который не доступен согласованно между инфраструктурами, такими как JSF2, JAX-RS и необработанные сервлеты, но по крайней мере Seam Servlet обрабатывает это.

Что такое , похоже, является другой ошибкой в ​​glassfish, был конфликт версий библиотеки между развернутым приложением и перерывами Glassfish (2). Бэкэнд настроек не позволяет сбросить настройки на диск, поэтому данные сохраненных настроек теряются при перезапуске сервера приложений. API Java Preferences также, по-видимому, считается J2SE/desktop, несмотря на его включение в спецификации Java EE 6.

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

(4) будет работать, но он уничтожит муху. Для этого требуется, чтобы работала служба JavaDB и заставляла пользователя убедиться, что ресурсы JDBC и пула на сервере приложений настроены правильно. Это большая и сложная задача для простой работы, и моделирование сущностей в любом случае не подходит для хранения предпочтений, так как в основном это будет построение ключа/ценности.

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

(6) также будет работать, но заставляет пользователя настраивать конфигурационную систему, прежде чем они смогут настроить приложение. Излишне говорить, что это меня не волнует, учитывая, насколько относительно сложно развертывать приложение и создавать ресурсы уже для пользователей, которые еще не знают Glassfish/EE.

Итак... как вы управляете конфигурацией и хранением опций? Вы нашли способ, который позволяет вам "просто сделать это", без необходимости настраивать что-либо, чтобы ваше приложение сохраняло его конфигурацию?

4b9b3361

Ответ 1

Проблема с API-интерфейсом предпочтений была вызвана включением jaxb и stax-приложений в войну приложения, затянутой jersey-json. С этими исключениями (поскольку они предоставлены сервером приложений в любом случае) API-интерфейс предпочтений возобновил работу правильно.

Похоже, что API prefs с пользовательским интерфейсом для настройки, по-видимому, является лучшим способом.