Параллельный запуск нескольких версий веб-приложения сервлета - PullRequest
1 голос
/ 12 января 2010

Я хочу запустить несколько версий (например, myapp2.1, myapp2.2 ...) нескольких веб-приложений на основе сервлетов Java.

Одной из возможностей может быть развертывание каждой версии в отдельном контексте сервлета (который должен иметь свой собственный загрузчик классов ?!). Но я думаю, что им будет трудно управлять, и он не будет гибким, поскольку приложение представляет собой довольно большой блок. Что если приложение должно содержать сервис в двух разных версиях? Может быть, это не очень хорошая идея ...

Среда будет GlassFish> = 3.0.

Как лучше запустить несколько версий приложения сервлета параллельно? Может ли помочь OSGI?

Ответы [ 3 ]

4 голосов
/ 12 января 2010

Каждое веб-приложение будет загружено с использованием собственного ClassLoader (по крайней мере, любой контейнер, о котором я знаю; я не могу представить, почему контейнер не сделал бы этого). Так что, это должно сработать. Разные версии ваших классов не будут мешать друг другу.

Убедитесь, что вы не включили ни один из ваших классов в собственный ClassLoader контейнера - например, поместив файл .jar в lib / в каталог Tomcat (не уверен в эквиваленте для Glassfish). Это будет доступно всем веб-приложениям и переопределит все, что находится в веб-приложении.

2 голосов
/ 12 января 2010

Одной из возможностей может быть развертывание каждой версии в отдельном контексте сервлета (который должен иметь свой собственный загрузчик классов ?!).

Приложения J2EE используют отдельную иерархию загрузчиков классов и изолированы друг от друга. Цитирование Загрузчики классов и J2EE :

иерархия загрузчика классов J2EE

J2EE указывает, что иерархия Загрузчики классов необходимы для достижения изоляция между приложениями, но оставляет продавцам определить Точная структура. Однако соблюдать со спецификацией J2EE, большинство у поставщиков есть загрузчики классов для каждого из компоненты приложения J2EE в зависимости от его местоположения. В дальнейшем, эти загрузчики классов имеют иерархию между собой, то есть у них есть родительские отношения. Рисунок 21.5 показывает пример иерархии Загрузчики классов. Обратите внимание, что каждый загрузчик классов сервера приложений иерархия может немного отличаться. Производители серверов приложений иногда как правило, относятся к двум или более из них Загрузчики классов как один. Например, определенный сервер приложений может лечить Загрузчик классов приложений и EJB загрузчик должен быть таким же. Но общие понятия, стоящие за иерархией оставаться прежним.

Пример иерархии загрузчиков классов на серверах приложений J2EE http://www.objectsource.com/j2eechapters/Ch21-ClassLoaders_and_J2EE_files/image016.jpg

Рисунок 21.5 Пример иерархии загрузчиков классов на серверах приложений J2EE.

Так что, да, у каждого веб-приложения есть свои ClassLoader (слава богу).

Но я думаю, что это будет трудно управлять и не будет гибким.

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

0 голосов
/ 12 января 2010

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

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


РЕДАКТИРОВАТЬ: Вы отредактировали вопрос.

Вы можете просто назвать развернутый файл войны, например application20091230, application20091231, application20100101, и позволить Glassfish назначить его соответствующему URL-адресу. Если дата недостаточно детализирована, тогда либо datetime, либо buildnumber.

Это то, что мы делаем для нескольких версий на одном внутреннем тестовом сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...