Vaadin запускает несколько экземпляров приложения для одного приложения - PullRequest
0 голосов
/ 26 марта 2012

Я смотрю на мое приложение Vaadin, работающее на локальном сервере tomcat с JProfiler.Это показывает, что каждый раз, когда я запускаю сервер и запускаю свое приложение, у меня есть 3 экземпляра моего основного класса Application.Если я закрою приложение в браузере или даже полностью закрою браузер, останется 2.Я заметил, что метод init () приложения вызывается 3 раза при запуске, хотя я сам никогда не вызываю его явно.Я использую паттерн Threadlocal (но с InheritableThreadlocal).

Для меня это не выглядит нормально, есть ли что-то, что может вызвать такое поведение?

(скопировал этот вопрос из моего поста на форумах vaadin)

1 Ответ

1 голос
/ 26 марта 2012

Из вашего описания я понимаю, что Application - это класс, написанный вами (а не предоставленный Ваадином), и что вы каким-то образом сохраняете экземпляры этого класса в ThreadLocal.

.объяснил бы поведение, которое вы видите: Tomcat запустит несколько потоков для обработки клиентских запросов.Для каждого потока новый экземпляр Application будет сохранен в ThreadLocal.

Попробуйте вместо этого (злой) шаблон Singleton или (лучше) внедрение зависимостей вместо одноэлементной области.

Если вы используете шаблон синглтона, убедитесь, что вы используете код в разделе «Построение в многопоточных приложениях», иначе вы получите странные ошибки в Tomcat.В этой статье о JavaWorld это подробно объясняется: Просто синглтон

РЕДАКТИРОВАТЬ Основываясь на ваших отзывах: поведение, которое вы видите, является ожидаемым и правильным.Tomcat использует потоки для обработки запросов, и он заранее создаст пару, чтобы быть готовым к бизнесу (в вашем случае он порождает три).

...