При сохранении объекта домена в службе с flush: true
при сохранении домена объект не будет сохранен, прежде чем я буду использовать этот объект.Возможно ли принудительное удаление домена в службе?
Domain domain = new Domain(property: something.toString()).save(failOnError: true, flush: true)
Я не уверен, как заставить флеш в спящей сессии в одном из сервисов, которые я использую.
В каком-то контексте я делаю вызов API для службы API, который отправляется на другую службу, где я сохраняю домен, а затем обратно в службу API, а затем добавляю строку в очередь RabbitMQ, а затем возвращаю 200OK для пользователя. Но поскольку домен не сохраняется во второй службе, когда элемент добавляется в очередь, rabbitMQ обрабатывает сообщение до того, как домен будет сохранен.
EDIT:
Мой текущий фикс:
контроллер API:
def apiActionCreate()
{
Map returnMap = apiService.createAction(params, request)
rabbitSend staticQueue, [id: returnMap.id.toString()]
}
сервис API:
Map createAction(GrailsParameterMap params, HttpServletRequest request)
{
//do some logic related to a related domain
seperateService.someAction(domain.id)
}
Service, где я экономлю домен:
Map someAction(UUID id)
{
Domain domain = new Domain(property: something.toString()).save(failOnError: true, flush: true)
}
Возможно, это из-за [еще не совершенных] транзакций? –
Выше именно поэтому экземпляр еще не существует. Подтверждение 'flush: true' на экземпляре домена - это просто. Подсказка к Hibernate для очистки любого ожидающего SQL до базы данных. Однако, в зависимости от уровня изоляции транзакции эти изменения могут быть недоступны для других потоков или сеансов Hibernate. Вы могли бы изучить установку менее ограничительного уровня изоляции, но у этого есть недостаток фантомных или грязных чтений (в зависимости от того, какой уровень изоляции вы выбираете). –
Хмм .. @JoshuaMoore, имея в виду, было бы проще просто перейти от контроллера к службе API, чем бы мне ни понадобилось и обратно к контроллеру? Мой опыт аналогичных проблем заключается в том, что когда вы возвращаетесь к контроллеру из службы, информация, сохраненная в этой службе, сохраняется в базе данных. –