2012-03-21 2 views
1

저는 Grails를 처음 사용하고 Grails 2.0.1을 사용하고 있습니다. 나는 도메인 클래스의 객체의 변화에 ​​대한 지속성 이벤트 리스너를 추가 할하므로 사용자 가이드에 주어진 나는 Bootstrap.groovy의 코드를 시도 :Grails의 GORM에서 변경 리스너 추가하기

def init = { 
    applicationContext.addApplicationListener(new FooBarListener()) 
} 

그리고 나는 다음과 같은 오류 메시지가 :

ERROR context.GrailsContextLoader - Error executing bootstraps: No such property: applicationContext for class: BootStrap

어떻게 부트 스트랩 클래스 내부에서 applicacionContext에게 속성을 얻을 수 ? 또는 설명서가 오래되어서 도메인 변경 리스너를 추가하는 새롭고/더 좋은 방법이 있습니까? 사전에

감사합니다.

답변

2
import org.codehaus.groovy.grails.commons.ApplicationAttributes 

class BootStrap { 

    def init = {servletContext -> 

     def applicationContext = servletContext.getAttribute(ApplicationAttributes.APPLICATION_CONTEXT) 
    } 
} 
+0

고마워, 그게 효과가있는 것처럼 보이지만 또 다른 관련 문제가있다. 이제 오류 메시지가 표시됩니다 :'java.lang.NoSuchMethodError : org.grails.datastore.mapping.engine.event.AbstractPersistenceEventListener : method () V 찾을 수 없습니다. '. 작동중인 리스너를 구현하는 방법을 알고 있습니까? – pablodcar

-2

applicacionContext는 BootStrap에 정의되어야합니다. 다음과 같은 작업을해야

 class BootStrap { 
     def applicacionContext 

    def init = { 
    applicationContext.addApplicationListener(new FooBarListener()) 
    } 

    } 
+0

우선의 경우는, 아니 그것이 작동하지 않습니다, 그리고 올바르게 입력되지 것 외에입니다. –

+0

철자 오류에 대해 유감스럽게 생각합니다. 잡기위한 용기가 있습니다. 맞습니다. Grails 응용 프로그램과 서비스가 부트 스트랩에서 사용 가능하므로 applicationContext를 사용할 수 있어야한다고 생각했습니다. 그러나 나는 틀렸어 .. – Saurabh

+0

게시하기 전에 테스트하기에 충분히 쉽다. :) –

8

내가 아는 가장 짧은 방법은

class BootStrap { 

    def grailsApplication 

    def init = { servletContext -> 
     def applicationContext = grailsApplication.mainContext 
    } 
}