Рассмотрим сервис, который запускает внутри себя некий thread. Будет ли Tapestry 5 управлять этим потоком в части, например. закрытие hibernate сеансов внутри такого потока или нет? (Например, мы можем передать объект Session внутри такого дочернего потока из сервиса. Будет ли Tapestry безопасно закрывать этот сеанс после того, как поток умрет?).
Управляет ли Tapestry всеми потоками внутри приложения?
Ответы (2)
Tapestry может управлять только вещами, объявленными в вашем AppModule.
Как правило, если вы используете ключевое слово «новое», оно не управляется гобеленом.
Если вы хотите, чтобы гобелен управлял вашим исполняемым файлом, взгляните на ParallelExecutor.
Если вы хотите имитировать поток, управляемый гобеленом, вы должны вызвать Perthreadmanager.cleanup() после завершения выполнения вашего исполняемого файла.
Сеанс Hibernate подключается к потоку веб-контейнера, который обрабатывает текущий запрос.
Если вы решите создать свой собственный поток и передать ему этот сеанс, то изменения в этом сеансе будут зафиксированы, только если они будут выполнены до того, как Tapestry зафиксирует или до того, как вышеупомянутый поток веб-контейнера завершит обработку этого запроса.
Контроль Tapestry над сеансом гибернации привязан к текущему запросу, после обработки запроса сеанс закрывается, поэтому порождение еще одного потока, пережившего запрос на использование сеанса, было бы плохой идеей.