Транзакция, сгенерированная для myService.getMetaClass - PullRequest
0 голосов
/ 18 мая 2011

Мне было очень трудно подчинить транзакционное поведение в Grails своей воле.Я уверен, что частью проблемы является наш несколько запутанный уровень обслуживания.В некоторых случаях у нас есть стеки вызовов, которые выглядят следующим образом: controller -> service1 -> service2 -> service3.

В любом случае, мой конкретный вопрос здесь заключается в том, что при попытке "что-нибудь сделать, чтобы это работало"Я пометил MyService как @Transactional (распространение = REQUIRED), но установил флаг транзакции в false.Теперь я вижу транзакцию, созданную для вызова myService.getMetaClass ().Я знаю, что эта конкретная конфигурация странная и, вероятно, не рекомендуется, но это все еще кажется мне неправильным поведением.Как я могу предотвратить эту постороннюю транзакцию?

Код:

class MyController {
    def myService

    def index = {
        myService.myMethod()
    }
}

@Transactional(propagation = REQUIRED)
class MyService {
    static transactional = false

    @Transactional(propagation = SUPPORTS)
    void myMethod() {
        // do stuff...
    }
}

Выход журнала:

2011-05-18 09:43:48,056 TRACE ionSynchronizationManager:  Retrieved value [org.springframework.orm.hibernate3.SessionHolder@453b8cfd] for key [org.hibernate.impl.SessionFactoryImpl@81560cc] bound to thread [http-8081-1]
2011-05-18 09:43:48,056 DEBUG ansaction.JDBCTransaction:  begin
2011-05-18 09:43:48,056 DEBUG te.jdbc.ConnectionManager:  opening JDBC connection
2011-05-18 09:43:48,254 DEBUG ansaction.JDBCTransaction:  current autocommit status: true
2011-05-18 09:43:48,255 DEBUG ansaction.JDBCTransaction:  disabling autocommit
2011-05-18 09:43:48,259 TRACE ibernate.jdbc.JDBCContext:  after transaction begin
2011-05-18 09:43:48,259 TRACE ionSynchronizationManager:  Bound value [org.springframework.jdbc.datasource.ConnectionHolder@2e317c72] for key [org.springframework.jdbc.datasource.DriverManagerDataSource@26767bef] to thread [http-8081-1]
2011-05-18 09:43:48,259 TRACE ionSynchronizationManager:  Initializing transaction synchronization
2011-05-18 09:43:48,259 TRACE or.TransactionInterceptor:  Getting transaction for [MyService.getMetaClass]
2011-05-18 09:43:48,259 TRACE or.TransactionInterceptor:  Completing transaction for [MyService.getMetaClass]
2011-05-18 09:43:48,259 DEBUG ansaction.JDBCTransaction:  commit
2011-05-18 09:43:48,259 TRACE ibernate.impl.SessionImpl:  automatically flushing session
2011-05-18 09:43:48,259 TRACE ractFlushingEventListener:  flushing session
...
A whole lot of Hibernate session flushing logs...
...