Я пытаюсь создать несколько потоков в сервисе, но я получил hibernateException: нет сеанса .... Я уже видел обсуждение этого в stackoverflow с решением проблемы выбрасывания RuntimeException. В моем случае не работает.
Вот мой сервисный код:
class MatchService {
static transactional = true
def void start(Match match) {
Thread.start {
Match updateMatch = matchSituation(match)
if(!updateMatch.save()) {
throw new RuntimeException("match is not valid and cannot be saved!")
}
}
}
def Match matchSituation(Match m) {
Random random = new Random()
if(m.teamH.averagePlayerValue > m.teamA.averagePlayerValue) {
m.golTeamH = random.nextInt(5)
}
else {
m.golTeamA = random.nextInt(4)
}
return m
}
}
класс работы:
class TestJob {
def matchService
List<Match> matchList = new ArrayList()
static triggers = {
cron name: 'trigger', cronExpression: "0 0/1 15 ? * WED"
}
def group = "threadGroup"
def execute() {
Cal.get(1).matches.each{
match ->
matchList.add(match)
}
for(Match m: matchList) {
if(!m.validate()) {
throw new MatchException( message: "match not valid!!" , match:m)
}
matchService.start(m)
}
}
}
EDIT
С плагином backgroundThread (который должен обрабатывать спящий сеанс):
backgroundService.execute("Calculating match", {
def backgroundMatch = match
backgroundMatch = matchSituation(backgroundMatch)
if(!backgroundMatch.save()) {
throw new RuntimeException("match is not valid and cannot be saved!")
}
})
Я получаю эту ошибку
ОШИБКА events.PatchedDefaultFlushEventListener - Не удалось синхронизировать состояние базы данных с сеансом