2014-08-28 13 views
6

Các câu hỏi trước về lỗi này đề cập đến vấn đề phiên bản ngủ đông hoặc chạy thử nghiệm. Tôi không nghĩ đây là trường hợp ở đây.Phương pháp trên lớp [] đã được sử dụng bên ngoài ứng dụng Grails

Trong một lớp học Grails Dịch vụ Tôi có:

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

và điều này đang tạo ra các lỗi:

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. 

tôi đang cố gắng để nhanh chóng một thuộc tính tĩnh riêng với một đối tượng được lưu trữ trong cơ sở dữ liệu, nhưng tôi phải làm điều gì đó khủng khiếp sai. Cảm ơn bạn đã giúp đỡ, gợi ý và gợi ý.

Trả lời

7

Nó sẽ không làm việc để làm static này, bởi vì đó sẽ cố gắng và làm cho findByUsername cuộc gọi tại thời điểm khi các lớp dịch vụ được nạp, đó là trước khi các thủ tục GrailsApplication khởi hoàn tất. Đầu tiên, bạn có thể gọi phương thức GORM một cách đáng tin cậy ở thời gian BootStrap, vì vậy những gì tôi có xu hướng làm trong các tình huống này là tạo phương thức khởi tạo trên dịch vụ và sau đó gọi phương thức đó từ việc đóng cửa BootStrap init.

+0

Cảm ơn câu trả lời của bạn, Ian – malc

2

Tôi biết đây là cũ, nhưng bạn đang sử dụng phiên bản grails nào? Tôi đã có cùng một vấn đề sau khi di cư từ grails 2.3 đến grails 2.5.

Sau một số cuộc điều tra khá đau đớn, tôi phát hiện ra vấn đề đó là khi chạy thử nghiệm với các tính chất chế độ ngã ba mới, và rất dễ dàng để giải quyết bằng cách loại bỏ các tùy chọn từ 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] 
] 

trọng.

Các vấn đề liên quan