Mam następujący kod:Grails UnexpectedRollbackException wystąpiły: Nie wiem, dlaczego
class ServiceA {
def save(Object object) {
if (somethingBadComesBack) {
throw new CustomRuntimeException(data)
}
}
}
class ServiceB {
def serviceA
def save(Object object) {
try {
serviceA.save(object)
// do more stuff if good to go
} catch(CustomRuntimeException e) {
// populate some objects with errors based on exception
}
}
}
class ServiceC {
def serviceB
def process(Object object) {
serviceB.save(object)
if (object.hasErrors() {
// do some stuff
}else{
// do some stuff
}
def info = someMethod(object)
return info
}
}
class SomeController {
def serviceC
def process() {
def object = .....
serviceC.save(object) // UnexpectedRollbackException is thrown here
}
}
Kiedy ServiceA.save()
nazywa i wystąpi wyjątek, ServiceC.save()
się rzuca UnexpectedRollbackException
gdy próbuje wrócić.
Zrobiłem następujące:
try {
serviceC.process(object)
}catch(UnexpectedRollbackException e) {
println e.getMostSpecificCause()
}
i otrzymuję:
org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only
nie jestem pewien, gdzie zacząć szukać, jak to naprawić.
Dzięki Burt. Będziemy bawić się z tym podejściem i zobaczyć, co mogę dostać. Odpowiem z powrotem ... – Gregg
Grails 2.3.7 będzie zawierał domyślną funkcję obsługi tej sytuacji: http://jira.grails.org/browse/GRAILS-11145 –
@FlareCoder - Dziękujemy za udostępnienie tego! Właśnie zaktualizowałem grę z wersji 2.3.6 do 2.3.7 i problem został rozwiązany. – arcseldon