vpunis
(Victoria Punis)
1
Добрый день!
При попытке отправить сообщение
notificationManager.createNotification()
.withSubject(subject)
.withRecipientUsernames(recipients)
.toChannelsByNames(channel)
.withContentType(ContentType.HTML)
.withBody(body)
.send()
из after commit event получаем ошибку
No transaction is currently active
Подскажите, пожалуйста, пути обхода. Очень для нас критичный момент.
(Думаю, там примерно та же беда, что и у товарища отсюда:
Наверное, где-то под капотом сидит dataManager, который куда-то сейвит без joinTransaction(false))
(у нас версия 1.5.4)
pinyazhin
(Roman Pinyazhin)
3
Добрый день!
Ошибка падает из UserRepository, который пытается достать пользователей через DataManager.
Попробуйте внутри метода сами загрузить пользователей и поставить их в уведомление, например:
@TransactionalEventListener
public void onOrderChangedAfterCommit(final EntityChangedEvent<Order> event) {
User user = dataManager.load(User.class)
.query("where e.username = :username")
.parameter("username", "admin")
.joinTransaction(false)
.one();
notificationManager.createNotification()
.withSubject("subject")
.withRecipients(user)
.toChannelsByNames(InAppNotificationChannel.NAME)
.withContentType(ContentType.HTML)
.withBody("Body")
.send();
}
Мы подумаем что можно сделать, чтобы метод withRecipientUsernames() мог работать и в After Commit слушателе.
1 лайк
krivopustov
(Konstantin Krivopustov)
5
Можно также стартовать новую транзакцию для всего метода слушателя:
@TransactionalEventListener
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void onOrderChangedAfterCommit(final EntityChangedEvent<Order> event) {
1 лайк