The following is a chunk you can paste into Bootstrap.groovy to see what is under the hood and available to you.
One of the more useful purposes I have found for this information is pulling out service classes for some sort of startup initialization.
println "------- ServletContext Attributes -----------------------" def names = servletContext.getAttributeNames() names.each() {println "$it"} def ctx = servletContext.getAttribute('org.codehaus.groovy.grails.APPLICATION_CONTEXT') def osiv if (ctx) { def beans = ctx.beanDefinitionNames beans.sort() println "------- AppContext Beans -----------------------" beans.each() { if (it.indexOf("Interceptor") > 0 || it.indexOf('interceptor') > 0 || it.indexOf('Handler') > 0) { println "$it" } if (it == 'openSessionInViewInterceptor') { // Get the interceptor, check it state osiv = ctx.getBean(it) println "\t\t--> OSIV enabled?? ${osiv.isSingleSession()}" } } // Get the private interceptors field from the request handlerMapping class def field = org.springframework.web.servlet.handler.AbstractHandlerMapping.class.getDeclaredField('interceptors') field.accessible = true println "------- Interceptors via controllerHandlerMappings -----------------------" // Get this Field on the given object, the actual HandlerMapping that declares the interceptors def interceptors = field.get(ctx.controllerHandlerMappings) if (interceptors) { println "Got interceptors class: ${interceptors.class.name}" interceptors.each() { println "$it" } } else { println "Could not get interceptors class" } } else { println "No AppContext" } def app = servletContext.getAttribute('grailsApplication') def messageManagerService if (app) { println "\n-------------------------------------------------" println "------- grailsApplication -----------------------" println "-------------------------------------------------" println "\n------- Properties -----------------------" app.properties.each { key -> println "### $key" } println "\n------- All Artefact Classes -----------------------" def cz = app.allArtefactClasses cz.each { println it } println "\n------- Domain Classes -----------------------" cz = app.getArtefacts(DomainClassArtefactHandler.TYPE) cz = app.domainClasses cz.each { println "$it (${it.propertyName})" } println "\n------- Controller Classes -----------------------" //cz = app.getArtefacts(ControllerArtefactHandler.TYPE) cz = app.controllerClasses cz.each { println "$it (${it.propertyName})" } println "\n------- Service Classes -----------------------" //cz = app.getArtefacts(ServiceArtefactHandler.TYPE) cz = app.serviceClasses cz.each { println "$it (${it.propertyName})" } println "\n------- UrlMappings Classes -----------------------" //cz = app.getArtefacts(UrlMappingsArtefactHandler.TYPE) cz = app.urlMappingsClasses cz.each { println "$it (${it.propertyName})" } // Pull out my service class by registered bean name messageManagerService = app.mainContext['messageManagerService'] } else { println "No grailsApplication" }
No comments:
Post a Comment