2013-09-23 2 views
1

Я не уверен, что мне что-то не хватает, но можно ли управлять ручными транзакциями в Grails (в классных классах src/groovy) без использования метода withTransaction?Ручные транзакции Grails без классов домена

У меня нет каких-либо классов домена в моем приложении, поскольку я звоню в сервисный уровень другого веб-приложения Java.

ответ

2

Способы обслуживания являются транзакционными по умолчанию. Это самый простой способ получить транзакционного поведения в Граалей:

class SomethingService { 
    def doSomething() { 
     // transactional stuff here 
    } 
} 

Если вам нужно тонкоуровневого контроль, чем это, вы можете начать и конечные операции программно через спящий режим:

class CustomTransactions { 
    def sessionFactory 

    def doSomething() { 
     def tx 
     try { 
      tx = sessionFactory.currentSession.beginTransaction() 
      // transactional stuff here 
     } finally { 
      tx.commit() 
     } 
    } 
} 
+1

Вы также можете использовать Spring '@ Transactional' аннотации о методах обслуживания –

+0

Если приложение не имеет классов домена не будет никаких причин, чтобы иметь плагин с гибернацией, поэтому вышеупомянутое не было бы возможно –

2

Единственный способ начать транзакции в приложении Grails - это те, что указаны в this answer.

У меня нет каких-либо классов домена в моем приложении, поскольку я звоню в сервисный уровень другого веб-приложения Java.

Действительно ли это отдельное приложение или Java JAR, от которого зависит ваше приложение Grails? Если первое, то транзакции должны управляться приложением, выполняющим упорство.

2

Вышеуказанный метод также верен.

Вы также можете использовать @Transactional(propagation=Propagation.REQUIRES_NEW)

class SomethingService{ 

    def callingMathod(){ 
    /** 
    * Here the call for doSomething() will 
    * have its own transaction 
    * and will be committed as method execution is over 
    */ 
    doSomething() 
    } 


    @Transactional(propagation=Propagation.REQUIRES_NEW)  
    def doSomething() {  

     // transactional stuff here 

    } 

}

Смежные вопросы