PostInsertEventListener выполняется до обновления БД - PullRequest
0 голосов
/ 25 октября 2011

Я поместил Thread.sleep (50000) в слушатель, чтобы доказать это, и данные буквально не хранились в БД в течение 50 с.

Это странно и довольно разочаровывающе, потому что я передаю идентификатор сущности (которая там находится), к веб-службе, обращающейся к той же базе данных. Если я не сделаю вызов в новом потоке, веб-служба выдает исключение, потому что данных там нет.

Я мог бы применить хакерский метод и сделать вызов в новом потоке, возможно с некоторой задержкой раньше, но это было бы ужасно

Пожалуйста, помогите.

1 Ответ

1 голос
/ 25 октября 2011

Это не связано с тем, что вставка выполняется после слушателя.Это связано с тем, что фиксация транзакции выполняется после.Ваш веб-сервис использует другую транзакцию в качестве той, в которую вы вставляете данные, поэтому он не видит вставленные данные, пока транзакция вставки не будет зафиксирована.

Вам понадобится двухфазное принятие, чтобы сделать то, что вы хотите,Запустите веб-службу через очередь JMS и убедитесь, что механизм JMS и база данных обрабатываются уникальным менеджером транзакций XA.

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