2012-02-27 2 views
0

Я распространяю простой Java Webapp как открытый источник. Webapp необходимо настроить до того, как он будет запущен, - файл конфигурации должен быть создан, и местоположение этого файла конфигурации должно быть сообщено webapp как параметр в web.xml.Создание Java-приложения с открытым исходным кодом, которое легко устанавливается и развертывается на Tomcat, Jetty и т. Д.

Теперь мой вопрос заключается в том, как лучше всего упаковать и распространять webapp, чтобы упростить его установку и как описать этот процесс установки в документации. Возможные варианты:

  • Распределите Webapp как архив WAR. Рекомендуют пользователи развертывания WAR в их Tomcat/Jetty/что угодно, а затем падение их в файл конфигурации /webapps/myapp/WEB-INF и модифицировать /webapps/myapp/WEB-INF/web.xml соответственно
  • Распределите веб-приложение в качестве источника. Порекомендуйте, чтобы пользователи загрузили свой файл конфигурации в папку /src/main/webapp/WEB-INF, затем измените их /src/main/webapp/WEB-INF/web.xml, затем создайте WAR с помощью Ant или Maven и разверните их в свой контейнер сервлетов.

Возможно, есть другие варианты, о которых я не могу думать.

Какая настройка, вероятно, будет наиболее удобна для пользователей, которым необходимо установить, настроить и развернуть webapp?

Редактировать: Я должен добавить, что файл конфигурации - это не просто несколько строк - это большой файл, содержащий схему базы данных и другие материалы и потенциально сгенерированный с использованием внешнего редактора; поэтому просто предоставление хороших значений по умолчанию не является вариантом.

ответ

2

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

Есть много способов разместить эту конфигурацию в другом месте. Например, вы можете использовать Java Preferences.

+0

Отличная точка зрения о сложности обновления приложения. «Предпочтения» звучат хорошо, хотя я не уверен, как именно использовать его для webapp. – cygri

+0

Внешность, безусловно, звучит как путь. –

1

Я бы сказал, WAR, хотя и не требует настройки, вероятно, будет более удобно :)

Что это, свободно, который должен быть выполнен таким образом, что не существует разумное значение по умолчанию для всех? Строка URL?

+0

Обновлен вопрос. Разумные значения по умолчанию для всех, к сожалению, не являются опцией. – cygri

1

Предоставление собственного ответа, после более подробного ознакомления с вопросом: JNDI, кажется, является «официальным», хотя и несколько тяжеловесным, способом решения этого вопроса. С JNDI параметр конфигурации (например, расположение полного файла конфигурации, который мне нужен) можно объявить в web.xml, и его фактическое значение может быть установлено в per-webapp context.xml, который находится в каталоге /webapps Tomcat (или /contexts каталог Jetty).Эта установка имеет кучу преимуществ:

  • Большой файл конфигурации может жить вне контейнера сервлетов и веб-приложение
  • веб-приложение может быть обновлено без опасности потери конфигурации
  • Распределенная война не необходимо изменить или перестроить

Даунсайд: это сложный процесс, требующий взаимодействия с XML, а настройка JNDI на Tomcat работает иначе, чем Jetty (требуется в два раза больше документации).

0

Возможно, вы используете системное свойство для расположения файла конфигурации. Может легко передаваться в командной строке как -Dorg.example.config.file=/foo/bar, в сценариях запуска или в Java-коде. Я думаю, что видел некоторые инструменты, например. протоколирование, использование свойств системы для подобных вещей в webapps.

+0

Даунсайд: Это не позволяет запускать несколько экземпляров webapp с другой конфигурацией. Невозможно установить системное свойство для уже установленного контейнера сервлета. – cygri