Я использую Grails GPaars для создания асинхронного блока.Соотношение объектов GORM не загружается в асинхронном блоке
В BuildConfig:
compile 'org.codehaus.gpars:gpars:1.2.1'
compile 'org.codehaus.jsr166-mirror:jsr166y:1.7.0'
Я определил вспомогательный класс:
class TaskService {
private ForkJoinPool pool = new ForkJoinPool()
/**
* Executes the given closure in a new thread.
* @param args is a map of arguments to be used in the async closure.
* @return
*/
def executeAsync(args, closure = null) {
if(!closure) {
closure = args
args = null
}
GParsPool.withExistingPool(pool) { closure.callAsync(args) }
}
}
Теперь в контроллере я:
TrackingEmail tEmail = TrackingEmail.get(trackingEmailId)
Device targetDevice = tEmail.device
Бывший работает device
извлекается из Объект TrackingEmail.
Теперь я пытаюсь сделать то же самое в блоке асинхронного:
taskService.executeAsync(trackingEmailId: trackingEmailId) { data ->
TrackingEmail tEmail = TrackingEmail.get(data.trackingEmailId)
Device targetDevice = tEmail.device
}
В этом асинхронном блоке только tEmail
извлекается из базы данных. Вторая строка не выполняется.
Как получить реляционные объекты в асинхронном блоке?
Оп! Я успешно использовал grails.async.Promises.task. И это требует .withTransaction(). –