Сохранение и редактирование конфигурации для приложений 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 был бы идеальным, но, похоже, не работает в Glassfish 3.1. и в любом случае в пользовательском интерфейсе веб-администратора Glassfish отсутствует какой-либо способ настройки параметров контекста, поэтому для этого вам нужно использовать ʻasadmin 'и какой-то менее приятный синтаксис командной строки. Доступ к параметрам контекста можно получить только через ServletContext, который недоступен согласованным образом между фреймворками, такими как JSF2, JAX-RS и необработанными сервлетами, но по крайней мере Seam Servlet справляется с этим.

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

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

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

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

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

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

12
задан Craig Ringer 24 July 2012 в 06:51
поделиться