Можно ли принудительно очистить домен, сохраняемый в службе?
При сохранении объекта домена в службе с flush: true
при сохранении домена объект не сохраняется до того, как мне придется его использовать.
Domain domain = new Domain(property: something.toString()).save(failOnError: true, flush: true)
Я не уверен, как принудительно завершить сеанс гибернации в любой из служб, которые я использую.
Для некоторого контекста я делаю вызов API для службы API, которая переходит к другой службе, где я сохраняю домен, затем возвращаюсь к службе API, затем добавляю строку в очередь RabbitMQ, затем возвращаю пользователю 200OK, Но поскольку домен не сохраняется во втором сервисе, когда элемент добавляется в очередь, rabbitMQ обрабатывает сообщение перед сохранением домена.
РЕДАКТИРОВАТЬ:
Мое текущее исправление:
Контроллер 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)
}
Сервис, где я сохраняю домен:
Map someAction(UUID id)
{
Domain domain = new Domain(property: something.toString()).save(failOnError: true, flush: true)
}
1 ответ
Вы можете создать транзакцию, которая будет сохранена в DDBB, когда закончите.
MyDomain.withTransaction{
somecode()
}