Я знаю, что контейнер сервлета, такой как Apache Tomcat, запускается в одном экземпляре JVM, что означает, что все его сервлеты будут работать в одном процессе.
Я также знаю, что архитектура контейнера сервлета означает, что каждое веб-приложение существует в своем собственном контексте, что предполагает, что он изолирован от других веб-приложений.
Как изображено здесь:
Принимая, что каждое веб-приложение изолировано, я ожидал бы, что вы могли бы создать 2 копии одинакового веб-приложения, изменить имена и пути контекста каждого (а также любую другую соответствующую конфигурацию) и запустить их параллельно без один влияет на другой. Ответы на этот вопрос, похоже, поддерживают эту точку зрения.
Однако коллега не согласен с их опытом попытки именно этого.
Они взяли веб-приложение и попытались запустить 2 отдельных экземпляра (с разными именами и т.д.) в одном контейнере сервлетов и столкнулись с проблемами с конфликтующими 2 экземплярами (я не могу больше рассказать о том, что я не участвовал в этом Работа).
Исходя из этого, они утверждают, что, поскольку веб-приложения работают в одном и том же пространстве процессов, они не могут быть изолированы, и такие вещи, как атрибуты класса, в конечном итоге будут непреднамеренно разделены. Этот ответ, кажется, предлагает то же самое
Оба представления не кажутся совместимыми, поэтому я спрашиваю вас: Контейнеры сервлетов предотвращают конфликтующие веб-приложения в одном и том же контейнере?
Если да, Как это сделать?
Если нет, Почему возникают помехи?
и, наконец, В каких обстоятельствах может возникнуть конфликт между веб-приложениями и вызвать какие-либо другие помехи?, возможно, сценарии, связанные с ресурсами в файловой системе, нативном коде или соединениях с базой данных?