gpt4 book ai didi

spring - Grails 2.1 : Setting sessionFactory and dataSource from custom Spring configuration

转载 作者:行者123 更新时间:2023-12-03 01:11:51 26 4
gpt4 key购买 nike

我在 Spring 中有一个复杂的、自定义配置的 Hibernate 设置(包括 JPA 实体、 session 工厂和数据源定义),我想在 Grails 2.1.0 中使用它。正因为如此,我想给 Grails 一个对 sessionFactory 的引用。和dataSource我已经有了。所以,我不想(事实上,不能)使用 hibernate.cfg.xml位于conf/ - 我也不想使用DataSource.groovy ,因为所有复杂的配置已经由我们已经拥有的经过测试和工作的代码处理,并且都是基于 Spring 的。

所以,我已经成功地将我的自定义 Spring 配置加载到 grails run-app 上。 (通过importBeans()中的resources.groovy。)在日志中,我可以看到数据库连接,Spring配置和Hibernate启动得很好,所以在运行时bean到sessionFactory并发送至dataSource被创建。 现在,我如何配置 Grails 来使用它们而不是尝试创建自己的?

理想情况下类似dataSource = ref('myDataSource')某个地方会很棒 - 与 sessionFactory = ref('sessionFactory') 相同或类似的。我看到有些人将其放入 resources.groovy 中,但它不起作用。

我也见过这个:

eventDao(com.JavaClassRequiringDataSource) { dataSource = ref('dataSource') }

但它也不起作用(不确定是否曾经起作用。)

如果有任何帮助,我们将不胜感激……我花了过去 10 个小时试图让它发挥作用,但没有成功。我不介意失去一些 Grails 功能,只要它能工作。直接目标是让 GORM 看到我们已经拥有的(约 200 个)实体并做一些脚手架:)

我还知道 Grails 看不到这些实体,因为我已将以下内容添加到 BootStrap.groovy:

// ...
def grailsApplication
def init = { servletContext ->
println grailsApplication.domainClasses
}
// ...

它会打印 []。

如果需要补丁,请告诉我从哪里开始,我会看一下......我只是想让它正常工作。

谢谢!

更新1:

我已经尝试了 resources.groovy 文件的几种咒语,目前它看起来像这样:

beans = {
importBeans('main-spring-file-for-the-rest.xml')
dataSource = ref('dataSource')
}

但是当尝试搭建脚手架时,我仍然得到:

Error 2012-09-06 00:02:00,768 [Thread-9] ERROR plugins.DefaultGrailsPlugin  - Cannot generate controller logic for scaffolded class x.y.z.Class. It is not a domain class!

(已编辑的日志行:将类的实际名称替换为 x.y.z.Class 。)正如我之前所示,实体列表是空的,我看不到设置 Hibernate sessionFactory 的方法。 - 例如

sessionFactory = ref('sessionFactory')

不起作用。

更新2:

通过从 spring 加载 bean 和实体,但 GORM 没有使用或看到这些 bean 和实体,我能够使用 Grails 中内置的实用程序和新 bean(从 resources.groovy 配置)强制转换实体。因此:

public class TestFix implements ApplicationContextAware {
SessionFactory sessionFactory
ApplicationContext applicationContext
GrailsApplication grailsApplication

def init() {
GrailsHibernateUtil.configureHibernateDomainClasses(sessionFactory, "sessionFactory", grailsApplication)

}
}

beans = {
importBeans('main-spring-file-for-the-rest.xml')

myBean(TestFix) { bean ->
sessionFactory = ref('sessionFactory')
grailsApplication = ref(GrailsApplication.APPLICATION_ID)
bean.initMethod = 'init'
}
}

现在,Grails 可以看到这些实体,但脚手架不起作用,因为增强的域对象似乎缺少 GORM 方法(.list() 等)。您可能会期望 GrailsHibernateUtil.configureHibernateDomainClasses()在创建所有 GrailsHibernateDomainClass 时添加这些方法类,但要么它默默地失败,要么我错过了一些东西(也许运行得不够早?不确定。)非常感谢任何帮助。

最佳答案

您是否尝试过使用 db-reverse-engineer 插件来实现相反的方法?我们在将相当复杂的 Spring 应用程序迁移到 grails(大约 90 个实体)方面取得了巨大成功。

关于spring - Grails 2.1 : Setting sessionFactory and dataSource from custom Spring configuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12283868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com