Назад | Перейти на главную страницу

как реализовать единый экземпляр веб-приложения

Я хочу запустить только один экземпляр моего веб-приложения, развернутого в tomcat 5.5, как его реализовать.

например, если в системе есть 2 сервера tomcat, каждый из которых имеет имя веб-приложения xxx, я не хочу, чтобы два приложения работали параллельно, только одно должно запускаться одновременно.

предположим, если пользователь обращается к index.jsp внутри tomcat 1, а после этого, когда он пытается получить доступ к index.jsp из tomcat 2, этого не должно происходить

Вот один workaround способ сделать это (при условии, что оба экземпляра Tomcat находятся на одном хосте):

  • Развертывать веб-приложение по его собственному пути, используя параметр docBase, а не копировать его физически под индивидуальным webapp каталог обоих Tomcats
  • В вашем сервлете contextInitialized метод начать ServerSocket на конкретный порт, например: 5555
  • Если вы не можете запустить ServerSocket и он выдает исключение, перехватите это исключение и повторно вызовите исключение RuntimeException из того же метода contextInitialized.

Таким образом, как только вы запустите первый экземпляр приложения, он начнет прослушивать этот порт. 5555. Теперь, когда вы запускаете 2-й экземпляр, он, очевидно, не может получить порт 5555 поскольку он уже используется и приведет к исключению RuntimeException, что, в свою очередь, заставит Tomcat ** не развертывать ** 2-й экземпляр того же веб-приложения.