Развертывание в веб-контейнере, связывание веб-контейнера или встраивание веб-контейнера - PullRequest
3 голосов
/ 28 декабря 2010

Я разрабатываю приложение, которое должно быть максимально простым для установки конечным пользователем.Хотя конечные пользователи, скорее всего, будут опытными пользователями Linux (или инженерами по продажам), они на самом деле ничего не знают о Tomcat, Jetty и т. Д., И я не думаю, что они должны.

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

Сначала необходимо развернуть приложение в существующем веб-контейнере.,Поскольку мы используем только Suse или RedHat, это кажется достаточно простым.Тем не менее, у нас нет большой идеи о том, чтобы несколько приложений работали в одном веб-контейнере.Это усложняет удаление только одного приложения.

Следующий вариант - просто связать Tomcat или Jetty и сделать так, чтобы скрипты запуска / выключения запускали наш встроенный веб-контейнер.

Или 3-е, вставьте.. Это, вероятно, обеспечит то же взаимодействие с пользователем, что и второй вариант.

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

Я почти исключил возможность развертывания в существующем веб-контейнере, поскольку нам часто нравится устанавливать ограничения на ресурсы для приложений и привязку к процессору, что, как я полагаю, затронет все приложения, развернутые на сервере веб-контейнеров / приложений, а не только конкретное приложение.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 28 декабря 2010

Развертывание нескольких war-файлов (или ear-файлов в случае полноценного сервера приложений Java EE) было идеей, которая когда-то была обещанием, но на практике не очень удалась.

Основная проблема заключается в том, что, несмотря на значительные достижения, горячая перезагрузка WAR EAR остается проблематичной. Утечки памяти, утечки ресурсов, проблемы загрузчика классов ... они продолжают происходить. Таким образом, самый безопасный способ повторного развертывания - перезапустить весь контейнер сервлета или сервер приложений, но при этом удаляются все другие приложения, работающие на нем.

Вторая проблема с развертыванием нескольких приложений в одной AS состоит в том, что они представляют собой лишь тонкий слой изоляции между ними. Приложения могут получать доступ к ресурсам в JNDI из других приложений. Это может не быть проблемой для взаимодействующих приложений, но на самом деле это проблема для приложений, которые могут быть враждебны друг другу.

Как правило, контейнер сервлета не является заменой многозадачной изолированной операционной системы.

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

Дополнительным преимуществом этого является то, что он обеспечивает более простой путь обновления библиотек, от которых зависит ваше приложение. Если вы рассматриваете фиксированную установку Tomcat 6 в качестве платформы развертывания, то одно приложение не может просто обновить Servlet 3.0 с Tomcat 7, поскольку это повлияет на все другие приложения, работающие на том же Tomcat. Это еще более важно для полных стеков Java EE, таких как JBoss AS, так как эти пакеты содержат больше библиотек.

На практике это часто означает, что с фиксированным Tomcat, который запускает несколько приложений, вы просто никогда не сможете обновить свое приложение, чтобы воспользоваться преимуществами более новых библиотек / API, предлагаемых Tomcat, поскольку всегда есть какое-то другое приложение, которое по тем или иным причинам не может быть обновлено. Это очень быстро превращается в полный кошмар.

1 голос
/ 28 декабря 2010

Взгляните на движок сборки Hudson.

Его можно развернуть в существующем веб-контейнере или просто запустить с "java -jar hudson.war".Для Windows он может зарегистрироваться как служба, если он запускается с правами администратора.

Это делается с помощью контейнера сервлета Winstone , который предназначен именно для этого использования.

0 голосов
/ 28 декабря 2010

По моему мнению, это не редкая возможность распространять веб-приложение вместе с контейнером сервлетов (Tomcat или Jetty). Что вы получаете: полный контроль над конфигурацией вашего веб-приложения, конечные пользователи не заботятся о деталях конфигурации. Однако одним из недостатков является увеличение размера установочного пакета.

...