2013-03-23 162 views
1

在Grails中編寫一個小型Web應用程序我遇到了全局對象的問題。我有一個運行線程的類 - 帶排隊的ExecutorService。Grails中的全局對象

問題是在哪裏創建這個類的對象,讓它在Controller中可用?

我已經在init(BootStrap)嘗試過,但沒有機會獲得它的實例在任何地方。

一般來說 - 我需要的是整個應用程序的一個單一實例中的一個對象,可以從模型和/或控制器訪問。

回答

3

一般 - 我需要的是在整個應用程序的單一實例的對象,從訪問型號和/或控制器。

標準的方式實現這一目標是在declare the object as a Spring beangrails-app/conf/spring/resources.groovy

threadPool(java.util.concurrent.Executors) { bean -> 
    bean.factoryMethod = "newCachedThreadPool" 
} 

然後在控制器/服務/等等。你可以注入這個bean一樣,你會與Grails服務,即

def threadPool 

但在這種情況下,你可能會發現更容易簡單地使用the executor plugin,它定義了這樣一個bean爲您和處理,確保有錯綜複雜是可用於後臺任務的有效GORM會話。

1

爲什麼不換你的ExecutorService一個Spring bean裏面,或者使用類似:

grailsApplication.controllerClasses.each {controller -> 
controller.metaClass.executorService = { -> 
     executorService 
} 
} 
0

其實我在檢查答案之前已經找到了一些東西。

對於給定的域類(實施例)和控制器(ExampleController)創建

ExampleService 

和簡單地包括所有需要的事情出現。將行爲設置爲@Singleton(默認)。 然後在控制器中注入實例如下:

def exampleService