2014-11-04 39 views
0

我正在使用CXF插件2.0.1版,並在SOAP服務方法中使用GORM。當我對服務運行測試時,它會拋出一個異常,說它無法初始化代理,因爲沒有會話。根據我做的一些搜索,這是一個Hibernate問題,我認爲這意味着GORM沒有被正確初始化。有人能給我一個關於如何在端點類中手動初始化GORM的指針嗎?Grails CXF插件和GORM

回答

1

您習慣在控制器動作(或從那裏調用的方法)中執行Hibernate工作,並且始終存在活動的Hibernate會話,因爲Grails使用視圖中的Open Session模式,在請求開始時打開會話,將它綁定到一個ThreadLocal中,這樣可以方便地訪問它,然後在請求結束時刷新和關閉會話。有些插件也是這樣做的,例如Quartz插件使用作業啓動/停止監聽器來做同樣的事情,所以你可以像控制器一樣方便地使用GORM。

確保會話在代碼塊期間打開的最簡單方法是在任何域類上使用靜態withTransaction方法。它確實啓動了一個事務處理,所以如果你進行數據庫更新,你也會從中受益,但即使你只是閱讀它,也是如此,因爲會話是開放的,你將能夠使用懶惰加載1多和許多許多參考。

事務/會話都無關的領域類,所以挑一個隨機並使用它:

User.withTransaction { 

    def games = Game.findAllByFooAndBar(foo, bar) 
    games.each { ... } 
    ... 
}