16

私の Grails サービスには、トランザクションに関係のない飲み込まれた例外が原因で、ドメイン オブジェクトの永続性に関係がない場合でも、トランザクションがロールバックされるという問題があります。

私のサービスでは、次のようなものがあります

updateSomething(domainObj) {
    def oldFilename = domainObj.filename
    def newFilename = getNewFilename()

    domainObj.filename = newFilename
    domainObj.save(flush: true)

    try {
        cleanUpOldFile(oldFilename)
    } catch (cleanupException) {
        // oh well, log and swallow
    }
}

私が見ているのは、古いファイルをクリーンアップしているときに例外が発生した場合、ログに記録して飲み込みますが、ドメイン オブジェクトの更新が既に完了しているにもかかわらず、トランザクションがロールバックすることです。

スコープ トランザクションがクリーンアップの前に完了するように制限するにはどうすればよいですか。または、ロールバックを引き起こさないようにクリーンアップの例外を取得する別の方法はありますか?

記録のために、私はGrails 2.1.1を使用しています

4

2 に答える 2

8

@Burt Beckwithの回答に加えて、トランザクションを必要としないサービスがある場合 (私の場合は実際に行いました)、追加することですべてのパブリック メソッドでトランザクションをオフにすることができます。

static transactional = false

サービスクラスに。

于 2013-04-05T01:02:49.857 に答える