Грааль 2.4.3. Несколько источников данных. Как откатить транзакцию при возникновении ошибки?

Допустим следующая ситуация..

  • Я объявил три разных источника данных (источник данных, источник данных_b и источник данных_с) в моем DataSource.groovy.
  • У меня есть три разных объекта домена, которые используют эти источники данных.
  • В своем Контроллере я вызываю метод из сервиса, в котором сохраняю объекты a, b и c. Мне нужно, чтобы при возникновении ошибки ни один из них не сохранялся.

So:

DataSource.groovy

environments {
    development {
        dataSource {
            [...]
        }
        dataSource_b {
            [...]
        }
        dataSource_c {
            [...]
        }
    }
}

ObjectA.groovy

    class ObjectA{

    [...]

    static mapping = {
        //use default datasource
    }

}

ObjectB.groovy

    class ObjectB{

    [...]

    static mapping = {
        datasource 'b'
        [...]
    }

}

ObjectC.groovy

class ObjectC{

    [...]

    static mapping = {
        datasource 'c'
        [...]
    }

}

MyService.groovy

public savingObjects(ObjectA a,ObjectB b,ObjectC c){ 
    a.save()
    b.save()
    c.save()
}

Я использую Grails 2.4.3 и знаю, что методы в службах являются транзакционными, но, например, если возникает ошибка при сохранении 'c', 'a' и 'b' сохраняются без сброса (сохранить flush:true) .

Любая идея исправить это поведение? Я не хочу использовать источники данных XA.

Спасибо!


person NachoB    schedule 26.08.2016    source источник
comment
То, что вы описываете, - это именно то, почему существуют источники данных XA.   -  person Joshua Moore    schedule 27.08.2016
comment
Ну, в таком случае, если вы не хотите использовать XA datsource, добавьте свой собственный механизм кэширования ошибок и откатите изменения вручную. stackoverflow.com/questions/8421631/   -  person Vinay Prajapati    schedule 27.08.2016
comment
Да, я знаю, что это цель источников данных XA. Я подумал, что, возможно, Grails может предложить другое решение. Итак.. Я думаю, что добавлю свой собственный механизм кэширования ошибок. Спасибо за ответ!   -  person NachoB    schedule 30.08.2016