public Closure getBeanDefinitions()

in grails-plugin/src/main/groovy/grails/orm/bootstrap/HibernateDatastoreSpringInitializer.groovy [137:199]


    public Closure getBeanDefinitions(BeanDefinitionRegistry beanDefinitionRegistry) {
        ApplicationEventPublisher eventPublisher = super.findEventPublisher(beanDefinitionRegistry)
        Closure beanDefinitions = {
            def common = getCommonConfiguration(beanDefinitionRegistry, "hibernate")
            common.delegate = delegate
            common.call()

            // for unwrapping / inspecting proxies
            hibernateProxyHandler(HibernateProxyHandler)

            def config = this.configuration
            final boolean isGrailsPresent = isGrailsPresent()
            dataSourceConnectionSourceFactory(CachedDataSourceConnectionSourceFactory)
            hibernateConnectionSourceFactory(HibernateConnectionSourceFactory, persistentClasses as Class[]) { bean ->
                bean.autowire = true
                dataSourceConnectionSourceFactory = ref('dataSourceConnectionSourceFactory')
            }
            hibernateDatastore(HibernateDatastore, config, hibernateConnectionSourceFactory, eventPublisher) { bean->
                bean.primary = true
            }
            sessionFactory(hibernateDatastore:'getSessionFactory') { bean->
                bean.primary = true
            }
            transactionManager(hibernateDatastore:"getTransactionManager") { bean->
                bean.primary = true
            }
            autoTimestampEventListener(hibernateDatastore:"getAutoTimestampEventListener")
            getBeanDefinition("transactionManager").beanClass = PlatformTransactionManager
            hibernateDatastoreConnectionSourcesRegistrar(HibernateDatastoreConnectionSourcesRegistrar, dataSources)
            // domain model mapping context, used for configuration
            grailsDomainClassMappingContext(hibernateDatastore:"getMappingContext")

            loadDataServices(null)
                    .each {serviceName, serviceClass->
                        "$serviceName"(DatastoreServiceMethodInvokingFactoryBean, serviceClass) {
                            targetObject = ref("hibernateDatastore")
                            targetMethod = 'getService'
                            arguments = [serviceClass]
                        }
                    }

            if(isGrailsPresent) {
                if(ClassUtils.isPresent("org.grails.plugin.hibernate.support.AggregatePersistenceContextInterceptor")) {
                    ClassLoader cl = ClassUtils.getClassLoader()
                    persistenceInterceptor(cl.loadClass("org.grails.plugin.hibernate.support.AggregatePersistenceContextInterceptor"), ref("hibernateDatastore"))
                    proxyHandler(cl.loadClass("org.grails.datastore.gorm.proxy.ProxyHandlerAdapter"), ref('hibernateProxyHandler'))
                }


                boolean osivEnabled = config.getProperty("hibernate.osiv.enabled", Boolean, true)
                boolean isWebApplication = beanDefinitionRegistry?.containsBeanDefinition("dispatcherServlet") ||
                        beanDefinitionRegistry?.containsBeanDefinition("grailsControllerHelper")

                if (isWebApplication && osivEnabled && ClassUtils.isPresent("org.grails.plugin.hibernate.support.GrailsOpenSessionInViewInterceptor")) {
                    ClassLoader cl = ClassUtils.getClassLoader()
                    openSessionInViewInterceptor(cl.loadClass("org.grails.plugin.hibernate.support.GrailsOpenSessionInViewInterceptor")) {
                        hibernateDatastore = ref("hibernateDatastore")
                    }
                }
            }
        }
        return beanDefinitions
    }