Я получаю следующее сообщение об ошибке Spring Framework:
Invocation of getLogoForGlobalConext() in class $Proxy44 threw exception
org.springframework.transaction.UnexpectedRollbackException:
Transaction rolled back because it has been marked as rollback-only
at template/includes/macros.vm line 1651, column 43
Я открыл macros.vm
и посмотрел строку 1651, и это выглядит так:
#set ($globalLogo = $spaceManager.getLogoForGlobalContext());
Из моего исследования похоже, что $Proxy44
на самом деле является $spaceManager
переменной (или экземпляром DefaultSpaceManager.java
).
Это сообщение появляется случайно, и когда веб-приложение пытается загрузить изображение / вложение, находящееся где-то на веб-сервере / в базе данных.
Менеджер вложений управляется Spring Transaction Management, и при загрузке изображения / вложения используются следующие атрибуты транзакции:
распространение - для всех методов в диспетчере вложений
распространение и только чтение - для всех методов в менеджере вложений, начинающихся с "get".
Атрибуты определены в Spring Framework - Глава 9. Управление транзакциями .
Я думаю, что мне нужно установить тайм-аут для транзакций (например, установить его в бесконечность).