2013-03-22 3 views
0

Рассмотрите сервис, который начинается с thread внутри него. Будет ли Tapestry 5 управлять этой нитью в части, например. закрытие hibernate сеансов внутри такой темы или нет? (Например, мы можем передать Session объект внутри такого дочернего потока из службы. Будет ли Tapestry безопасно закрыть этот сеанс после того, как поток будет умирать?).Поддерживает ли Tapestry все темы внутри приложения?

ответ

0

Сессия спящего режима прикреплена к потоку веб-контейнера, который обрабатывает текущий запрос.

Если вы решили создать свой собственный поток и передать ему этот сеанс, то изменения на этом сеансе будут выполняться только в том случае, если они выполняются до того, как Гобелен совершит или до того, как поток вышеупомянутого потока веб-контейнера обработает этот запрос.

Управление гобеленом сеанса hibernate привязано к текущему запросу, после того как запрос был обработан, сеанс закрыт, поэтому создание другого потока, который оживляет запрос на использование сеанса, будет плохой идеей.

+0

Ничего не понято. Можете ли вы ответить: да или нет по моему вопросу? – Andremoniy

+0

В гобелене нет ничего, что связывает сеанс гибернации с запросом. Спящий сеанс, предоставляемый гобеленом, представляет собой ленивое загруженное значение perthread. Подходящее соединение db создается по требованию. Вам просто нужно убедиться, что вы вызываете perthreadmanager.cleanup, если вы находитесь на породе. Гобелен называет это для вас, если по запросу thread –

+0

Объект Session является прокси; пропустите прокси-сервер в новый поток и создаст новый реальный экземпляр для этого нового потока. Таким образом, нет необходимости в этом ... просто введите глобальный объект Session. –

2

Гобелен может управлять вещами, объявленными в вашем AppModule.

Как правило, если вы используете «новое» ключевое слово, оно не управляется гобеленом.

Если вы хотите гобелен управлять своим исполняемым, посмотри на ParallelExecutor

Если вы хотите, чтобы имитировать гобелен удался нить, вы должны вызвать Perthreadmanager.cleanup() как только ваш работоспособной закончил.

+0

У службы PerThreadManager есть API, чтобы помочь в этом. См. Http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/PerthreadManager.html#run(java.lang.Runnable) –

Смежные вопросы