Search code examples
mongodbgrailsgrails-ormbootstrapping

Custom event listener example in Grails documentation


I'm trying to add a custom GORM event listener class in Bootstrap.groovy, as described in the Grails documentation but its not working for me. Here is the code straight from the docs:

def init = {
    application.mainContext.eventTriggeringInterceptor.datastores.each { k, datastore ->
        applicationContext.addApplicationListener new MyPersistenceListener(datastore)
    }
}

When I run it, the compiler complains that application and applicationContext are null. I've tried adding them as class level members but they don't get magically wired up service-style. The closest I've got so far is:

def grailsApplication
def init = { servletContext ->
    def applicationContext = servletContext.getAttribute(ApplicationAttributes.APPLICATION_CONTEXT)
    grailsApplication.mainContext.eventTriggeringInterceptor.datastores.each { k, datastore ->
        applicationContext.addApplicationListener new GormEventListener(datastore)
    }
}

But I still get errors: java.lang.NullPointerException: Cannot get property 'datastores' on null object.

Thanks for reading...

EDIT: version 2.2.1


Solution

  • If you do:

    ctx.getBeansOfType(Datastore).values().each { Datastore d ->
       ctx.addApplicationListener new MyPersistenceListener(d)
    }
    

    This should work without needing the Hibernate plugin installed