Разве ваше решение не дает вам несколько экземпляров веб-приложений, поддерживаемых одной и той же кодовой базой?Если это так, я не думаю, что вы должны что-то делать.
Я не знаю, есть ли готовое решение для этого из одного веб-приложения, но если нетэто то, что я бы сделал.
Первое, что для бесперебойной работы вам понадобятся отдельные экземпляры приложения.
Как этого добиться?
Расширьте класс WicketFilter
(это фильтр сервлета, который связывает контейнер сервлета с Wicket).Этот класс имеет поле с именем webApplication
, которое вам придется заменить на карту vhostname-application.(Это также означает копирование всего кода метода doFilter()
, так что это не очень аккуратное решение. Это скорее взлом. В любом случае)
Это должно помочь, у вас будет одно отдельное приложениеэкземпляр на vhost.
Но ваши переменные сеанса по-прежнему будут совместно использоваться сайтами, что является плохой идеей.(На практике ваш браузер не будет отправлять файлы cookie, выпущенные одним виртуальным хостом другому виртуальному хосту, но если идентификатор URL-адреса сеанса вставлен в URL, вы можете пересекать виртуальные хосты таким образом.)
Чтобы избежать перепутывания сеансоввам также придется изменить метод getFilterConfig()
, чтобы он возвращал разные конфигурации для разных экземпляров приложения.(Имя фильтра - это атрибут, который используется для префикса переменной сеанса.)
Я не уверен на 100%, что это будет работать, я не пробовал, но если вы не можете найти лучшего (и большеглавное, более чистое) решение, это ваш единственный вариант.