【问题标题】:Grails 2.3.7 breaking changesGrails 2.3.7 重大更改
【发布时间】:2014-04-28 00:11:00
【问题描述】:

您好,将我的 grails 应用程序从 2.1 升级到 2.3.7 后,我在 runApp 上收到以下错误:

2014-04-28 10:04:07,841 [localhost-startStop-1] ERROR context.GrailsContextLoader  - Error initializing the application: Error creating bean with name 'transactionManagerPostProcessor': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource': Cannot resolve reference to bean 'dataSourceLazy' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceLazy': Cannot resolve reference to bean 'dataSourceUnproxied' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceUnproxied': Invocation of init method failed; nested exception is javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSourceFactory]
Message: Error creating bean with name 'transactionManagerPostProcessor': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource': Cannot resolve reference to bean 'dataSourceLazy' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceLazy': Cannot resolve reference to bean 'dataSourceUnproxied' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceUnproxied': Invocation of init method failed; nested exception is javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSourceFactory]
    Line | Method
->>  334 | innerRun  in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    166 | run       in java.util.concurrent.FutureTask
|   1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    615 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run . . . in java.lang.Thread
Caused by BeanCreationException: Error creating bean with name 'transactionManager': 

2.3.7 中是否有任何与数据源相关的重大更改

编辑:添加 DataSource.groovy

dataSource {
    pooled = false
    dialect = org.hibernate.dialect.Oracle10gDialect
}
hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
    development {
        dataSource {
            dbCreate = "validate" // one of 'create', 'create-drop', 'update', 'validate', ''
            jndiName = "java:comp/env/jdbc/pms_dev"
            logSql = true
        }
    }
    test {
        dataSource {
            dbCreate = "validate" // one of 'create', 'create-drop', 'update', 'validate', ''
            jndiName = "java:comp/env/jdbc/pms_test"
        }
    }
    production {
        dataSource {
            dbCreate = "validate" // one of 'create', 'create-drop', 'update', 'validate', ''
            jndiName = "java:comp/env/jdbc/pms_prod"
        }
    }
}

在 Config.groovy 中定义的 JNDI 条目:

grails.naming.entries = [
    'jdbc/pms_dev': [
        type: 'javax.sql.DataSource',
        auth: 'Container',
        description: 'Main datasource',

        url: 'jdbc:oracle:thin:@SERVER:1521:SCHEMA,
        username: "pms",
        password: "PASSWORD",
        driverClassName: "oracle.jdbc.OracleDriver",

        maxActive: "8",
        maxIdle: "4"
        ]

    ]

【问题讨论】:

  • 重大更改列表在这里:grails.org/doc/2.3.x/guide/… 找不到任何相关内容。
  • 2.2 更改:grails.org/doc/2.2.x/guide/… 似乎没有什么相关的。
  • 尝试运行grails clean-all 然后重新编译。此外,它似乎与数据源相关,因此请发布您的 Datasource.groovy 文件。
  • 全部清除后问题仍然存在
  • 这与 JNDI 的东西有关。您必须禁用分叉。

标签: spring hibernate grails


【解决方案1】:

在 BuildConfig.groovy 中

grails.project.fork = false

同样添加到 BuildConfig.groovy 中的依赖项

build "commons-dbcp:commons-dbcp:1.4"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2015-02-08
    相关资源
    最近更新 更多