Мне нужно знать, когда Hibernate завершил свою транзакцию - PullRequest
0 голосов
/ 11 ноября 2010

У меня есть объект, для которого зарегистрирован CallBackListener с использованием postPersist и postUpdate. Слушатель берет объект и отправляет идентификатор в очередь JMS, которая выполняет дальнейшую обработку. Отправка и потребление сообщений настолько быстры, что они происходят до того, как исходный сеанс завершил свою транзакцию.

В результате MDB либо не может найти объект, либо объект устарел. Что я действительно хочу, так это способ проверки MDB, чтобы убедиться, что исходная транзакция завершена, прежде чем использовать сообщение.

Есть предложения?

1 Ответ

2 голосов
/ 11 ноября 2010

Возможно, вы сможете зарегистрировать экземпляр org.hibernate.Interceptor с помощью SessionFactory или Session и отправить сообщение в очередь методом afterTransactionCompletion(Transaction tx) после консультации с Transaction.wasCommitted. В методе afterTransaction вам может потребоваться доступ к идентификатору вашей сущности в каком-то глобальном локальном потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...