2012-09-18 7 views
0

서비스 요청을 백그라운드 프로세스로 실행하는 플러그인이 있습니다. 즉, 사용자 동작과 직접 관련이없는 타이머 동작을 수행합니다.플러그인 서비스 호출 후크

이 서비스 호출이 완료 될 때마다 "기본"응용 프로그램에서 일부 코드를 실행해야합니다. 해당 플러그인 코드에 연결하는 방법이 있습니까? 플러그인 코드에 액세스 할 수 있으므로 변경하는 것이 큰 장애물은 아닙니다.

답변

2

플러그인 서비스가 완료되면 이벤트를 게시하고 기본 애플리케이션에서 해당 이벤트를 수신하도록 설정할 수 있습니다. 이 패턴을 몇 번 사용했고 여러 가지 응용 프로그램을 디커플링하는 데 매우 편리했습니다. 이렇게하려면 event 클래스를 만드십시오. 플러그인 서비스가 ApplicationContextAware을 구현

class PluginEvent extends ApplicationEvent { 
    public PluginEvent(source) { 
     super(source) 
    } 
} 

그런 다음 있습니다.

class ApplicationService implements ApplicationListener<PluginEvent> { 
    void onApplicationEvent(PluginEvent event) { 
    //whatever you want to do in your app when 
    // the plugin service fires. 
    } 
} 

이 청취자는 필요하지 않습니다 즉 플러그인 이벤트가 게시 될 때 응답 리스너 서비스를 생성하여 이벤트 기본 응용 프로그램에서 다음

class PluginService implements ApplicationContextAware { 
    def applicationContext 

    def serviceMethod() { 
    //do stuff 
    publishPluginEvent() 
    } 

    private void publishPluginEvent() { 
    def event = new PluginEvent(this) 
    applicationContext.publishEvent(event) 
    } 
} 

를 게시 할 수있는 방법을 제공합니다 Grails 서비스라면, POJO/POGO 만 사용할 수 있지만, resources.groovy 안에 스프링 빈으로 설정해야합니다.

저는 최근에이 방법을 사용해 왔으며 잘 작동 해 왔습니다. 그것은 Grails 도구 상자에있는 좋은 도구입니다.

+0

서비스가 어떻게 든 인스턴스화되어야합니까? –

+0

Grails 서비스가 아닐 경우. 다른 Grails 서비스/Spring 빈처럼 초기화 될 것입니다. – proflux

+0

그게 내가 가정 한 것이지만, Bootstrap.groovy에서 applicationService를 인스턴스화하지 않으면 모든 귀뚜라미입니다. 그런 다음 살아납니다. –