2013-03-23 2 views
1

Grails에서 작은 웹 응용 프로그램 작성 전역 객체에 문제가 발생했습니다. 스레드를 실행하는 클래스가 있습니다 - ExecutorService와 큐잉.Grails의 전역 객체

문제는이 클래스의 개체를 만들어 컨트롤러에서 사용할 수있게하는 것입니다.

나는 init (BootStrap)에서 시도했지만 다른 곳에서는 그 인스턴스를 얻을 기회가 없다.

일반적으로 필요한 것은 Model 및/또는 Controller에서 액세스 할 수있는 전체 응용 프로그램의 단일 인스턴스에있는 개체입니다.

답변

3

- 내가 필요로하는 모든 응용 프로그램에 대한 하나 개의 단일 인스턴스의 객체가에서 접근입니다 모델 및/또는 컨트롤러.

이를 달성하기위한 표준 방법은 컨트롤러/서비스/등의 그런 grails-app/conf/spring/resources.groovy

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

declare the object as a Spring bean이다. 당신은 즉, 당신이 Grails의 서비스에서와 같은이 콩을 삽입 할 수

def threadPool 

하지만이 경우에 당신은 쉽게 간단하게 당신을 위해 이러한 빈을 정의하고이 보장하는 복잡한 처리 the executor plugin을 사용하는 찾을 수 있습니다

백그라운드 작업에 사용할 수있는 유효한 GORM 세션입니다.

1

왜 봄 콩 내부에 ExecutorService를 포장, 또는 같은 것을 사용하지 :

grailsApplication.controllerClasses.each {controller -> 
controller.metaClass.executorService = { -> 
     executorService 
} 
} 
일반적으로
0

사실 나는 답을 확인하기 전에 무엇인가를 찾아 왔습니다. 주어진 도메인 클래스 (예)와 컨트롤러 (ExampleController) 단순히

ExampleService 

과를 만들 들어

이 필요한 모든 것을 포함한다. 동작을 @Singleton (기본값)으로 설정하십시오. 그런 다음 컨트롤러에서 인스턴스를 다음과 같이 삽입합니다.

def exampleService