2015-12-17 9 views
0

Я хочу знать, возможно ли заставить Hibernate вызвать мой пользовательский RevisionListener в том же потоке, что и поток сеанса пользователя? (GWT) Мне нужно такое поведение для хранения в версиях имени пользователя, который вносит изменения.Hiberate Envers and threads

ответ

1

Двигатель hibernate и envers запускается в потоке, который загружает фреймворк, и нет возможности делегировать выполнение слушателей другим потокам.

Информация ваши потребности слушателя должны быть переданы или предоставлены во время вызова и слушатель мог бы использовать ThreadLocal для поиска значения и использовать его так же, как, каким образом приложения на основе Spring Security получить эту информацию в ревизионных слушателей через SpringSecurityContextHolder.

+0

Я думаю, что не понимаю - если envers запускаются в определенном потоке, не будет ли ThreadLocal возвращать всегда один и тот же объект? – mnowak

+0

@mnowak Envers работает в той же теме, что и спящий режим. Если этот поток, в котором вы выполняете операции сеанса, не имеет доступа к любому контексту, который вам нужен, вам необходимо передать его или сделать его доступным. Это проблема с потоковой моделью с вашим приложением GWT, а не спящим. – Naros