2014-08-28 34 views
6

有關此錯誤的以前的問題涉及到休眠版本問題或運行測試。我不認爲這是這種情況。class []上的方法在Grails應用程序之外使用

在一個Grails服務類,我有:

private static User anon = User.findByUsername('anonymous') 

,這是創建錯誤:

Caused by IllegalStateException: Method on class [User] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly. 

我試圖實例化一個私有靜態屬性與存儲在數據庫中的對象,但我一定在做一些非常錯誤的事情。感謝任何幫助,建議和指針。

回答

7

它不會工作,使這個static,因爲那會盡量讓findByUsername致電時,該服務加載點,這是以前GrailsApplication初始化過程完成。最早可以可靠地調用GORM方法的時間是BootStrap,所以我傾向於在這種情況下做的是在服務上創建一個初始化方法,然後從初始化閉包中調用該方法。

+0

感謝您的回答,Ian – malc 2014-08-28 15:43:47

2

我知道這是舊的,但是,您使用的是哪個版本的grails?從grails 2.3遷移到grails 2.5後,我遇到了同樣的問題。

經過一段相當痛苦的調查,我發現這個問題是運行新的分叉模式下性能測試時,容易從BuildConfig.groovy刪除這些選項來解決:

grails.project.fork = [ 
     // configure settings for compilation JVM, note that if you alter the Groovy version forked compilation is required 
     //compile: [maxMemory: 256, minMemory: 64, debug: false, maxPerm: 256, daemon:true], 

     // configure settings for the test-app JVM, uses the daemon by default 
     test: false, 
     // configure settings for the run-app JVM 
     run: [maxMemory: 1536, minMemory: 512, debug: false, maxPerm: 1024, forkReserve:false], 
     // configure settings for the run-war JVM 
     war: [maxMemory: 1536, minMemory: 512, debug: false, maxPerm: 1024, forkReserve:false], 
     // configure settings for the Console UI JVM 
     console: [maxMemory: 1536, minMemory: 64, debug: false, maxPerm: 1024] 
] 

問候。

相關問題