У меня есть приложение Grails, у которого есть служба, которая создает отчеты. Отчет определяется как:
class Report {
Date createDate
String reportType
List contents
static constraints = {
}
}
Служба создает отчет и заполняет contents
в виде списка, который возвращается createCriteria
.
Моя проблема в том, что моя служба утверждает, что сохраняет отчет, никаких ошибок не появляется, ведение журнала говорит, что все это есть, но когда я иду на вызов show из контроллера в этом отчете, он говорит, что содержимое равно нулю.
Еще один важный момент: моя служба вызывается из очереди сообщений ActiveMQ. Сообщение от моего контроллера отчетов.
Контроллер:
class ReportController {
def scaffold = Report
def show = {
def rep = Report.get(params.id)
log.info("Report is " + (rep? "not null" : "null")) //says report is not null
log.info("Report content is " + (rep.contents? "not null" : "null")) //always says report.contents is null.
redirect(action: rep.reportType, model: [results: rep.contents, resultsTotal: rep.contents.size()])
}
}
Мой сервис, который создает отчет:
class ReportService {
static transactional = false
static expose = ['jms']
static destination = "Report"
void onMessage(msg)
{
this."$msg.reportType"(msg)
}
void totalQuery(msg)
{
def results = Result.createCriteria().list {
//This returns exactly what i need.
}
Report.withTransaction() {
def rep = new Report(createDate: new Date(), reportType: "totalQuery", contents: results)
log.info("Validation results: ${rep.validate()}")
if( !rep.save(flush: true) ) {
rep.errors.each {
log.error(it)
}
}
}
}
Есть ли что-то очевидное, что мне здесь не хватает? Я думаю, что поскольку все мои модульные тесты работают, контекст гибернации не передается через очередь сообщений. Но это породило бы исключения, не так ли? Я уже несколько дней бьюсь над этой проблемой, поэтому точка в правильном направлении была бы отличной.
Спасибо