2010-12-28 9 views
3

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

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

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

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

Или 3rd, embed .. Это, вероятно, обеспечит то же самое, что и у второго пользователя.

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

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

спасибо.

+0

Спасибо за ответы. Кажется, что соединение (или, в некоторых случаях, вложение) - это способ продвижения вперед. – Jason

ответ

3

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

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

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

В общем, контейнер сервлетов, таким образом, не заменяет многозадачную изолирующую операционную систему.

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

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

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

+0

Многие причины, которые вы упоминаете как недостатки, также могут быть преимуществами, в зависимости от ситуации. То, что вы говорите, истинно, если вы хотите 100% изоляции, но во многих случаях цель состоит в том, чтобы целенаправленно делиться. – GreenieMeanie

+0

Да, если у вас есть «приложения», которые на самом деле не являются отдельными приложениями, а скорее похожими на * взаимодействующие модули приложений *, то вы действительно можете поделиться ресурсами. В некотором роде способность развертывать несколько EAR или WAR можно затем рассматривать как дополнительное расслоение в одном приложении. –

+0

Что бы вы порекомендовали как минимальное место для размещения нескольких JVM на одном и том же оборудовании? –

1

Посмотрите на Hudson build engine.

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

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

0

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

Смежные вопросы