Перезапускается ли JVM, обслуживающая ваше веб-приложение, при повторном развертывании на сервере приложений? - PullRequest
2 голосов
/ 15 мая 2009

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

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

Ответы [ 2 ]

1 голос
/ 15 мая 2009

Краткий ответ на этот вопрос - нет. Я не знаю ни одного сервера приложений, который бы так себя вел. Однако есть несколько вещей, на которые следует обратить внимание. Ниже приводится упрощенное объяснение:

Когда ваш сервер приложений (т.е. JBoss w / Tomcat) запускается, он загружает некоторые классы в загрузчик классов, который будет использоваться всеми приложениями. Когда оно развертывает ваше приложение, оно загружает эти классы в свой собственный загрузчик классов. Когда вы удаляете приложение, загрузчик классов и все его классы будут собираться мусором. Поэтому, когда приложение будет повторно развернуто, все ваши классы будут перезагружены, и ваши синглтоны будут восстановлены.

После повторного развертывания ваше приложение будет (по крайней мере, теоретически) вести себя так же, как и после перезапуска JVM / сервера приложений.

Просто последний совет: если вы хотите использовать шаблон Singleton в своем корпоративном Java-приложении, убедитесь, что вы знаете ограничения одноэлементных объектов в среде сервера приложений. Например, вы можете столкнуться с проблемами, если хотите кластеризовать свое приложение.

1 голос
/ 15 мая 2009

Нет, не будет (по крайней мере, ни один сервер приложений, о котором я знаю). Спецификация сервлета предоставляет вам хук ServletContextListener для управления жизненным циклом приложения. Некоторые серверы приложений, такие как JBoss, имеют специальные аннотации для одноэлементных компонентов (@Service), а EJB 3.1 предоставляет аннотацию @Singleton. Еще одна вещь, о которой следует помнить при использовании синглетонов, - это то, что произойдет, когда вы кластеризуете свое приложение, вам понадобится высокая доступность (HA) или какой-либо тип репликации, если вы не используете подход без разделения ресурсов. По этой причине распределенные кэши хороши.

...